python - 如何使用 python 客户端观察/验证 pod 驱逐调用是否完成?

标签 python kubernetes kubernetes-python-client

使用 python 客户端,我编写了一个函数来逐出节点上的所有 Pod。我如何监控/观察所有 Pod 是否被完全驱逐?

我正在使用 create_namespaced_pod_eviction 方法逐出单个节点上的所有 Pod。虽然这有效,但它不会等待该过程完成才继续。在继续我的脚本之前,我需要 100% 完成驱逐过程。我如何监控此进程的状态?与 kubectl 类似,我希望我的函数在返回之前等待每个 pod 被驱逐。

# passes list of pods to evict function
def drain_node(self):
    print("Draining node", self._node_name)
    self.cordon_node()
    pods = self._get_pods()
    response = []
    for pod in pods:
      response.append(self._evict_pod(pod))
    return response

# calls the eviction api on each pod
def _evict_pod(self, pod, delete_options=None):
    name = pod.metadata.name
    namespace = pod.metadata.namespace
    body = client.V1beta1Eviction(metadata=client.V1ObjectMeta(name=name, namespace=namespace))
    response = self._api.create_namespaced_pod_eviction(name, namespace, body)
    return response

# gets list of pods to evict
def _get_pods(self):
    all_pods = self._api.list_pod_for_all_namespaces(watch=True, field_selector='spec.nodeName=' + self._node_name)
    user_pods = [p for p in all_pods.items
                  if (p.metadata.namespace != 'kube-system')]
    return user_pods

最佳答案

如本link中所示,create_namespaced_pod_eviction 调用返回 V1Beta1Eviction目的。它有ObjectMeta对象,包含 deletion_timestamp 字段。也许您可以使用它来确定 pod 是否已被删除。或者轮询 pod 状态可能会给出相同的 ObjectMeta。

关于python - 如何使用 python 客户端观察/验证 pod 驱逐调用是否完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56909269/

相关文章:

python - django-environ DATABASE_URL 格式

python - 在装饰器包装器函数中访问装饰器参数

Python,计算计算状态会减慢计算本身

kubernetes - 我在哪里可以获得Kubernetes安装中的API_KEY

python - mrjob:无效的引导操作路径,必须是 Amazon S3 中的一个位置

kubernetes - 如何监控gcloud k8s HTTP失败率?

rest - 在S3文件上传事件后触发Java REST端点

python - 为 GKE 身份验证生成的 token 缺少权限

python - 使用 Python 客户端在 Kubernetes 中批准 CSR

spring-boot - 如何使用 Kubernetes Ingress 执行自定义身份验证