
本文共 2026 字,大约阅读时间需要 6 分钟。
Kubernetes工作负载资源之Deployment
1. 前言
一个Deployment控制器为Pods和ReplicaSets提供声明式的更新能力。Deployment控制器通过调整实际状态以实现目标状态,同时以受控速率进行操作,确保Kubernetes集群的稳定性。
2. 适用场景
2.1 创建Deployment启动ReplicaSet
通过创建Deployment,定义新的ReplicaSet,ReplicaSet会在后台创建所需的Pod。检查ReplicaSet的上线状态,确保所有Pod都已成功上线。
2.2 更新Pod模板
通过修改Deployment的PodTemplateSpec声明新的Pod状态,系统会在后台创建新的ReplicaSet,旧的ReplicaSet会被逐渐替代。每次修改都会生成新的Deployment修订版本。
2.3 回滚到旧版本
当Deployment状态不稳定时,可以选择回滚到较早的版本。每次回滚都会生成新的修订版本。
2.4 扩容
扩大Deployment的规模以处理更多负载,通过修改Deployment的replicas字段即可实现。
2.5 暂停并恢复部署
在对PodTemplateSpec进行多次修改后,先暂停部署,待确认新版本稳定后再恢复部署执行。
2.6 检查部署状态
通过查看Deployment的状态(如kubectl get deployments
命令)确保部署运行正常,关注其就绪、更新、可用和年龄等字段信息。
3. 启动 Pod
3.1 编写yaml
编写deployment_nginx.yml
文件,用于创建一个ReplicaSet并启动三个Nginx Pod。
示例:
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment labels: app: nginxspec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.12.2 ports: - containerPort: 80
3.2 启动
使用kubectl命令创建Deployment:
kubectl create -f deployment_nginx.yml deployment.apps/nginx-deployment created
检查ReplicaSet状态:
kubectl get rs
4. 更新 Deployment
4.1 只有当模板发生变化时才会触发更新
只有当Deployment的Pod模板(.spec.template
)发生变化时,比如标签或镜像更新,才会触发上线操作。其他修改如扩缩容不会触发上线。
4.2 先更新Nginx Pod
通过以下命令将Nginx镜像从1.12.2更新到1.13:
kubectl --record deployment.apps/nginx-deployment set image deployment.v1.apps/nginx-deployment nginx=nginx:1.9.1
或直接执行:
kubectl set image deployment nginx-deployment nginx=nginx:1.13
5. 检查 Deployment 上线历史
5.1 查看修订历史
查看Deployment的滚动历史和修订信息:
kubectl rollout history deployment.v1.apps/nginx-deployment
输出显示每个修订的原因,CHANGE-CAUSE字段从kubernetes.io/change-cause
注解复制而来。
5.2 设置 CHANGE-CAUSE 信息
手动添加注解并使用--record
标志保存操作:
kubectl annotate deployment.v1.apps/nginx-deployment kubernetes.io/change-cause="image updated to 1.9.1"
6. 图解滚动发布
滚动发布通常包括以下步骤:
通过这些步骤,可以实现零停机时间或最小化停机时间的滚动发布,确保服务连续性。
发表评论
最新留言
关于作者
