将时间戳附加到kubernetes--watch-only命令



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

这样做的目的是了解状态何时更改,并将附加信息作为字符串添加。

我怎样才能做到这一点?

为原发帖人在评论中发布的问题提供更多的潜在解决方案

到目前为止,这就是我发现的kubectl get pods的工作原理——只观察|同时读取行;do echo-e"$(日期+"%Y-%m-%d%H:%m:%S。%3N"(\t pod \t\t$line";完成

使用的命令:

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

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


从不同的角度来看,您可以使用官方的Kubernetes API库来监控pods和作业的状态,并根据它们采取相应的行动(例如:当作业成功时做一些事情(。


我使用Kubernetes Python API库创建了一个示例应用程序,以查看pods和作业的状态。

假设:

  • 您有一个配置了kubectl的Kubernetes集群
  • 您已经安装了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!
---

--timestamps

kubectl logs -f --timestamps ...

最新更新