如何通过python客户端观看/验证pod收回请求是否完成?

时间:2019-07-05 21:11:02

标签: python kubernetes kubernetes-python-client

使用python客户端,我编写了一个函数来逐出节点上的所有pod。我如何监视/监视所有吊舱已被完全逐出?

我正在使用create_namespaced_pod_eviction方法将单个节点上的所有Pod逐出。在此过程中,它无需等待过程完成就可以继续。在脚本中继续操作之前,我需要100%完成驱逐过程。我如何监视此过程的状态?类似于kubectl,我希望我的函数在返回之前等待每个吊舱逐出。

# 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

1 个答案:

答案 0 :(得分:1)

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