将时间戳附加到Kubernetes--仅监视命令 [英] Append timestamp to kubernetes --watch-only command

查看:8
本文介绍了将时间戳附加到Kubernetes--仅监视命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在运行一个Kubernetes作业,我想在其中监视状态。我同时运行各种--watch-only命令,例如 kubectl get pods --watch-only,它向我显示了Pod的更新状态。但是,我希望将时间戳和一些字符串追加到输出中。

这样做的目的是知道状态更改的时间,并以字符串形式添加其他信息。

如何实现此目标?

推荐答案

让原始发帖的评论中发布的问题的潜在解决方案更具可见性:

到目前为止,我发现kubectl Get Pods--只看|一边读;一边回显;$(日期+%m-%d%H:%M:%S.%3N;)Pods$line";;完成

使用的命令:

  • $ kubectl get pods --watch-only | while read line ; do echo -e "$(date +"%Y-%m-%d %H:%M:%S.%3N") pods $line" ; done

解决方案是正确的,但需要从上面的命令进一步提取(假设采取进一步操作)状态更改(PENDINGRUNNINGSUCCEEDED/COMPLETED)。


从不同的角度来看,您可以使用official Kubernetes API library来监控Pod和作业的状态并采取相应的操作(例如:在作业成功时执行某项操作)。


我已经使用Kubernetes Python API库创建了一个示例应用程序来查看Pod和作业的状态。

假设:

  • 您有一个正在运行的Kubernetes集群,kubectl已配置
  • 您已经安装了Python和所需的库:
    • $ pip install kubernetes

使用Job的示例:

Kubernetes.io: Docs: Concepts: Job

Pod示例

下面是Python3中的示例代码,当Pod的状态设置为Succeeded时,它将监视Pod并打印一条消息:

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!
---

这篇关于将时间戳附加到Kubernetes--仅监视命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆