更新时间:2026-04-24 GMT+08:00
分享

管理自定义资源

自定义资源定义(Custom Resource Definition,CRD) 是对Kubernetes API的扩展,当默认的Kubernetes资源无法满足业务需求时,您可以通过CRD对象来定义新的资源类别。 根据CRD的定义,您可以在集群中创建自定义资源(Custom Resource,CR)来满足业务需求。 CRD允许用户创建新的资源类别的同时又不必添加新的Kubernetes API服务器,从而有效提高集群管理的灵活性。

创建CRD

  1. 登录CCE控制台
  2. 单击集群名称进入集群,在左侧选择“自定义资源”,在右上角单击“YAML创建”
  3. 输入YAML来新建CRD。CRD的YAML定义需要根据业务需求进行定制,详情请参见使用CustomResourceDefinition扩展Kubernetes API
  4. 单击“确定”。

查看CRD及其对应的资源

  1. 登录CCE控制台
  2. 单击集群名称进入集群,在左侧选择“自定义资源”
  3. 在自定义资源页面,查看CRD或CRD对应的资源对象。

    • 查看CRD及其YAML

      列表中列出了集群中所有CRD,以及对应的API组、API版本、资源作用范围,单击操作列中的“查看YAML”按钮即可查看CRD的YAML。

      您可以通过上方的搜索框,使用关键词搜索全部资源类型。

    • 查看CRD对应的资源对象

      在列表中选择一个自定义资源类型,单击操作列中的“查看资源”按钮即可浏览对应的资源对象。

常见问题

管理自定义资源常见问题如下。

IAM用户查看/编辑CRD权限不足

问题现象

查看/编辑CRD提示无权限:

customresourcedefinitions.apiextensions.k8s.io is forbidden: User "xxx" cannot list resource "customresourcedefinitions”in API group "apiextensions.k8s.io" at the cluster scope

解决方案

IAM用户查看集群CRD,需授予CRD资源对象的Kubernetes RBAC权限(具体操作指导请参见自定义命名空间权限(kubectl)),权限作用范围如下:

  • API组(apiGroups):apiextensions.k8s.io
  • 资源(resources):customresourcedefinitions

以只读权限为例:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: crd-reader  # 集群角色名称
rules:
- apiGroups: ["apiextensions.k8s.io"]      # CRD资源的API组
  resources: ["customresourcedefinitions"] # CRD资源对象
  verbs: ["get", "list", "watch"]          # 仅保留只读权限
---
# 绑定到用户/组
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: crd-reader-binding
subjects:
- kind: User  # 或 Group
  name: 0c97ac3cb280f4d91fa7c0096739e1f8    # IAM用户ID/用户组ID
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: crd-reader  # 集群角色名称
  apiGroup: rbac.authorization.k8s.io

IAM用户查看CR权限不足

问题现象

查看/编辑CR提示无权限,以podmonitors资源为例:

Error from server (Forbidden): podmonitors.monitoring.coreos.com is forbidden: User "xxx" cannot list resource "podmonitors" in API group "monitoring.coreos.com" at the cluster scope

解决方案

IAM用户查看CRD实例对象CR(CustomResource)时,还需要需要添加对应自定义CR的Kubernetes RBAC权限(具体操作指导请参见自定义命名空间权限(kubectl)),权限作用范围如下:

  • API组(apiGroups):填写CR所属CRD的API组(如monitoring.coreos.com)
  • 资源(resources):填写CR资源名(如podmonitors)

以只读权限为例:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: crd-cr-reader
rules:
# 1. 允许查看CRD定义
- apiGroups: ["apiextensions.k8s.io"]
  resources: ["customresourcedefinitions"]
  verbs: ["get", "list", "watch"]
# 2. 允许查看CR实例
- apiGroups: ["你自己的CRD API组"]    # 例如:monitoring.coreos.com
  resources: ["你的CR资源名"]         # 例如:podmonitors
  verbs: ["get", "list", "watch"]     # 仅保留只读权限
---
# 绑定到用户/组
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: crd-cr-reader-binding
subjects:
- kind: User  # 或 Group
  name: 0c97ac3cb280f4d91fa7c0096739e1f8    # IAM用户ID/用户组ID
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: crd-cr-reader  # 集群角色名称
  apiGroup: rbac.authorization.k8s.io

相关文档