【问题标题】:Kubernetes deployment multiple replicas - how to pass replica number to podKubernetes部署多个副本-如何将副本号传递给pod
【发布时间】:2017-06-22 13:04:57
【问题描述】:

具有 2 个以上副本以实现高可用性的新 Kubernetes 部署。

我希望能够仅在第一个 pod 上执行命令,比如说创建一个数据库,然后让其他副本等待第一个完成。
为了实现这一点,我只想在 pod 中知道这是否是副本 #1。

所以我可以在 pod 的入口点进行测试:

if [ $REPLICA_ID -eq 1 ]; then 
    CreateDB
else
    WaitForDB
fi

这可以在 Kubernetes 中完成吗?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    在 Kubernetes 中,Deployment 被认为是无状态的,因此不提供您正在寻找的功能。您应该研究StatefulSet 及其功能。

    StatefulSete.g.支持ordered creation,当与您的pod 普遍可用的readinessProbe 结合使用时,您可以创建所需的行为。此外,pod 名称在 StatefulSet 内是稳定的,因此您可以使用 Podhostname 完成测试。

    【讨论】:

      【解决方案2】:

      init container 不是更符合您的问题描述,而不是接受的答案?

      添加某种信号量系统(如果需要)以确保其正确执行?

      【讨论】:

      • 你说得对,对于给定的初始化数据库示例,初始化容器也可以是一个选项,但没有回答关于 pod 编号/顺序的问题。
      • 好主意! (+1)。我仍然可以使用 StatefulSet,但是 init 容器必须提供一些我寻求的额外功能。谢谢!
      • Mirantis 的 k8s-AppController 带来了新的东西 - 幻灯片,最后的视频链接:slideshare.net/PiotrSiwczak/…
      猜你喜欢
      • 2018-07-05
      • 2021-09-22
      • 2021-06-26
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多