我试图推迟在pod-0上执行某些命令(mongo copyset初始化)。基本上,我想等待其他Pod启动。我正在使用的postStart钩子看起来像这样:
- /bin/bash
- -c
- >
if [ ! -f /xyz/mongo/data/init.lock ];
then
if [ "$HOSTNAME" = "mongod-0" ];
then
MONGO_CMD="rs.initiate({ _id : \"my_mdb_rs0\", members: [ { _id: 0, host : \"mongod-0.mongodb-service.default.svc.cluster.local:27017\" }, { _id: 1, host : \"mongod-1.mongodb-service.default.svc.cluster.local:27017\" } ] });";
**/xyz/mongo/config/doinit.sh \""$MONGO_CMD\"" 120 \& ;**
fi;
else
echo "Replicaset appears to be initialized" >> /xyz/mongo/log/init-log.log;
fi;
我尝试为“ doinit.sh”派生一个子进程,该进程在执行初始化命令之前内部会休眠“ 120”秒。
但是,pod-0在“ ContainerCreating”中继续等待120秒,然后继续调度下一个Pod。
NAME READY STATUS RESTARTS AGE
mongod-0 0/1 ContainerCreating 0 2m16s
NAME READY STATUS RESTARTS AGE
mongod-0 1/1 Running 0 2m49s
mongod-1 0/1 ContainerCreating 0 5s
有没有一种方法可以解除对pod-0上的调度程序的阻塞,以便立即调度所有pod,并且第一个pod上的“ doinit.sh”将在后台等待?
对于类似的用例,我们创建了一个kubernetesjob
将
如果您不使用头盔,则可以将mongo-sts + init-job放在同一yaml文件中,因此在应用时很容易(kubectl apply -f mongo-db.yaml
)。
如果您使用头盔,则可以将其作为post-install
工作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句