Kubernetes CRD:在additionalPrinterColumns中显示持续时间

问题描述 投票:0回答:1

在 Kubernetes

CustomResourceDefinitions
(CRD)中,我们可以指定
additionalPrinterColumns
,(例如)用于带有 CRD 的
kubectl get
。通常使用
jsonPath
从 CRD 的状态中提取列的值。从Kubernetes文档中,我们还可以看到时间戳以用户友好的方式呈现(例如,5m2h,表示从该时间戳到现在的持续时间):

additionalPrinterColumns:
  - name: Duration
    type: date
    jsonPath: .status.completitionTimestamp

Kubernetes Job 资源是资源的一个示例,它不仅显示它存在的时间,还显示 它运行的时间:

NAME               COMPLETIONS   DURATION   AGE
hello-4111706356   0/1                      0s
hello-4111706356   0/1           0s         0s
hello-4111706356   1/1           5s         5s

我正在寻找为我的 CRD 构建类似的东西,即:以相同的方式显示两个时间戳之间的持续时间。更具体地说,我想获取由 Kubernetes 评估和格式化的两个状态字段(例如

.status.startTimestamp
.status.completitionTimestamp
)之间的持续时间。

由于在 Job 资源中完成了完全相同的操作,我想知道这是否可能以某种方式实现,或者这是否是

kubectl
中内置的特殊行为?

kubernetes kubectl kubernetes-custom-resources
1个回答
1
投票

我将部分回答您的问题,以便您对什么/如何/在哪里有一些理解和想法。


kubectl 获取

当执行

kubectl get jobs
时,
kubernetes API server
决定在响应中提供哪些字段:

kubectl
工具依赖于服务器端输出格式。你的 集群的 API 服务器决定由
kubectl get
命令显示哪些列

请参阅此处

Duration
jobs
字段也在服务器端计算。发生这种情况是因为
job
是 kubernetes 服务器的众所周知的资源,并且它内置于代码“如何打印响应”中。请参阅JobDuration - 打印机

这也可以通过运行常规命令来检查:

kubectl get job job-name --v=8

然后使用

server-print
标志设置为
false
(出于人类可读的原因,默认值为
true
):

kubectl get job job-name --v=8 --server-print=false

使用最后一个命令将仅返回一般信息,并且

name
age
将显示在输出中。


可以做什么

让我们从 CRD 和控制器开始

自定义资源本身可以让您存储和检索结构化的 数据。当您将自定义资源与自定义控制器组合时, 自定义资源提供真正的声明式 API。

Kubernetes 声明式 API 强制执行分离 责任。您声明资源的所需状态。这 Kubernetes 控制器将 Kubernetes 对象的当前状态保存在 与您声明的所需状态同步。这与 命令式 API,您可以在其中指示服务器做什么。

前进到

feature gates
。我们对
CustomResourceSubresources
感兴趣:

在创建的资源上启用

/status
/scale
子资源
CustomResourceDefinition

这个

feature gate
从kubernetes开始默认启用
1.16

因此,可以在 CRD

duration-execution
的状态中创建像
subresource
这样的自定义字段,并且每当使用
watch update funtion
更改值时,自定义控制器都可以更新给定字段的值。

第 2 部分

有一个

controller pruning
需要考虑:

默认情况下,自定义资源的所有未指定字段 版本,被修剪。但可以选择退出 通过添加字段的特定子树

x-kubernetes-preserve-unknown-fields: true
中的 结构 OpenAPI v3 验证架构

这是关于自定义字段的非常相似的 answer

additionalPrinterColumns

© www.soinside.com 2019 - 2024. All rights reserved.