当前位置:网站首页>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
边栏推荐
- 微信小程序常用集合
- Synchronization of data create trigger synchronization table for each site
- JS get browser system language
- JMeter server resource indicator monitoring (CPU, memory, etc.)
- Redisson bug analysis
- Maximum likelihood estimation and cross entropy loss
- 22-07-05 upload of qiniu cloud storage pictures and user avatars
- Example of shutter text component
- Wechat applet common collection
- Qinglong panel white screen one key repair
猜你喜欢
枚举根据参数获取值
腾讯架构师首发,2022Android面试笔试总结
Crawler (14) - scrape redis distributed crawler (1) | detailed explanation
某东短信登录复活 安装部署教程
Special topic of rotor position estimation of permanent magnet synchronous motor -- fundamental wave model and rotor position angle
Tencent T2 Daniel explained in person and doubled his job hopping salary
Error analysis ~csdn rebound shell error
[network planning] Chapter 3 data link layer (3) channel division medium access control
2022年6月语音合成(TTS)和语音识别(ASR)论文月报
Notes on beagleboneblack
随机推荐
Web security - payload
Unity makes AB package
Number of schemes from the upper left corner to the lower right corner of the chessboard (2)
Case ① | host security construction: best practice of 3 levels and 11 capabilities
Wonderful coding [hexadecimal conversion]
【GET-4】
永磁同步电机转子位置估算专题 —— 基波模型类位置估算概要
Leetcode brush first_ Maximum Subarray
HDU 1026 Ignatius and the Princess I 迷宫范围内的搜索剪枝问题
mod_wsgi + pymssql通路SQL Server座
Tips for web development: skillfully use ThreadLocal to avoid layer by layer value transmission
[network planning] Chapter 3 data link layer (4) LAN, Ethernet, WLAN, VLAN
What happened to the kernel after malloc() was transferred? Attached malloc () and free () implementation source
Example of applying fonts to flutter
【GET-4】
Extraction rules and test objectives of performance test points
Logstash expressway entrance
AddressSanitizer 技术初体验
案例 ①|主机安全建设:3个层级,11大能力的最佳实践
Initial experience of addresssanitizer Technology