在 Kubernetes 的 CustomResourceDefinition(CRD)中,版本是一个重要的概念。每个 CRD 可以定义一个或多个版本,每个版本可以包含自己的自定义资源规格和其他属性。这种机制允许你在自定义资源的演进中进行适应性的变化。

以下是定义 CRD 版本的关键属性:

1. version: 指定 CRD 的 API 版本。在 CRD 的 YAML 文件中,你会看到 apiVersion 字段,该字段由 apiextensions.k8s.io/v1 或其他相应的 API 版本组成。
   apiVersion: apiextensions.k8s.io/v1
   kind: CustomResourceDefinition
   metadata:
     name: myresources.example.com
   spec:
     ...

2. versions: 定义 CRD 支持的版本。在 spec 部分,你可以列出一个或多个版本,每个版本有自己的自定义资源规格。
   spec:
     ...
     versions:
       - name: v1
         served: true
         storage: true
         schema:
           openAPIV3Schema:
             type: object
             properties:
               ...

   - name: 版本的名称,通常使用 v1、v2 等表示。
   - served: 表示这个版本的资源是否由 API 服务器提供服务,为 true 表示提供服务。
   - storage: 表示这个版本的资源是否存储在 etcd 中,为 true 表示存储。

3. schema: 定义了 CRD 的 OpenAPI v3 模式,描述了自定义资源规格的结构。
   schema:
     openAPIV3Schema:
       type: object
       properties:
         key1:
           type: string
         key2:
           type: integer
       ...

通过使用版本,你可以在不破坏现有自定义资源实例的情况下,逐步演进自定义资源的规格。在对版本进行更改时,你需要确保实现适当的转换和向后兼容性,以便现有的自定义资源实例可以顺利迁移到新的规格。

要注意的是,CRD 的版本机制在 Kubernetes 的发展中可能会有一些变化,因此建议查阅最新的 Kubernetes 官方文档以获取准确和最新的信息。


转载请注明出处:http://www.pingtaimeng.com/article/detail/9947/Kubernetes