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

Ben*_*ole 7 deployment kubernetes kubernetes-health-check

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

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

我尝试了各种活动和准备探测,部署策略和就绪/进度部署属性的组合.我已经尝试检查部署状态,其pod和rollout命令.一切都无济于事.

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

Amr*_*era 7

您尚未提及部署策略.但是我在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
Run Code Online (Sandbox Code Playgroud)

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

案例rollingUpdate:

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