【问题标题】:kubernetes python client: block and wait for child pods to dissappear when deleting deploymentkubernetes python客户端:删除部署时阻止并等待子pod消失
【发布时间】:2022-11-10 19:46:30
【问题描述】:

我正在寻找使用 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

但是,我发现这有两个问题。

  1. 如果 pod 已经消失(或者如果其他进程在执行到达 watch 流之前删除了所有 pod),那么 watch 将找不到任何事件并且 for 循环将卡住,直到超时到期。如果没有事件,Watch 似乎不会产生活动。
  2. 在 pod 活动的事件流中看到事件后,如何知道所有 pod 都被删除了?数起来似乎很脆弱。

    我基本上希望用 python 脚本替换 kubectl delete --wait 功能。

    感谢您对此的任何见解。

【问题讨论】:

  • 你有没有找到办法做到这一点? +1 你所说的问题。

标签: python kubernetes client kubernetes-python-client


【解决方案1】:

也许您可以尝试这种方式并根据您的要求处理异常

    def delete_deployment():
        """ Delete deployment """
        while True:
            try:
                deployment = api_client.delete_namespaced_deployment(
                    name="deployment_name",
                    namespace="deployment_namespace",
                  body=client.V1DeleteOptions(propagation_policy="Foreground", grace_period_seconds=5),
                    )
            except ApiException:
                break
        print("Deployment 'deployment_name' has been deleted.")

【讨论】:

    【解决方案2】:
    import json
    
    def delete_pod(pod_name):
        return v1.delete_namespaced_pod(name=pod_name, namespace="default")
    
    
    def delete_pod_if_exists(pod_name):
        def run():
            delete_pod(pod_name)
    
        while True:
            try:
                run()
            except ApiException as e:
                has_deleted = json.loads(e.body)['code'] == 404
                if has_deleted:
                    return
    
    

    【讨论】:

      猜你喜欢
      • 2019-06-15
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 2023-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多