我正在寻找使用 Kubernetes python 客户端来删除部署,然后阻止并等待所有关联的 pod 也被删除。我发现的很多示例都推荐使用如下的 watch 函数。
try:
# try to delete if exists
AppsV1Api(api_client).delete_namespaced_deployment(namespace="default", name="mypod")
except Exception:
# handle exception
# wait for all pods associated with deployment to be deleted.
for e in w.stream(
v1.list_namespaced_pod, namespace="default",
label_selector='mylabel=my-value",
timeout_seconds=300):
pod_name = e['object'].metadata.name
print("pod_name", pod_name)
if e['type'] == 'DELETED':
w.stop()
break
但是,我发现这有两个问题。
- 如果 pod 已经消失(或者如果其他进程在执行到达 watch 流之前删除了所有 pod),那么 watch 将找不到任何事件并且 for 循环将卡住,直到超时到期。如果没有事件,Watch 似乎不会产生活动。
- 在看到 pod 活动的事件流中的事件后,如何知道所有 pod 都被删除了?数起来似乎很脆弱。
我基本上希望kubectl delete --wait
用 python 脚本替换该功能。
感谢您对此的任何见解。