【问题标题】:Mutually exclude 2 pods互斥2个豆荚
【发布时间】:2018-08-02 12:07:48
【问题描述】:

我有两个 pod pod-apod-b,它们属于 Openshift 项目中的不同应用程序。

两个 pod 都公开了一个健康检查 http url,我可以使用它来检查给定的 pod 是否已启动并运行。

我不希望两个 pod 在任何给定时间都在一起。

如果 pod-a 已启动,则 pod-b 不应启动,反之亦然。

如何在 Openshift 中实现这一点?

【问题讨论】:

  • 这些是否来自同一个部署?你的用例是什么?
  • 他们使用两个独立的部署配置。应用程序 A 在 pod-a 中运行,应用程序 B 在 pod-b 中运行。应用程序 A 管理一些数据库数据。应用程序 B 执行一些数据库数据的备份和清除。应用程序 A 大部分时间都在运行,但有时会运行应用程序 B 以清除所有内容。如果两个应用程序同时工作,数据就会丢失。我们总是关闭应用程序 A,然后运行应用程序 B。作为安全预防措施,我们要添加一个检查,停止应用程序 B 的启动是不是应用程序 A 已经在运行。
  • 如果您可以修改 B 的源代码,我可能会在那里编写代码将 A 的副本计数设置为 0 并等待 kube api。如果您必须进行这样的检查;将节点关联设置为同一个节点并声明每个节点具有相同的主机端口 - 然后 kube 将无法调度它

标签: kubernetes openshift kubernetes-health-check


【解决方案1】:

我认为您可以为每个服务添加 InitContainers,并检查其他服务是否不可用。 InitContainers 更常用于检查其他服务是否可用,但如果您知道服务名称(您可能知道),您可以使用它来检查服务是否不可用。

【讨论】:

    【解决方案2】:

    不幸的是,这在 Kubernetes (Openshift) 中是不可能的。 Kubernetes 功能 nodeAffinitynodeSelector 用于在节点之间划分 pod,因此在您使用一个节点的情况下,它们将无法工作。根据您的情况和您的需要,k8s 原生工具没有技术上的可能性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2021-03-04
      • 1970-01-01
      • 2022-08-04
      • 1970-01-01
      相关资源
      最近更新 更多