gpt4 book ai didi

kubernetes - 有没有办法等待 k8s 部署中的所有 pod 停止?

转载 作者:行者123 更新时间:2023-12-05 05:46:41 25 4
gpt4 key购买 nike

手动删除 pod 时 kubectl delete 等待 pod 被删除,可以在脚本中包含 kubectl wait --for... 条件来等待 pod 被删除。

我想执行相同的等待条件,但在缩减(副本:0)部署时。

从部署 json 中,可用/不可用的副本不计算“终止”的 pod,并且正如预期的那样 kubectl wait --for=delete deployment test-dep 不等待 pod 终止但用于部署删除。

所以我想在我的脚本上执行:

kubectl scale --replicas=0 deployment foo-bar
kubectl wait --for=deletion-of-pod-from-deploymenent=foo-bar

有办法吗?

备注:我希望代码尽可能通用,这样就不用硬写部署标签。

最佳答案

最简单的方法是使用标签并基于标签发出 kubectl wait

kubectl wait --for delete pod --selector=<label>=<value>

但是,既然你不想这样,你可以使用下面的脚本

#!/bin/bash

deployment_uid=$(kubectl get deployments ${1} -o=jsonpath='{.metadata.uid}')
rs_uids=$(kubectl get rs -o=json | jq -r '.items[] | select(.metadata.ownerReferences[].uid=='\"${deployment_uid}\"') | .metadata.uid')

PODS=""

for i in $rs_uids; do
PODS+=$(kubectl get pods -o=json | jq -r '.items[] | select(.metadata.ownerReferences[].uid=='\"$i\"') | "pod/" + .metadata.name')
done

[ -z "$PODS" ] && echo "Pods not found" || kubectl wait --for=delete --timeout=-1s ${PODS}

这使用 Deployment 名称(作为第一个参数)来获取 ownerRefereces UID,向下链接到 Pod 名称。

它比仅仅使用标签要复杂得多,而且容易出错。

关于kubernetes - 有没有办法等待 k8s 部署中的所有 pod 停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71124845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com