You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes CRD的versions配置下storage字段的含义是什么?

CRD中storage字段的核心作用

storage字段的唯一作用是指定CRD的多个版本中,哪一个版本的格式会被作为持久化格式存入etcd数据库。

Kubernetes允许一个CRD同时对外提供多个版本的API服务(通过served: true开启对应版本的接口访问权限),但同一份自定义资源实例在etcd中只能存储一份,因此必须明确指定唯一的存储版本,避免多版本存储冲突。


实际运行逻辑示例

假设你定义的CRD同时存在两个版本配置:

versions:
- name: v1beta1
  served: true
  storage: false
- name: v1
  served: true
  storage: true

实际运行时的逻辑是:

  • 不管用户通过v1beta1接口还是v1接口提交自定义资源创建/更新请求,Kubernetes都会先将资源转换成v1版本的格式,再存入etcd
  • 不管用户请求v1beta1接口还是v1接口查询资源,Kubernetes都会先从etcd取出v1格式的存储数据,再转换成用户请求的版本格式返回
  • 两个版本的接口都可以正常对外提供服务,仅底层存储格式固定为标记storage: true的版本

强制使用规则

  • 一个CRD的所有版本中,有且仅有一个版本可以设置storage: true,不符合该规则的CRD会直接被apiserver拒绝创建
  • 存储版本变更需要配合数据迁移:如果你要将存储版本从旧版本切换到新版本,必须先将etcd中已存储的所有旧版本自定义资源全部转换为新版本格式,再修改storage标记,否则旧数据读取会出现格式兼容问题
  • 存储版本可以同时设置served: true(正常对外提供接口),也可以在升级过渡阶段将旧存储版本设置为served: false(仅用于兼容旧存量数据,不对外提供接口访问)

内容的提问来源于stack exchange,提问作者beatrice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 06:18:02