Добавить метку времени к команде kubernetes --watch-only - PullRequest
0 голосов
/ 04 августа 2020

Я выполняю задание Kubernetes, где хочу отслеживать состояние. Я запускаю несколько команд --watch-only одновременно, например, kubectl get pods --watch-only, который показывает мне обновленное состояние модулей. Но я хочу, чтобы к выходу были добавлены отметка времени и некоторая строка .

Идея состоит в том, чтобы знать, когда состояние изменилось, а также добавить дополнительную информацию в виде строки .

Как я могу этого добиться?

1 Ответ

0 голосов
/ 07 сентября 2020

Повышение наглядности потенциального решения вопроса, размещенного в комментариях оригинального автора:

Это то, что я обнаружил работающим до сих пор 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 и необходимая библиотека:
    • $ pip install kubernetes

Используя пример для 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!
---
...