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

How to verify that a Kubernetes deployment update has been successful?

我有一个简单的 Kubernetes 部署。它由一个单一的、未复制的容器组成。没有暴露容器的服务。容器有一个健康检查,检查它是否正确配置并且可以与其外部依赖项通信。我使用 kubectl apply.

更新部署

更新部署后,我想检查一下新版本是否已完全推出并正在通过健康检查。我不知道如何配置我的部署来实现这一点。

我尝试了各种活动和就绪探测、部署策略和 ready/progress 部署属性的组合。我已经尝试检查部署状态、它的 pods 和 rollout 命令。都无济于事。

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

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

案例重新创建:

您可以使用 progressDeadlineSecondsreadinessProbe 的组合。假设您的应用程序需要 60 秒才能 boot-up/spin-up。您需要配置 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 将一直等待直到它有一些答案。它还 returns 具有正确的退出代码 echo $? - 您可以通过编程方式检查它并删除部署。

案例rollingUpdate:

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