当前位置:网站首页>How does kubernetes support stateful applications through statefulset? (07)
How does kubernetes support stateful applications through statefulset? (07)
2022-07-06 20:17:00 【wzlinux】
We learned Kubernetes Stateless workload in , And put it into practice Deployment object , I believe now you have gradually fallen in love with Kubernetes 了 .
So this class , Let's have a look at Kubernetes Another workload in StatefulSet. You can tell by the name , This workload is mainly used for stateful service publishing . About stateful services and stateless Services , You can refer to the previous chapter .
Let's gradually understand from a specific example 、 know StatefulSet. stay kubectl Command line , We usually StatefulSet Shorthand for sts. Deploying a StatefulSet When , There is a pre dependent object , namely Headless Services. This object is StatefulSet The role of , We will come together in the following . in addition , Detailed introduction and other functions of this object , We will explain it separately in later courses . Here it is , You can skip it for a while Service Perception . Let's first look at the following Headless Services:
The above paragraph yaml It means , stay demo In this namespace , Create a file called nginx-demo Service for , This service is exposed 80 port , You can access with app=nginx
This label Of Pod.
Now let's use the above paragraph yaml Create a in the cluster Service:
Create the pre dependent Service, Now we can start to create real StatefulSet object , Refer to the following yaml file :
You can see , I have named it web-demo Of StatefulSet Deployment is complete .
Now let's explore a little StatefulSet The secret of , See what features it has , Why can we guarantee the stateful operation of services .
StatefulSet Characteristics of
adopt kubectl Of watch function ( Add parameters to the command line -w
), We can observe that Pod The state changes step by step .
adopt StatefulSet created Pod Names have certain rules , namely $(statefulset name )-$( Serial number )
, For example, in this example web-demo-0、web-demo-1.
There is another interesting point here ,web-demo-0 This Pod Than web-demo-1 Priority creation , And in web-demo-0 Turn into Running After the State , Was created . To prove this conjecture , We observe in a terminal window StatefulSet Of Pod:
Let's open another terminal port watch This namespace Medium event:
Now we try to change this StatefulSet Number of copies , Change it to 5:
At this time, we observe the output of the other two terminal ports :
We see again StatefulSet Managed Pod according to 2、3、4 Create in order , The name is regular , Pass the following section Deployment Created randomly Pod Names are very different .
By observing the corresponding event Information , It can also confirm our conjecture again .
Now let's try to shrink the volume :
At this time, observe the other two terminal windows , They are as follows :
You can see , At the time of volume reduction ,StatefulSet The associated Pod Press 4、3、2 Delete in order .
so , For a possession N Copies of StatefulSet Come on ,Pod When deploying, follow {0 …… N-1} Created in sequence number order , When deleting, delete one by one in reverse order , This is the first feature I want to talk about .
Then let's see ,StatefulSet created Pod Have fixed 、 And the exact host name , such as :
Let's look at the top StatefulSet Of API Object definitions , Have you found anything similar to that in our last section Deployment The definition of is very similar , The main difference is spec.serviceName
This field . It is very important ,StatefulSet According to this field , For each Pod Create a DNS domain name , This The format of the domain name by $(podname).(headless service name)
, Let's take a look at it through examples .
At present Pod and IP The corresponding relationship between them is as follows :
Pod web-demo-0 Of IP The address is 10.244.0.39,web-demo-1 Of IP The address is 10.244.0.40. Here we go through kubectl run
In the same namespace demo
Create a name in dns-test Of Pod, meanwhile attach Into the container , Be similar to docker run -it --rm
This command .
We run in containers nslookup To query their internal DNS Address , As shown below :
You can see , Every Pod There is a corresponding A Record .
Let's delete these now Pod, See what's going to change :
After deleting successfully , You can find StatefulSet A new Pod, however Pod The name remains unchanged . The only change is IP It has changed .
Let's see DNS Record :
It can be seen that ,DNS On record Pod The domain name of has not changed , only IP The address has changed . So when Pod The node where it is located fails, resulting in Pod Drift to other nodes , perhaps Pod Deleted and rebuilt due to failure ,Pod Of IP Will change , however Pod There will be no change in your domain name , That means Services can pass through constant Pod Domain name to ensure the stability of communication , Instead of relying on Pod IP.
With spec.serviceName
This field , To ensure the StatefulSet The associated Pod Can have a stable network identity , namely Pod The serial number of 、 Host name 、DNS Record name, etc .
The last thing I want to say is , For stateful Services , Each copy will use persistent storage , And the data used are different .
StatefulSet adopt PersistentVolumeClaim(PVC) Can guarantee Pod The one-to-one corresponding binding relationship between storage volumes . meanwhile , Delete StatefulSet The associated Pod when , Will not delete its associated PVC.
We will introduce it in the following chapters of network storage , Skip again .
How to update StatefulSet
that , If you want to talk to a StatefulSet upgrade , What to do ?
stay StatefulSet in , Two update and upgrade strategies are supported , namely RollingUpdate and OnDelete.
RollingUpdate Strategy is Default update strategy . Can achieve Pod Rolling upgrade , Follow us in the last lesson Deployment To introduce the RollingUpdate The strategy is the same . For example, we did the image update operation at this time , Then the whole upgrade process is roughly as follows , Delete all in reverse order first Pod, Then create new images in turn Pod come out . Here you can go through kubectl get pod -n demo -w -l app=nginx
Come and watch .
Use at the same time RollingUpdate The update strategy also supports partition Parameter to update a segment StatefulSet. All serial numbers are greater than or equal to partition Of Pod Will be updated . You can also update manually here StatefulSet Configuration to experiment .
When you set the update policy to OnDelete when , We have to delete it manually first Pod, To trigger a new Pod to update .
Last
Now let's summarize StatefulSet Characteristics :
- Have fixed network marks , For example, host name , Domain name etc. ;
- Support persistent storage , And it's better to bind with instances one by one ;
- You can deploy and expand in order ;
- You can terminate and delete in order ;
- During rolling upgrade , It will also follow a certain order .
With the help of StatefulSet These capabilities of , We can deploy some stateful Services , such as MySQL、ZooKeeper、MongoDB etc. . You can follow this course stay Kubernetes Build a ZooKeeper colony .
Welcome to scan the code to pay attention to , For more information
边栏推荐
- Tencent T3 Daniel will teach you hand-in-hand, the internal information of the factory
- 精彩编码 【进制转换】
- Detailed introduction of distributed pressure measurement system VIII: basic introduction of akka actor model
- Poj3617 best cow line
- 系统与应用监控的思路和方法
- Discussion on beegfs high availability mode
- PowerPivot - DAX (first time)
- Synchronization of data create trigger synchronization table for each site
- 夏志刚介绍
- mod_wsgi + pymssql通路SQL Server座
猜你喜欢
随机推荐
JMeter server resource indicator monitoring (CPU, memory, etc.)
腾讯安卓开发面试,android开发的基础知识
22-07-05 七牛云存储图片、用户头像上传
01 basic introduction - concept nouns
Transformer model (pytorch code explanation)
5. Nano - Net in wireless body: Top 10 "is it possible?" Questions
【计网】第三章 数据链路层(3)信道划分介质访问控制
Enumeration gets values based on parameters
JVM_ Common [interview questions]
New generation garbage collector ZGC
Wonderful coding [hexadecimal conversion]
深度学习分类网络 -- ZFNet
Notes on beagleboneblack
Jupyter launch didn't respond after Anaconda was installed & the web page was opened and ran without execution
(3) Web security | penetration testing | basic knowledge of network security construction, IIS website construction, EXE backdoor generation tool quasar, basic use of
PHP与EXCEL PHPExcel
POJ1149 PIGS 【最大流量】
rt-thread i2c 使用教程
Speech recognition (ASR) paper selection: talcs: an open source Mandarin English code switching corps and a speech
Oceanbase Community Edition OBD mode deployment mode stand-alone installation