如何让 bash 脚本等到 kubernetes pod 重新启动?

Posted

技术标签:

【中文标题】如何让 bash 脚本等到 kubernetes pod 重新启动?【英文标题】:How do I make bash script wait until kubernetes pods restart? 【发布时间】:2022-01-15 04:16:33 【问题描述】:

我正在编写一个脚本,我想在其中使用 scale-down scale-up 方法重新启动 kubernetes pod

kubectl scale --replicas=0 myPod -n myNamespace
kubectl scale --replicas=3 myPod -n myNamespace

我希望脚本等到豆荚为Running - 所以我想像

while kubectl get pods --field-selector=status.phase=Running -n myNameSpace | grep -c myPod = 3;
    do
        sleep 1
        echo "."
    done

可以工作 - 但没有骰子。 = 3 部分不起作用。 我不能只使用

while kubectl get pods --field-selector=status.phase!=Running -n myNameSpace | grep -c myPod > /dev/null

因为 Pod 是按顺序启动的,而我可能会在一个 Pod 部署时查询不幸,而其他 Pod 甚至都没有启动。

我怎样才能确保脚本只有在所有 3 个 pod 都是 Running 之后才能继续?

【问题讨论】:

@mdaniel 听起来不错,但我无法使用动态 pod 名称。我使用的 Pod 将根据构建版本命名为类似于 myPod-83dc4a56f7-wrght。有没有办法为每个myPod 运行命令,而不管具体名称如何? 【参考方案1】:

在 [ ] 中写入你的条件,并使用 ` 或 $ 获取命令的值。例如在你的情况下:

while [ "$(kubectl get pods --field-selector=status.phase=Running -n myNameSpace | grep -c myPod)" != 3 ]

  do
    sleep 1
    echo "wait"
  done

echo "All three pods is running and continue your script"

【讨论】:

以上是关于如何让 bash 脚本等到 kubernetes pod 重新启动?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 bash 脚本并行运行多个程序?

如何从 bash 脚本并行运行多个程序?

如何让游戏等到调用函数?

捕获信号时如何正确等待bash子进程完成

如何让容器在 Kubernetes 上运行?

让脚本等到 iframe 加载完毕后再运行