kau*_*aur 7 kubernetes kubectl
我正在运行 Kubernetes 作业,我想监视状态。我--watch-only同时运行各种命令,例如
kubectl get pods --watch-only,它向我显示了 Pod 的更新状态。但是,我想在输出中附加时间戳和一些字符串。
这个想法是了解状态何时发生变化,并以字符串形式添加附加信息。
我怎样才能实现这个目标?
更清楚地了解原始发布者评论中发布的问题的潜在解决方案:
这是我到目前为止发现的工作 kubectl get pods --watch-only | 读取行时;执行 echo -e "$(date +"%Y-%m-%d %H:%M:%S.%3N")\t pods\t $line" ;完毕
使用的命令:
$ 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
从不同的角度来看,您可以使用官方的 Kubernetes API 库来监控 pod 和作业的状态,并根据它们采取相应的行动(例如:作业成功时执行某些操作)。
我使用 Kubernetes Python API 库创建了一个示例应用程序来观察 Pod 和作业的状态。
假如说:
kubectl配置$ pip install kubernetes使用以下示例Job:
下面是 Python3 中的示例代码,当 pod 状态设置为 时,它将监视 pod 并打印一条消息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("---")
Run Code Online (Sandbox Code Playgroud)
这将产生类似于以下输出的输出:
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!
---
Run Code Online (Sandbox Code Playgroud)
下面是 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("---")
Run Code Online (Sandbox Code Playgroud)
这将产生类似于以下输出的输出:
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!
---
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4835 次 |
| 最近记录: |