一、Deployment控制器核心
(1)、适合部署无状态的应用服务
(2)、用来管理pod和replicaset
(3)、上线部署、副本控制、滚动更新、回滚等功能
二、 K8S的Deployment控制器滚动升级 (金丝雀发布 or 灰度发布)
(1)、对各个实例批次进行单独更新,而非同一时刻对所有实例进行全部更新,达到不中断服务的更新升级方式
(2)、Deployment控制器 给旧版本(old_rs)副本数减少至0、给新版本(new_rs)副本数量增至期望值(replicas)
(3)、Deployment更新有两种方式
Recreate :删除全部旧的pod,然后创建新的pod
RollingUpdate:滚动升级更新,删除部分,更新部分,在整个更新过程中,存在两个版本的pod:分别是maxUnavailable 和 maxSurge
[root@master ~]# more deploy-rollout.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: haha-deploy
namespace: dev
spec:
replicas: 5
revisionHistoryLimit: 5 #保留历史版本5个
strategy:
type: RollingUpdate
selector:
matchLabels:
app: haha-nginx-pod
template:
metadata:
labels:
app: haha-nginx-pod
spec:
containers:
- name: haha-nginx
image: nginx:1.20.0
1、查看控制器参数
[root@master ~]# kubectl describe deploy haha-deploy -n dev
滚动升级
2、将nginx版本更新至1.23.0
[root@master ~]# kubectl set image deployment/haha-deploy haha-nginx=nginx:1.23.0 -n dev
备注:
追加 --record 以保存正在更改资源的 kubectl 命令,方便查看history版本列表修改命令
[root@master ~]# kubectl set image deployment/haha-deploy haha-nginx=nginx:1.23.0 -n dev --record=true
[root@master ~]# kubectl set image deployment/haha-deploy haha-nginx=nginx:1.20.0 -n dev --record=true
3、动态查看升级过程,存在多个不同版本
[root@master ~]# kubectl get pods -n dev -w
4、发布回滚
kubectl rollout 版本升级相关介绍
history 升级历史记录
undo 默认回滚上一版本,使用--to-revision回滚到指定版本
pause 暂停版本升级发布
resume 继续恢复刚暂停的版本升级
status 升级状态
查看历史版本列表
[root@master ~]# kubectl rollout history deployment/haha-deploy -n dev
查看具体某一个历史版本信息
[root@master ~]# kubectl rollout history deployment/haha-deploy -n dev --revision=2
回滚上一版本
[root@master ~]# kubectl rollout undo deployment/haha-deploy -n dev
查看升级情况
[root@master ~]# kubectl rollout status deployment/haha-deploy -n dev
回滚指定版本
[root@master ~]# kubectl rollout undo deployment/haha-deploy -n dev --to-revision=2
----------------------end---------------------
推荐阅读
1、K8s最佳实践Kubernetes-Rancher2.x持续交付与自动化运维
5、第4节 Kubernetes标签Label和标签选择器实战

如果本文对你有帮助的话,欢迎点赞&在看&转发,这对我继续分享&创作优质文章非常重要。感谢🙏🏻




