Shell 脚本应该等到 kubernetes pod 运行

Shell script should wait until kubernetes pod is running

在一个简单的 bash 脚本中,我想 运行 多个 kubectlhelm 命令,例如:

helm install \
  cert-manager jetstack/cert-manager \
  --namespace cert-manager \
  --create-namespace \
  --version v1.5.4 \
  --set installCRDs=true
kubectl apply -f deploy/cert-manager/cluster-issuers.yaml

我的问题是,在 helm install 命令之后,我必须等到 cert-manager pod 运行ning,然后才能使用 kubectl apply 命令。现在脚本调用它太早了,所以它会失败。

正如评论中所述 kubectl wait 是要走的路。
来自 kubectl wait --help

的示例
Examples:
  # Wait for the pod "busybox1" to contain the status condition of type "Ready"
  kubectl wait --for=condition=Ready pod/busybox1

这样您的脚本将暂停,直到指定的 pod 为 运行,并且 kubectl 将输出

<pod-name> condition met

到标准输出。


kubectl wait 仍处于试验阶段。如果您想避免实验性功能,可以使用 bash while 循环获得类似的结果。 按 pod 名称:

while [[ $(kubectl get pods <pod-name> -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}') != "True" ]]; do
   sleep 1
done

或按标签:

while [[ $(kubectl get pods -l <label>=<label-value> -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}') != "True" ]]; do
   sleep 1
done