4. kubectl get 与版本显示:如何查看当前集群中存储对象的存储版本、使用 kubectl get crd 查看 CRD 版本

在 Kubernetes 集群运维中,确认存储对象的存储版本(storage version)是校准版本漂移的第一步。存储版本决定了对象在 etcd 中持久化的序列化格式,而 CRD(Custom Resource Definition)的版本则决定了自定义资源的 API 可用性。本节将系统讲解如何通过 kubectl get 命令族获取这两类关键版本信息。

4.1 查看内置资源的存储版本

对于 Deployment、ConfigMap、Secret 等内置资源,Kubernetes 在 API 发现信息中标注了每个资源的首选版本(preferred version)和存储版本。使用以下命令可以快速查看集群中所有 API 资源的版本信息:

# 查看所有 API 资源及其版本(含存储版本标记)
kubectl api-resources --verbs=list -o wide | grep -E 'STORAGEVERSION|true'

# 查看特定资源(如 Deployment)的存储版本
kubectl api-resources --api-group=apps -o wide | grep deployment

输出示例:

NAME SHORTNAMES APIVERSION NAMESPACED KIND STORAGEVERSION
deployments deploy apps/v1 true Deployment apps/v1
statefulsets sts apps/v1 true StatefulSet apps/v1
关键判断: STORAGEVERSION 列显示的是该资源在 etcd 中实际存储的版本。如果该版本与集群中启用的 API 版本不一致,即存在版本漂移风险。

4.2 查看 CRD 的版本定义

CRD 的版本信息存储在 CRD 对象本身的 spec.versions 字段中。每个版本可以标记为 served: true/false(是否在 API 中提供)和 storage: true/false(是否为存储版本)。

# 列出所有 CRD 及其版本概况
kubectl get crd -o wide

# 查看特定 CRD 的详细版本定义
kubectl get crd <crd-name> -o yaml | grep -A 10 'versions:'

CRD 版本定义示例(YAML 片段):

spec:
  versions:
  - name: v1alpha1
    served: true
    storage: false
    schema:
      openAPIV3Schema:
        type: object
  - name: v1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
版本漂移检查点: 确保只有一个版本标记为 storage: true。如果出现多个 storage 版本或 storage 版本已被弃用(served: false),则必须通过版本迁移校准。

4.3 查看 CRD 自定义资源的实际存储版本

对于 CRD 创建的自定义资源实例,其存储版本可以通过资源对象的 apiVersion 字段确认。但更可靠的方式是直接查看 etcd 中的原始数据:

# 查看自定义资源实例的 apiVersion(反映其存储版本)
kubectl get <custom-resource> <instance-name> -o json | jq '.apiVersion'

# 批量检查所有实例的存储版本分布
kubectl get <custom-resource> -A -o json | jq '.items[].apiVersion' | sort | uniq -c | sort -rn

输出示例:

   47 "example.com/v1"
    3 "example.com/v1alpha1"
版本漂移信号: 如果发现仍有实例使用旧版本(如 v1alpha1),而 CRD 的存储版本已升级到 v1,则这些实例在下次更新时会自动转换,但在读取时可能触发兼容性问题。建议在发布窗口内完成迁移。

4.4 存储版本查看流程总览

以下 SVG 图展示了从集群层面到资源实例层面的版本查看路径:

K8s 存储版本查看流程 存储版本查看流程 kubectl 命令入口 内置资源:api-resources CRD:kubectl get crd 查看 STORAGEVERSION 列 确认 etcd 持久化版本 查看 spec.versions 确认 storage: true 版本 实例 apiVersion 分布检查 校准原则:存储版本必须唯一且为最新稳定版本,所有实例应统一使用该版本

4.5 版本查看命令速查表

目标 命令 输出关键字段
内置资源存储版本 kubectl api-resources -o wide STORAGEVERSION
CRD 版本定义 kubectl get crd <name> -o yaml spec.versions[].storage
CRD 资源实例版本 kubectl get <cr> -A -o json .apiVersion
集群 API 版本总览 kubectl api-versions 版本列表
最佳实践: 在每次发布窗口节点排空前,执行上述命令生成版本基线快照。将快照与预期版本清单比对,即可快速定位存储版本漂移的资源和实例。