【发布时间】:2021-11-04 15:30:40
【问题描述】:
我有一个在 Kubernetes 中以StatefulSet 运行的应用程序,它启动了 2 个 pod。它已经配置了一个 liveness probe 和一个 readiness probe。
liveness probe 调用一个简单的/health 端点,该端点在服务器完成加载时做出响应
readiness probe,等待一些启动工作完成。在某些情况下,该作业可能需要几分钟时间,并且只有当它完成应用程序的 api 才准备好开始接受请求。
即使 api 不可用,我的应用也会运行不依赖它的辅助作业,我希望它们也能在启动时完成。
是否可以强制 Kubernetes 部署完成并部署 2 个 Pod,即使就绪探测仍未通过?
从文档中我了解到,没有通过就绪探测的唯一影响是当前 pod 不会包含在负载均衡器服务中(这实际上是我想要的唯一效果)。
如果就绪探测失败,端点控制器将删除 Pod 的 IP 地址来自所有匹配的服务的端点 豆荚。
但是我也看到部署永远不会完成,因为 pod 1 就绪探测没有通过并且 pod 2 从未创建。
kubectl rollout restart statefulset/pod
kubectl get pods
NAME READY STATUS RESTARTS AGE
pod-0 1/2 Running 0 28m
如果就绪探测失败,请始终阻止部署,是否有其他方法可以选择性地仅在负载均衡器中公开就绪的 Pod,同时在部署期间不将它们标记为未就绪?
提前致谢!
【问题讨论】:
-
即使 api 不可用,我的应用程序也会运行不依赖它的辅助作业,我希望它们也能在启动时完成。 .那么“副业”应该从 API 中分离出来。
-
同意,虽然这是我目前无法在我的应用程序中控制的事情
-
澄清一下,
pod-0 ready 1/2表示这个 pod 由 2 个容器组成,而第二个容器无法创建?第一个是初始化容器吗? -
没错,我忘了说,每个 pod 上都有一个 init 容器,可以正常启动。问题是我的部署中还应该有一个 pod-1 永远不会出现。
标签: kubernetes kubectl kubernetes-statefulset kubernetes-deployment