用于检查 openshift/kubernetes pod 是否准备就绪的 Bash 脚本

Ren*_*Ren 4 bash while-loop openshift kubernetes until-loop

我正在尝试创建一个 shell 脚本,通过检查显示 1/1 的 READY 标题来验证某些 Pod 是否已准备就绪。我尝试过两种方法。

1.

ready=$(oc get pods | awk '{print $2}' | tail -n +2) # prints 1/1 or 0/1 for each pod
until [[ ${ready} == "1/1" ]]
do
  echo "Waiting for pods to be ready."
  sleep 3
done
Run Code Online (Sandbox Code Playgroud)

即使 Pod 已准备好并在 READY 列中显示 1/1,上面的脚本仍会一直显示“等待 Pod 准备好”。

2.

while true ; do
  for i in 1 2 3; do
  ready=`oc get pods | awk '{print $2}' | tail -n +2 | head -n $i` 

  if [[ "${ready}" == "1/1" ]]; then
    echo "pods are up and running"
  else
    echo "waiting for pods to be ready"
  sleep 10
  break
  fi
  done
done
Run Code Online (Sandbox Code Playgroud)

上面的脚本只是不断地打印等待 pod 准备好并且 pod 启动并运行。

任何帮助将不胜感激,我从 Bash 开始,不太确定该怎么做。

rin*_*ahn 11

我很惊讶到目前为止没有人提到实验性的、官方的kubectl wait
$ kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | --all)]) [--for=delete|--for condition=available]

  • 这个答案应该是最重要的!`kubectl -n mynamespace wait pod --for=condition=Ready -l labelKey1=labelValue1,labelKey2=labelValue2` (5认同)

Imr*_*han 6

以下解决方案对我有用

while [ "$(kubectl get pods -l=app='activemq' -o jsonpath='{.items[*].status.containerStatuses[0].ready}')" != "true" ]; do
   sleep 5
   echo "Waiting for Broker to be ready."
done
Run Code Online (Sandbox Code Playgroud)