Kubernetes进阶实战读书笔记:StatefulSet控制器(资源升级)

一、滚动更新

1、将myapp控制器下的pod资源镜像升级为:"ikubernetes/myapp:v6"

1
2
[root@master ~]# kubectl set image sts myapp myapp=ikubernetes/myapp:v6
statefulset.apps/myapp image updated

2、实时监控更新操作过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@master chapter9]# kubectl get pods -l app=myapp-pod -w
NAME READY STATUS RESTARTS AGE
myapp-0 1/1 Running 0 39s
myapp-1 1/1 Running 0 36s
myapp-2 1/1 Running 0 34s
myapp-2 1/1 Terminating 0 38s
myapp-2 0/1 Terminating 0 40s
myapp-2 0/1 Terminating 0 49s
myapp-2 0/1 Terminating 0 49s
myapp-2 0/1 Pending 0 0s
myapp-2 0/1 Pending 0 0s
myapp-2 0/1 ContainerCreating 0 0s
myapp-2 1/1 Running 0 2s
myapp-1 1/1 Terminating 0 53s
myapp-1 0/1 Terminating 0 55s
myapp-1 0/1 Terminating 0 56s
myapp-1 0/1 Terminating 0 56s
myapp-1 0/1 Pending 0 0s
myapp-1 0/1 Pending 0 0s
myapp-1 0/1 ContainerCreating 0 0s
myapp-1 1/1 Running 0 2s
myapp-0 1/1 Terminating 0 61s
myapp-0 0/1 Terminating 0 62s
myapp-0 0/1 Terminating 0 63s
myapp-0 0/1 Terminating 0 63s
myapp-0 0/1 Pending 0 0s
myapp-0 0/1 Pending 0 0s
myapp-0 0/1 ContainerCreating 0 0s
myapp-0 1/1 Running 0 3s

3、验证更新是否生效

1
2
3
4
[root@master ~]# for i in 0 1 2; do kubectl get po myapp-$i --template '{{range $i,$c := .spec.containers}}{{$c.image}}{{end}}';echo; done
ikubernetes/myapp:v6
ikubernetes/myapp:v6
ikubernetes/myapp:v6

另外、用户也可使用""命令跟踪statefulset资源滚动更新过程中的状态信息

二、暂存更新操作

1、暂存更新

1
2
[root@master ~]# kubectl patch statefulset myapp -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":3}}}}'
statefulset.apps/myapp patched

2、而后、更新myapp控制器的pod资源镜像版本更新为:"ikubernetes/myapp:v7"

1
2
[root@master ~]# kubectl set image sts myapp myapp=ikubernetes/myapp:v7
statefulset.apps/myapp image updated

3、接着检测各POD资源的镜像文件版本信息、可以发现其版本并为发生改变

1
2
3
4
[root@master ~]# for i in 0 1 2; do kubectl get po myapp-$i --template '{{range $i,$c := .spec.containers}}{{$c.image}}{{end}}';echo; done
ikubernetes/myapp:v6
ikubernetes/myapp:v6
ikubernetes/myapp:v6

删除了pod对象myapp-1、随后待其重建操作启动后、再获取与其相关的镜像信息、结果依然显示了旧的版本

1
2
3
4
5
[root@master ~]# kubectl delete pod myapp-1
pod "myapp-1" deleted
[root@master ~]# kubectl get pods myapp-1 -o custom-columns=NAME:metadata.name,IMAGE:spec.containers[0].image
NAME IMAGE
myapp-1 ikubernetes/myapp:v6

由此可见、暂存状态的更新操作对所有的pod资源均不产生影响

三、金丝雀部署

1、更新分区myapp-2 的镜像为:"ikubernetes/myapp:v7"

1
2
[root@master ~]# kubectl patch statefulset myapp -p '{"spec":{"updateStrategy":{"rollingUpdate":{"partition":2}}}}'
statefulset.apps/myapp patched

2、验证版本是否生效

1
2
3
4
5
[root@master ~]# kubectl get pods -l app=myapp-pod -o custom-columns=NAME:metadata.name,IMAGE:spec.containers[0].image
NAME IMAGE
myapp-0 ikubernetes/myapp:v6
myapp-1 ikubernetes/myapp:v6
myapp-2 ikubernetes/myapp:v7
posted @   活的潇洒80  阅读(821)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示