当前位置:网站首页>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
边栏推荐
- Discussion on beegfs high availability mode
- [cloud native and 5g] micro services support 5g core network
- Groovy basic syntax collation
- Oceanbase Community Edition OBD mode deployment mode stand-alone installation
- RT thread I2C tutorial
- beegfs高可用模式探讨
- JS implementation force deduction 71 question simplified path
- 深度学习分类网络 -- ZFNet
- 腾讯字节等大厂面试真题汇总,网易架构师深入讲解Android开发
- Configuration and simple usage of the EXE backdoor generation tool quasar
猜你喜欢
(3) Web security | penetration testing | basic knowledge of network security construction, IIS website construction, EXE backdoor generation tool quasar, basic use of
5. 無線體內納米網:十大“可行嗎?”問題
Example of applying fonts to flutter
HMS Core 机器学习服务打造同传翻译新“声”态,AI让国际交流更顺畅
02 基础入门-数据包拓展
A5000 vgpu display mode switching
Maximum likelihood estimation and cross entropy loss
Web security - payload
Node. Js: express + MySQL realizes registration, login and identity authentication
22-07-05 七牛云存储图片、用户头像上传
随机推荐
[cloud native and 5g] micro services support 5g core network
Tencent architects first, 2022 Android interview written examination summary
mod_ WSGI + pymssql path SQL server seat
Ideas and methods of system and application monitoring
Extraction rules and test objectives of performance test points
Special topic of rotor position estimation of permanent magnet synchronous motor -- fundamental wave model and rotor position angle
Monthly report of speech synthesis (TTS) and speech recognition (ASR) papers in June 2022
golang的超时处理使用技巧
AddressSanitizer 技术初体验
PHP and excel phpexcel
Guangzhou's first data security summit will open in Baiyun District
How to select several hard coded SQL rows- How to select several hardcoded SQL rows?
微信小程序常用集合
Pay attention to the partners on the recruitment website of fishing! The monitoring system may have set you as "high risk of leaving"
Continuous test (CT) practical experience sharing
枚举根据参数获取值
OceanBase社区版之OBD方式部署方式单机安装
青龙面板白屏一键修复
Node.js: express + MySQL实现注册登录,身份认证
B-杰哥的树(状压树形dp)