Как посмотреть / убедиться, что вызов о выселении модуля завершен с помощью клиента Python?

Используя клиент python, я написал функцию для удаления всех модулей на узле. Как я могу следить за тем, чтобы все капсулы были полностью выселены?

Я использую метод create_namespaced_pod_eviction для удаления всех модулей на одном узле. Хотя это работает, он не ждет завершения процесса, прежде чем продолжить. Мне нужно, чтобы процесс выселения был на 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

person N. Alston    schedule 05.07.2019    source источник


Ответы (1)


Как указано в этой ссылке, вызов create_namespaced_pod_eviction возвращает объект V1Beta1Eviction. Он имеет объект ObjectMeta, который содержит deletion_timestamp поле. Возможно, вы сможете использовать это, чтобы определить, удален ли уже модуль. Или, возможно, опрос статуса модуля может дать тот же ObjectMeta.

person Malathi    schedule 05.07.2019