2017-06-21 34 views
0

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

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

我尝试过活性和准备就绪探测器,部署策略和就绪/进度部署属性的各种组合。我试着检查部署的状态,其吊舱和转出命令。一切都无济于事。

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

回答

1

您还没有提到您的部署策略。但是我在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以及上述配置。

+0

“kubectl部署状态deploy/my-deployment”将检查最新部署。是否可以选择刚刚触发的部署? – yogiginger

+0

@Amrit Bera获得展示状态退出代码似乎不是一个可扩展的解决方案,因为它只会在成功部署最新部署并完全移除旧部署时才会成功推出。因此,很难获得正确的超时值这个。你有什么更好的解决方案?我现在面临这个问题。 –

相关问题