CustomResourceDefinition

CustomResourceDefinition

GVK

broadcasting

结构

broadcasting

创建 CustomResourceDefinition

当我们创建一个新的CustomResourceDefinition(CRD)时,k8s api服务会为我们指定的每一个版本生成一个
RESTful的资源路径。CRD中spec指定的scope字段,决定了CRD的作用域(namespace还是cluster)。
CustomResourceDefinition本身是不受作用域限制的,对所有集群和namespace都可见。

CRD示例

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  # 名字必需与下面的 spec 字段匹配,并且格式为 '<名称的复数形式>.<组名>'
  name: crontabs.stable.example.com
spec:
  # 组名称,用于 REST API: /apis/<组>/<版本>
  group: stable.example.com
  # 列举此 CustomResourceDefinition 所支持的版本
  versions:
    - name: v1
      # 每个版本都可以通过 served 标志来独立启用或禁止
      served: true
      # 其中一个且只有一个版本必需被标记为存储版本
      storage: true
      schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                image:
                  type: string
                replicas:
                  type: integer
  # 可以是 Namespaced 或 Cluster
  scope: Namespaced
  names:
    # 名称的复数形式,用于 URL:/apis/<组>/<版本>/<名称的复数形式>
    plural: crontabs
    # 名称的单数形式,作为命令行使用时和显示时的别名
    singular: crontab
    # kind 通常是单数形式的帕斯卡编码(PascalCased)形式。你的资源清单会使用这一形式。
    kind: CronTab
    # shortNames 允许你在命令行使用较短的字符串来匹配资源
    shortNames:
    - ct

受命名空间所约束的restful api端点会被创建在:

/apis/[group]]/v1/namespaces/*/[plural]/...
# 上面的例子就是:
/apis/stable.example.com/v1/namespaces/*/crontabs/...

对应的CR

apiVersion: "stable.example.com/v1"
kind: CronTab
metadata:
  name: my-new-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-awesome-cron-image

CustomResourceDefinitionSpec具体字段

  • conversion, CustomResourceConversion,该字段包含描述如何转换CR的不同版本。
  • group, string. api中的group字段。在第一层metadata中的name=spec中的:.
  • names, CustomResourceDefinitionNames,为自定义资源指定资源和种类名称
  • preserveUnknownFields, boolean,
  • scope, string, 范围指示定义的自定义资源是群集还是命名空间范围。允许的值是ClusterNamespaced
  • versions, arrayCustomResourceDefinitionVersion, 版本是定义自定义资源的所有API版本的列表。版本名称用于计算API发现中列出的服务版本的顺序。

CustomResourceDefinitionStatus 具体字段

  • acceptedNames,CustomResourceDefinitionNames, 接受名称是实际用于服务发现的名称。它们可能与规范中的名称不同。
  • conditions, arrayCustomResourceDefinitionCondition, 该字段表示习惯的特定方面的状态
  • storedVersions,string array, StorageVersions列出了持久的所有版本的CustomSures。跟踪这些版本允许ETCD中存储版本的迁移路径。该字段是可变的,因此迁移控制器可以完成迁移到另一个版本(确保在存储中留下旧对象),然后从此列表中删除其余版本。在此列表中存在时,可能不会从spec.versions中删除版本。

参考资料

  1. 官方文档
  2. 使用 CustomResourceDefinition 扩展 Kubernetes API, 版本是定义自定义资源的所有API版本的列表。版本名称用于计算API 发现中列出的服务版本的顺序。


blog comments powered by Disqus
—  原创作品许可 — 署名-非商业性使用-禁止演绎 3.0 未本地化版本 — CC BY-NC-ND 3.0   —