【问题标题】:How to get Kubernetes Version as integer from API如何从 API 获取 Kubernetes 版本为整数
【发布时间】:2021-06-18 07:13:24
【问题描述】:

我正在尝试通过 API 获取当前的 Kubernetes 版本,因为根据版本的不同,有些东西不受支持(例如,在 1.16 之前,readyz 端点不可用,所以我想改为检查 healthz 端点)。

我找到了以下端点:/version

示例结果:

{
  "major": "1",
  "minor": "11+",
  "gitVersion": "v1.11.0+d4cacc0",
  "gitCommit": "d4cacc0",
  "gitTreeState": "clean",
  "buildDate": "2021-05-12T14:13:55Z",
  "goVersion": "go1.10.8",
  "compiler": "gc",
  "platform": "linux/amd64"
}

这是通过 API 获取版本的正确方法吗?我认为 Kubernetes 使用语义版本控制,为什么次要字符串中的“+”?这是可配置的吗? 在哪里可以找到此 API/字段的规范?

理想情况下,这应该适用于独立和托管的 Kubernetes 风格(Openshift、GKE...)。

【问题讨论】:

  • GitVersion/gitVersion 是语义版本字段

标签: kubernetes openshift google-kubernetes-engine semantic-versioning openshift-3


【解决方案1】:

GitVersion/gitVersion 是语义版本控制字段。

这是kube-api-server 组件的版本。

解析由regexk8s.io/apimachinery包中完成:

^\s*v?([0-9]+(?:\.[0-9]+)*)(.*)*$`

/version 端点是记录在案的 API 规范 (operationId: "getCode") 的一部分,因此应该相当稳定。这是kubectl version 使用的,所以我怀疑它会轻易改变。

【讨论】:

  • 为了我更好的理解,你能举个例子,我们如何使用上面的正则表达式和端点版本作为 url?
  • 正则表达式是来自 kubectl 的 Go。该请求是通过 ServerVersion 函数中的 kuberenetes discovery client 发出的。解析和测试是here
  • OpenAPI 操作是getCode,这是大多数生成的 API 客户端会向您公开的@confusedgenius
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 2021-10-20
  • 2016-11-09
相关资源
最近更新 更多