Deployment 提供了一个声明式定义 (declarative) 方法来创建 Pod 和 ReplicaSet。
你只需要在 Deployment 中描述你想要的目标状态,Deployment controller 就会将 Pod 和 Replica Set 的实际状态改变到你描述的目标状态。
创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
kubectl create -f docs/user-guide/nginx-deployment.yaml --record
Deployment 更新
Deployment 的 rollout 当且仅当 Deployment 的 pod template中的 label 更新或者镜像更改时被触发。
kubectl set image deployment/nginx-deployment nginx=nginx:1.9.1
查看rollout状态
kubectl rollout status deployment/nginx-deployment
Deployment 可以保证在升级时只有一定数量的 Pod 是 down 的。默认的,它会确保至少有比期望的 Pod 数量少一个的 Pod 是 up 状态(最多一个不可用)。
Deployment 同时也可以确保只创建出超过期望数量的一定数量的 Pod。默认的,它会确保最多比期望的 Pod 数量多一个的 Pod 是 up 的(最多 1 个 surge)。
Deployment 回滚
默认情况下,kubernetes 会在系统中保存所有的 Deployment 的 rollout 历史记录,以便你可以随时回退,也就是说当且仅当 Deployment 的 Pod template 被更改,就会创建出一个新的 revision。
查询历史版本
kubectl rollout history deployment/nginx-deployment
回退到上一个版本
kubectl rollout undo deployment/nginx-deployment
回退到指定版本
kubectl rollout undo deployment/nginx-deployment --to-revision=2
可以通过设置 .spec.revisonHistoryLimit 项来指定 deployment 最多保留多少 revison 历史记录
网友评论