如何使用initContainers检查cassandra是否已启动并正在运行

mwg9r5ms  于 2023-01-05  发布在  Cassandra
关注(0)|答案(2)|浏览(185)

在我的kubernetes集群中,我有cassandra statefulset,它正在使用cassandra:4.0映像,我希望我的应用程序pod等待cassandra首先启动并运行。
我想这可以通过在应用程序pod部署中添加一个initContainers来实现。initContainer将检查cassandra的状态,从而阻止应用程序pod启动,直到它确保cassandra的可用性。
我不知道如何创建这样的initContainer来检查cassandra statefulset的状态,我在网上查过了,但是没有找到任何与cassandra相关的例子。
任何帮助都将不胜感激。
注意:我没有使用actual cassandra image,也没有使用这个示例(gcr.io/google-samples/cassandra:v13

lyfkaqu1

lyfkaqu11#

使用类似于Cassandra舵图准备探测器的方法:

spec:
  template:
    spec:
      initContainers:
      - name: check-cassandra-ready
        image: cassandra:3.11
        command: ['sh', '-c', 
          'until nodetool -h <cassandra-host> status | grep -E "^UN\\s+${POD_IP}";
          do echo waiting for cassandra; sleep 2; done;']

您的Cassandra版本必须与nodetool版本相同。

3npbholx

3npbholx2#

您可以等待cassandra服务被创建,使用一个shell单行命令,如:

for i in {1..100}; do sleep 1; if dig cassandraservice; then exit 0; fi; done; exit 1

参考:https://kubernetes.io/docs/concepts/workloads/pods/init-containers/

相关问题