Повышение наглядности потенциального решения вопроса, размещенного в комментариях оригинального автора:
Это то, что я обнаружил работающим до сих пор kubectl get pods --watch-only | при чтении строки; do echo -e "$ (date +"% Y-% m-% d% H:% M:% S.% 3N ") \ t pods \ t $ line"; done
Используемая команда:
$ kubectl get pods --watch-only | while read line ; do echo -e "$(date +"%Y-%m-%d %H:%M:%S.%3N")\t pods\t $line" ; done
Решение правильное, но изменения в состоянии (PENDING
, RUNNING
, SUCCEEDED/COMPLETED
) необходимо дополнительно извлечь (при условии дальнейших действий) из приведенной выше команды.
Глядя на это с другой точки зрения, вы можете использовать официальную библиотеку API Kubernetes , чтобы отслеживать статусы модулей и заданий и действовать в соответствии с ними (например: делать что-то, когда задание выполнено).
Я создал приложение example с библиотекой Kubernetes Python API для просмотра статусов модулей и заданий.
Предполагается, что:
- У вас есть рабочий кластер Kubernetes с
kubectl
настроенным - У вас установлено Python и необходимая библиотека:
Используя пример для Job
:
Kubernetes.io: Docs: Concepts: Job
Пример для модулей
Ниже приведен пример кода в Python3, который будет следить за модулями и печатать сообщение, когда статус модуля установлен на Succeeded
:
from kubernetes import client, config, watch
from datetime import datetime
config.load_kube_config()
v1 = client.CoreV1Api()
w = watch.Watch()
for event in w.stream(v1.list_namespaced_pod, namespace="default", watch=False):
print("POD_NAME: " + event['object'].metadata.name) # print the name
print("TIME: " + str(datetime.now())) # print the time
print("PHASE: " + event['object'].status.phase) # print the status of the pod
print("CUSTOM AMAZING TEXT HERE!")
if (event['object'].status.phase == "Succeeded") and (event['type'] != "DELETED"): # do below when condition is met
print ("----> This pod succeeded, do something here!")
print("---")
Это приведет к вывод аналогичен приведенному ниже:
POD_NAME: pi-pjmm5
TIME: 2020-09-06 15:28:01.541244
PHASE: Pending
CUSTOM AMAZING TEXT HERE!
---
POD_NAME: pi-pjmm5
TIME: 2020-09-06 15:28:03.894063
PHASE: Running
CUSTOM AMAZING TEXT HERE!
---
POD_NAME: pi-pjmm5
TIME: 2020-09-06 15:28:09.044219
PHASE: Succeeded
CUSTOM AMAZING TEXT HERE!
----> This pod succeeded, do something here!
---
Пример для заданий
Ниже приведен пример кода в Python3, который будет отслеживать задания и печатать сообщение, когда состояние задания установлено на Succeeded
:
from kubernetes import client, config, watch
from datetime import datetime
config.load_kube_config()
v1 = client.BatchV1Api()
w = watch.Watch()
for event in w.stream(v1.list_namespaced_job, namespace="default", watch=False):
print("JOB_NAME: " + event['object'].metadata.name)
print("TIME: " + str(datetime.now()))
print("STATUS: " + event['type'])
print("CUSTOM AMAZING TEXT HERE!")
if (event['object'].status.succeeded == 1) and (event['type'] != "DELETED"):
print ("----> This job succeeded, do something here!")
print("---")
Это даст результат, аналогичный приведенному ниже:
JOB_NAME: pi
TIME: 2020-09-06 15:32:49.909096
STATUS: ADDED
CUSTOM AMAZING TEXT HERE!
---
JOB_NAME: pi
TIME: 2020-09-06 15:32:49.936856
STATUS: MODIFIED
CUSTOM AMAZING TEXT HERE!
---
JOB_NAME: pi
TIME: 2020-09-06 15:32:56.998511
STATUS: MODIFIED
CUSTOM AMAZING TEXT HERE!
----> This job succeeded, do something here!
---