Shell 脚本应该等到 kubernetes pod 运行
Shell script should wait until kubernetes pod is running
在一个简单的 bash 脚本中,我想 运行 多个 kubectl
和 helm
命令,例如:
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
在一个简单的 bash 脚本中,我想 运行 多个 kubectl
和 helm
命令,例如:
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