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时,可能会遇到错误,一直处于未完成的状态。造成此情况的一些可能因素如下:

  1. 配额(Quota)不足

资源的配额管理(Resource Quotas):可以为每一个命名空间(namespace)提供一个总体的资源使用限制,通过它可以限制命名空间中某个类型的对象的总数目上限,也可以设置命名空间中Pod可以使用到的计算资源的总上限。

  1. 就绪探测(Readiness Probe)失败

Readiness Probe :用于判断容器是否启动完成(ready状态),可以接收请求。如果ReadinessProbe探针检测到失败,则Pod的状态被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的Endpoint。

  1. 镜像拉取错误
  2. 权限不足
  3. 限制范围(Limit Ranages)问题
  4. 应用程序运行时的配置错误

检测上述状态的一种方法是在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: Progressingstatus: Falsereason: 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文档,感兴趣的可自行查看:

文档首页传送

报错精确定位传送

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐