1. Pod升级报错
1)exceeded its progress deadline
kubernetes执行命令kubectl rollout status deployment.v1.apps/nginx-deployment
后提示错误如下:
error: deployment "nginx-deployment" exceeded its progress deadline
检查Deployment描述kubectl describe deployment nginx-deployment
报错原因:Pod升级超过了最大的时间限制,变成了超时状态,Pod升级失败
查看描述信息可以得知是因为nginx的版本nginx:1.91错误,实际上并没有这个版本。且这种版本错误执行Pod升级命令后还有另外一种报错信息,如下:
2)Waiting for deployment…………
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
报错原因:因为使用的是不存在的镜像,系统无法进行正确的镜像升级,会一直处于Waiting状态,需要使用Ctrl+C组合键来终止此操作。
2. 失败的Deployment
2.1 Deployment失败原因
当使用Deployment控制器部署最新的ReplicaSet时,可能会遇到错误,一直处于未完成的状态。造成此情况的一些可能因素如下:
- 配额(Quota)不足
资源的配额管理(Resource Quotas):可以为每一个命名空间(namespace)提供一个总体的资源使用限制,通过它可以限制命名空间中某个类型的对象的总数目上限,也可以设置命名空间中Pod可以使用到的计算资源的总上限。
- 就绪探测(Readiness Probe)失败
Readiness Probe :用于判断容器是否启动完成(ready状态),可以接收请求。如果ReadinessProbe探针检测到失败,则Pod的状态被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的Endpoint。
- 镜像拉取错误
- 权限不足
- 限制范围(Limit Ranages)问题
- 应用程序运行时的配置错误
检测上述状态的一种方法是在Deployment规约中指定截止时间参数:.spec.progressDeadlineSeconds
.spec.progressDeadlineSeconds
给出的是一个秒数值,Deployment控制器在标示Deployment进展停滞之前,需要等待所给的时长。一旦超过这个时间(.spec.progressdeadlineSeconds规定的时间),使用kubectl rollout status
命令查看Deployment更新的过程就会报错,如下:
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
error: deployment "nginx" exceeded its progress deadline
需要注意的是,这正是开篇所讲的两种报错,即Deployment已超过进度限期。
2.2 进度期限秒数
.spec.progressDeadlineSeconds
是一个可选字段,用于指定系统在报告 Deployment 进展失败之前等待 Deployment 取得进展的秒数。
这类报告会在资源状态中体现为 type: Progressing
、status: False
、 reason: ProgressDeadlineExceeded
。
Deployment 控制器将在默认 600 毫秒内持续重试 Deployment。 将来,一旦实现了自动回滚,Deployment 控制器将在探测到这样的条件时立即回滚 Deployment。
以下 kubectl
命令设置规约中的 progressDeadlineSeconds
,从而告知控制器 在 10 分钟后报告 Deployment 的上线没有进展:
kubectl patch deployment/nginx-deployment -p '{"spec":{"progressDeadlineSeconds":600}}'
输出类似于:
deployment.apps/nginx-deployment patched
超过截止时间后,Deployment 控制器将添加具有以下属性的 Deployment 状况到 Deployment 的 .status.conditions
中:
type: Progressing
status: "False"
reason: ProgressDeadlineExceeded
声明:参考资料为k8s文档,感兴趣的可自行查看: