当部署 B 更改时,在部署 A 中重新启动 pods

Restart pods in deployment A when deployment B changes

部署一个遗留应用程序我无法控制到 k8s,它需要命令行上的 IP 地址列表,这些 IP 是部署 B 中的 pods,例如:

./legacy_app -s 10.1.0.1 10.1.0.2 10.2.0.2 - 将此应用程序部署称为 A

(IP 地址是通过在 pod 启动期间查询 k8s API 的 .../pods 端点收集的)

当部署B发生变化时(横向扩展/缩减,pods重启等),IP列表发生变化,我需要部署A中的pods重启,以便重新-查询 API 以获得正确的 IP 列表。

我怎样才能干净地实现这一点,理想情况下使用标准的 k8s 原语?

到目前为止我尝试过的:

接下来我要尝试的是:

有没有更好的方法?进入 k8s 我希望有某种我可以订阅的钩子/手表,以及 运行 一个 "restart all pods in deployment" 类型的命令,但该功能似乎不存在。

我显然是 k8s 的新手,非常感谢任何输入。

AWS EKS 上的 k8s 1.14

我最终在部署 A 之前使用 bash 入口脚本解决了这个问题,p 许多伪代码:

#!/bin/bash

get_deployment_B_ips() {
    echo $(curl https://$K8S_API/api/v1/namespaces/my_namespace/pods/ | \
           jq -r '[.items[] | select(.metadata.labels.app=="deployment-B") | select(.status.phase=="Running")] | map(.status.podIP + ":9125") |  join(" ")')
}

while true; do
CURRENT_LIST=$(get_deployment_B_ips)

  if [[ "$IP_LIST" == "$CURRENT_LIST" ]]; then
    sleep 5
  else
   # restart the process with new IP LIST
  fi
done

这目前效果很好,但展望未来,我将阅读有关 k8s Operators 的实现细节,看看他们是否可以提供比这更清晰的修复。

将此标记为我的问题的答案,除非出现更好的解决方案。