因此,我遵循 OpenShift 客户端 Python 文档,我可以使用我创建的脚本来成功列出 pod、作业、部署等资源。
我试图了解如何从这些资源中提取一些更详细的信息,例如年龄、完成情况或“准备”状态。我在文档中找不到有关如何执行此操作的任何说明,但我可能遗漏了一些内容。
我已经尝试过:
namespace = ['testNamespace']
for ns in namespace:
with oc.project(ns):
print('Jobs in {}: \n{}'.format(oc.get_project_name(), '\n'.join(oc.selector('jobs').names())))
print('Ages of jobs in {}: \n{}'.format(oc.get_project_name(), '\n'.join(oc.selector('jobs').ages())))
但是它说 Selector 没有 'ages' 属性。如果有人有与客户打交道的经验,任何建议将不胜感激。
quickstart 向您展示如何访问有关对象的信息(请参阅如何访问 pod 的
metadata.ownerReferences
属性)。
使用该示例,我们可以这样查看工作的
creationTimestamp
:
import sys
import openshift_client as oc
for ns in sys.argv[1:]:
with oc.project(ns):
jobs = oc.selector("jobs")
print("Jobs in {}: \n{}".format(ns, "\n".join(oc.selector("jobs").names())))
for job in jobs.objects():
print(f"Job {job.name()} create at {job.model.metadata.creationTimestamp}")
鉴于
kubectl
向我展示:
$ kubectl -n example-namespace get job
NAME COMPLETIONS DURATION AGE
daily-openshift-metrics-collector-28534320 1/1 15s 2d4h
daily-openshift-metrics-collector-28535760 1/1 10s 28h
daily-openshift-metrics-collector-28537200 1/1 16s 4h31m
produce-report-28488300 1/1 43s 34d
produce-report-28532940 1/1 64s 3d3h
运行上面的代码将产生类似以下内容:
Jobs in example-namespace:
daily-openshift-metrics-collector-28534320
daily-openshift-metrics-collector-28535760
daily-openshift-metrics-collector-28537200
produce-report-28488300
produce-report-28532940
Job daily-openshift-metrics-collector-28534320 create at 2024-04-02T12:00:00Z
Job daily-openshift-metrics-collector-28535760 create at 2024-04-03T12:00:00Z
Job daily-openshift-metrics-collector-28537200 create at 2024-04-04T12:00:00Z
Job produce-report-28488300 create at 2024-03-01T13:00:00Z
Job produce-report-28532940 create at 2024-04-01T13:00:00Z
看起来您正在尝试获取“age”属性,但是如果您查看 job api 规范,则没有这样的属性。年龄是你需要计算的。也许是这样的:
#!/usr/bin/python
import sys
import openshift_client as oc
import datetime
for ns in sys.argv[1:]:
with oc.project(ns):
jobs = oc.selector("jobs")
print("Jobs in {}: \n{}".format(ns, "\n".join(oc.selector("jobs").names())))
now = datetime.datetime.now(datetime.UTC)
for job in jobs.objects():
created = datetime.datetime.fromisoformat(
job.model.metadata.creationTimestamp,
)
age = now - created
print(f"Job {job.name()} age is {age}")
运行产生:
Jobs in example-namespace:
daily-openshift-metrics-collector-28534320
daily-openshift-metrics-collector-28535760
daily-openshift-metrics-collector-28537200
produce-report-28488300
produce-report-28532940
Job daily-openshift-metrics-collector-28534320 age is 2 days, 4:33:53.857197
Job daily-openshift-metrics-collector-28535760 age is 1 day, 4:33:53.857197
Job daily-openshift-metrics-collector-28537200 age is 4:33:53.857197
Job produce-report-28488300 age is 34 days, 3:33:53.857197
Job produce-report-28532940 age is 3 days, 3:33:53.857197
这与
kubectl
告诉我们的相符。