CustomResourceDefinition
GVK

结构

创建 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, 范围指示定义的自定义资源是群集还是命名空间范围。允许的值是
Cluster和Namespaced - versions, arrayCustomResourceDefinitionVersion, 版本是定义自定义资源的所有API版本的列表。版本名称用于计算API发现中列出的服务版本的顺序。
CustomResourceDefinitionStatus 具体字段
- acceptedNames,CustomResourceDefinitionNames, 接受名称是实际用于服务发现的名称。它们可能与规范中的名称不同。
- conditions, arrayCustomResourceDefinitionCondition, 该字段表示习惯的特定方面的状态
- storedVersions,string array, StorageVersions列出了持久的所有版本的CustomSures。跟踪这些版本允许ETCD中存储版本的迁移路径。该字段是可变的,因此迁移控制器可以完成迁移到另一个版本(确保在存储中留下旧对象),然后从此列表中删除其余版本。在此列表中存在时,可能不会从
spec.versions中删除版本。
参考资料
- 官方文档
- 使用 CustomResourceDefinition 扩展 Kubernetes API, 版本是定义自定义资源的所有API版本的列表。版本名称用于计算API 发现中列出的服务版本的顺序。