如何验证Kubernetes部署更新是否成功?

时间:2017-06-21 12:23:07

标签: deployment kubernetes kubernetes-health-check

我有一个简单的Kubernetes部署。它由一个未复制的单个容器组成。没有服务暴露容器。容器具有运行状况检查,该检查检查它是否已正确配置并可与其外部依赖项进行通信。我使用kubectl apply更新部署。

更新部署后,我想检查新版本是否已完全推出并正在通过其运行状况检查。我无法弄清楚如何配置我的部署来实现这一目标。

我尝试了各种活动和就绪探测,部署策略和就绪/进度部署属性的组合。我已经尝试检查部署状态,其pod和rollout命令。一切都没有用。

我的印象是我应该查看部署条件以了解状态,但我无法找到有关这些条件是什么或如何实现这些条件的明确文档。

1 个答案:

答案 0 :(得分:5)

您尚未提及部署策略。但是我在k8s部署中遇到的一个普遍问题是,如果应用程序无法启动,它将无限重启。因此,在检测到部署失败状态后,您可能必须kubectl delete deploy/******。 (探测器也有failureThreshold,但我还没有尝试过。)

案例重新创建

您可以使用progressDeadlineSecondsreadinessProbe的组合。让我们说你的应用程序需要60秒才能启动/启动。您需要在更安全的一侧配置progressDeadlineSeconds超过60秒。现在,在运行kubectl apply -f my-deploy.yaml之后,运行kubectl rollout status deploy/my-deployment命令。对我来说,它看起来像这样:

12:03:37 kubectl apply -f deploy.yaml
12:03:38 deployment "my-deployment" configured
12:04:18 kubectl rollout status deploy/my-deployment
12:04:18 Waiting for rollout to finish: 0 of 1 updated replicas are available (minimum required: 1)...
12:04:44 deployment "my-deployment" successfully rolled out

执行rollout命令后,kubectl会一直等到有答案。它还返回正确的退出代码echo $? - 您可以以编程方式检查并删除部署。

案例 rollingUpdate

如果你有多个副本,那么上面提到的技巧应该有效。 如果您只有一个副本,请使用maxUnavailable: 0maxSurge: 1以及上述配置。