Deployment 的状态
Deployment 控制器在整个生命周期中存在 3 3 3 种状态:
- 已完成(
Complete
) - 进行中(
Progressing
) - 失败(
Failed
)
通过观察 Deployment 的当前特征,可以判断 Deployment 的状态。下表展示了不同状态时 Deployment 的特征。
Deployment 的状态 | |
---|---|
已完成(Complete ) | (1)Deployment 管理的所有 Pod 副本都已更新到指定的版本了。 (2)Deployment 管理的所有 Pod 副本都可用。 (3)所有旧的 Pod 副本都已停止。 |
进行中(Progressing ) | (1)Deployment 正在通过 ReplicaSet 创建 Pod。 (2)Deployment 正在通过 ReplicaSet 进行扩容 / 缩容。 (3)Deployment 管理的 Pod 已经就绪或者可用。 |
失败(Failed ) | (1)就绪探针检测失败。 (2)资源的配额不足。 (3)镜像下载错误。 (4)权限与应用配置错误。 |
下面通过一个例子来验证 Deployment 在生命周期内的不同状态。
修改 deployment-demo.yaml
文件,将其副本数设置为 1
。完整的 YAML 文件如下:
apiVersion: apps/v1
kind: Deployment
metadata:name: deployment-demolabels:app: nginx
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9imagePullPolicy: IfNotPresentports:- containerPort: 80
运行以下命令创建 Deployment。
kubectl apply -f deployment-demo.yaml
运行以下命令获取 Deployment 的详细信息。
kubectl describe deploy deployment-demo
输出的信息如下:
🚀 从输出的信息可以看出,Deployment 的
Progressing
和Available
都是True
。这说明 Deployment 已经满足 已完成(Complete
)状态的特征,因此此时 Deployment 已经进入 已完成(Complete
)状态。
执行 Deployment 的扩容操作,将其副本数设置为 5
。
kubectl scale deployment deployment-demo --replicas=5
使用 kubectl rollout status
命令监视 Deployment 扩容的进度。
kubectl rollout status deployment deployment-demo
输出的信息如下:
在 Deployment 扩容过程中,运行以下命令获取 Deployment 的详细信息。
kubectl describe deploy deployment-demo
输出的信息如下:
Conditions:Type Status Reason---- ------ ------Progressing True NewReplicaSetAvailableAvailable False MinimumReplicasAvailable
🚀 从参数
Progressing
和Available
的值(Progressing=True
,Available=False
)可以看出,Deployment 正处于 进行中(Progressing
)状态。
更新 Nginx 的版本为 nginx:1.123
。
kubectl set image deployment deployment-demo nginx=nginx:1.123
⭕
nginx:1.123
是一个不存在的版本,所以会导致 Deployment 更新失败。
为了尽快看到 Deployment 的出错信息,可以将 .spec.progressDeadineSeconds
字段设置得小一些,例如 120 s 120 s 120s。
kubectl patch deployment deployment-demo \
-p '{"spec": {"progressDeadlineSeconds":120}}'
🚀
.spec.progressDeadlineSeconds
字段表示在 Deployment 完成前需要等待的最长时间,默认值是 600 s 600 s 600s。
等待 120 s 120s 120s 后,运行以下命令获取 Deployment 的详细信息。
kubectl describe deploy deployment-demo
输出的信息如下:
⭕ 由于 Deployment 无法下载镜像信息,因此进入 失败(
Failed
)状态。这时参数Processing
的值是False
。
使用 kubectl rollout status
命令监视 Deployment 的更新进度。
kubectl rollout status deployment deployment-demo
输出的信息如下: