如何在kubernetes的postStart生命周期挂钩中推迟执行命令

拉杰什

我试图推迟在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”将在后台等待?

迪内什(Dinesh)Balasubramanian

对于类似的用例,我们创建了一个kubernetesjob

  • 等待3个mongo副本开始运行。这可以通过调用kubernetes api(或)简单地等待120秒并尝试运行命令来完成。如果失败,则Job将创建另一个Pod来运行命令。我们可以配置作业的重试次数。

如果您不使用头盔,则可以将mongo-sts + init-job放在同一yaml文件中,因此在应用时很容易(kubectl apply -f mongo-db.yaml)。

如果您使用头盔,则可以将其作为post-install工作。

PostStart与工作:
  • 重试可以在Job中进行
  • 您可以轻松查看pod(由作业创建)的日志,以查看作业中出了什么问题。
  • 如果PostStart挂钩花费太长时间运行或挂起,则Container无法达到运行状态。我同意,您正在尝试将其置于后台。作业将独立于吊舱的生命周期。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在VueJS生命周期挂钩中设置数据

vue-test-utils:如何在mount()生命周期挂钩中测试逻辑(使用vuex)?

角组件继承。父母的生命周期挂钩如何执行?

在created()生命周期挂钩中的vue异步调用

已安装生命周期挂钩中的Vuejs函数

Angular生命周期挂钩中的数据流

为什么在 Kubernetes CronJob 中执行 exec 生命周期挂钩时出现错误 137

生命周期挂钩执行,但不应执行

容器的postStart挂钩中的多个命令

在SpecFlow 3生命周期挂钩中使用SimpleInjector范围

nativescript-vue无法读取生命周期挂钩中的数据属性

放置在 Angular 的 ngOnChanges 生命周期挂钩中时,函数未运行

订阅生命周期挂钩中的observable之后,类变量未定义

Angular 6-生命周期挂钩中的承诺使其他测试失败

Vue.js和Vue-router的生命周期挂钩中的优先级

setTimeOut()在Angular生命周期挂钩中重复:ngDoCheck,ngAfterContentChecked,ngAfterViewChecked

如何在Angular 6中识别生命周期挂钩vs功能的用例?

Vue生命周期挂钩竞赛条件

关于React中的生命周期挂钩

了解React生命周期挂钩

消除Angular ngDoCheck生命周期挂钩

扩展Vue生命周期挂钩

Angular 生命周期:如何在 Angular 初始化后执行 javascript 函数?

如何在Sitecore中获取商品的生命周期

如何在devops生命周期的开发阶段使用docker?

如何在Gradle中获取生命周期库的版本?

如何在活动类别之外监视活动的生命周期

如何在与生命周期无关的类中处理 Observable?

如何在具体生命周期内实现FromStr?