当前位置: 首页 > 知识库问答 >
问题:

如何在Kubernetes中的集群配置中检查就绪状态而不造成死锁?

郭瀚海
2023-03-14

我想部署一个具有三个副本的服务,每个副本都有一个就绪探测。只有当其他两个吊舱也旋转时,一个吊舱才会开始工作(在测试就绪的端口发送数据)。所有这三个吊舱都需要启动,在内部服务中注册其IP,然后才能被发现。

在我看来,准备就绪探测器是按顺序工作的,因此只会旋转一个吊舱。这造成了一种死锁情况,即启动pod等待其他两个pod开始运行,即使它们没有启动应用程序,K8s也不会启动其他两个pod,直到第一个pod的准备就绪。

我的就绪配置为:

readinessProbe=ExecProbe(
          execute=ExecAction(command=["curl", "localhost:2004"]),
          initialDelaySeconds=120,
          timeoutSeconds=10,
          periodSeconds=10,
          successThreshold=1,
          failureThreshold=10
        )

我希望我的吊舱能够运转起来,即使当前的吊舱正在运行,但它们的准备工作并不成功。或者我应该用些别的东西而不是准备好?

共有1个答案

太叔弘壮
2023-03-14

如果您使用的是StatefulSet,请使用并行pod管理,允许Kubernetes并行创建副本,而无需等待以前的pod准备就绪。

设置<代码>。spec.podManagementPolicy:StatefulSet清单中的Parallel。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql-db
spec:
  podManagementPolicy: Parallel
  replicas: 3
  <omitted>
 类似资料:
  • 我对战备探测很困惑。假设我使用httpGet和/health作为探测endpoint。一旦就绪检查返回500,服务器将停止服务流量。那么/healthendpoint如何工作呢?换句话说,一旦准备状态检查失败,它怎么能再工作,因为它不再能够对未来/健康检查做出响应? 我想一个有效的解释是路径是在本地调用的?(即不通过HTTPS:${ip and port}/health)

  • 对于liveness,我认为它可能会开始循环使用POD/容器,尽管(在DB关闭的情况下)它可能无法修复任何东西。 准备就绪后,我想如果数据库关闭,可能会导致可用应用程序池为0。如果数据库关闭,应用程序本身很可能不会很有用,但我想部分可能仍然可以工作。 对于这种类型的事情,有推荐的最佳实践吗?

  • 此外,根据kubernetes文档,节点的容量是不同的,pvc分配绑定到pv上,而pv就像节点一样是一个完全独立的集群资源。 在这种情况下,我需要检查什么存储来查找是否有任何可用空间,比如说一个x gb动态PVC?还有,我怎么检查?

  • 我在玩QUARKUS,我试图创建摄取服务,它将数据发送到kafka或另一个RESTendpoint。我已经向项目添加了“夸克斯-小黑麦-反应性-消息传递-Kafka”和“夸克斯-反应性-消息传递-超文本传输协议”依赖项。我想只有一个特定的管道,即超文本传输协议- 现在的问题是,即使我有Kafka连接器注释在我的application.propertues,Kafka的健康检查仍然运行,并显示Kaf

  • 我有一个Kubernetes集群,其中不同的pod在不同的名称空间中运行。我如何知道是否有pod出现故障? 是否有任何单个命令来检查失败的pod列表或重述的pod列表? 重新启动的原因(日志)?