This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第 10 章 CRD
10.1. 使用自定义资源定义来扩展 Kubernetes API 复制链接链接已复制到粘贴板!
本指南描述了集群管理员如何通过创建和管理自定义资源定义 (CRD) 来扩展其 OpenShift Container Platform 集群。
10.1.1. 自定义资源定义 复制链接链接已复制到粘贴板!
在 Kubernetes API 中,资源是存储某一类 API 对象集的端点。例如:内置 Pod 资源包含 Pod 对象集。
自定义资源定义 (CRD) 对象在集群中定义了一个新的、唯一的对象 Kind
,并允许 Kubernetes API 服务器处理其整个生命周期。
自定义资源 (CR) 对象由集群管理员通过集群中已添加的 CRD 创建,并支持所有集群用户在项目中增加新的资源类型。
当集群管理员增加新 CRD 至集群中时,Kubernetes API 服务器的回应方式是新建一个可由整个集群或单个项目(命名空间)访问的 RESTful 资源路径,并开始服务于指定的 CR。
集群管理员如果要向其他用户授予 CRD 访问权限,可使用集群角色聚合来向用户授予 admin
、edit
或 view
默认集群角色访问权限。集群角色聚合支持将自定义策略规则插入到这些集群角色中。这一行为会将新资源整合至集群的 RBAC 策略中,就像内置资源一样。
Operator 会通过将 CRD 与任何所需 RBAC 策略和其他软件特定逻辑打包到一起来利用 CRD。集群管理员还可手动将 CRD 添加至 Operator 生命周期之外的集群中,供所有用户使用。
虽然只有集群管理员可创建 CRD,但具有 CRD 读写权限的开发人员也可通过现有 CRD 来创建 CR。
10.1.2. 创建自定义资源定义 复制链接链接已复制到粘贴板!
要创建自定义资源 (CR) 对象,集群管理员首先必须创建一个自定义资源定义 (CRD)。
先决条件
-
以
cluster-admin
用户身份访问 OpenShift Container Platform 集群。
流程
要创建 CRD:
先创建一个包含以下字段类型的 YAML 文件:
CRD 的 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 使用
apiextensions.k8s.io/v1beta1
API。 - 2
- 为定义指定名称。名称必须采用 <plural-name>.<group> 格式,并使用来自
group
和plural
字段的值。 - 3
- 为 API 指定组名。API 组是一个逻辑上相关的对象集。例如,
Job
或ScheduledJob
等所有批处理对象,均可添加至批处理 API 组 (如 batch.api.example.com) 中。最好使用组织的完全限定域名。 - 4
- 指定 URL 中要用的版本名称。每个 API 组均可能存在于多个版本中。例如:
v1alpha
、v1beta
、v1
。 - 5
- 指定自定义对象可用于某一个项目 (
Namespaced
) 还是集群中的所有项目 (Cluster
)。 - 6
- 指定 URL 中要用的复数名称。
plural
字段与 API URL 网址中的资源相同。 - 7
- 指定将在 CLI 上用作别名并用于显示的单数名称。
- 8
- 指定可创建的对象类型。类型可以采用 CamelCase。
- 9
- 指定与 CLI 中的资源相匹配的较短字符串。
注意默认情况下,CRD 的覆盖范围为整个集群,适用于所有项目。
创建 CRD 对象:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下位置新建一个 RESTful API 端点:
/apis/<spec:group>/<spec:version>/<scope>/*/<names-plural>/...
/apis/<spec:group>/<spec:version>/<scope>/*/<names-plural>/...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,以下端点便是通过示例文件创建的:
/apis/stable.example.com/v1/namespaces/*/crontabs/...
/apis/stable.example.com/v1/namespaces/*/crontabs/...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,您即可使用该端点 URL 来创建和管理 CR。对象
Kind
基于您所创建的 CRD 对象的spec.kind
字段。
10.1.3. 为自定义资源定义创建集群角色 复制链接链接已复制到粘贴板!
集群管理员可向现有集群范围的自定义资源定义 (CRD) 授予权限。如果使用 admin
、edit
和 view
默认集群角色,请利用集群角色聚合来制定规则。
您必须为每个角色明确分配权限。权限更多的角色不会继承权限较少角色的规则。如果要为某个角色分配规则,还必须将该操作动词分配给具有更多权限的角色。例如,如果要向 view 角色授予 get crontabs
的权限,也必须向 edit
和 admin
角色授予该权限。admin
或 edit
角色通常会分配给通过项目模板创建项目的用户。
先决条件
- 创建 CRD。
流程
为 CRD 创建集群角色定义文件。集群角色定义是一个 YAML 文件,其中包含适用于各个集群角色的规则。OpenShift Container Platform 控制器会将您指定的规则添加至默认集群角色中。
集群角色定义的 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建集群角色:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1.4. 通过文件创建自定义资源 复制链接链接已复制到粘贴板!
将自定义资源定义 (CRD) 添加至集群后,可使用 CLI 按照自定义资源 (CR) 规范通过文件创建 CR。
先决条件
- 集群管理员已将 CRD 添加至集群中。
流程
为 CR 创建 YAML 文件。在下面的定义示例中,
cronSpec
和image
自定义字段在Kind: CronTab
的 CR 中设定。Kind
来自 CRD 对象的spec.kind
字段。CR 的 YAML 文件示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建完文件后,再创建对象:
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1.5. 检查自定义资源 复制链接链接已复制到粘贴板!
您可使用 CLI 检查集群中存在的自定义资源 (CR) 对象。
先决条件
- 您有权访问的命名空间中已存在 CR 对象。
流程
要获得特定
Kind
的 CR 的信息,请运行:oc get <kind>
$ oc get <kind>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc get crontab
$ oc get crontab NAME KIND my-new-cron-object CronTab.v1.stable.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 资源名称不区分大小写,您既可使用 CRD 中定义的单数或复数形式,也可使用简称。例如:
oc get crontabs oc get crontab oc get ct
$ oc get crontabs $ oc get crontab $ oc get ct
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 还可查看 CR 的原始 YAML 数据:
oc get <kind> -o yaml
$ oc get <kind> -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow