更新时间:2026-11-10 GMT+08:00
分享

管理自定义资源

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

约束与限制

部分资源对象是集群正常运行所依赖的关键资源(如权限管理、网络配置、存储插件、监控配置等),不支持编辑和删除操作。在控制台上,此类资源对象的“编辑YAML”、“删除”按钮已置灰。若绕过控制台直接修改或删除这些资源对象,可能导致以下后果:
  • 集群节点异常或节点池功能失效
  • 权限模型被破坏,用户无法正常访问集群
  • 网络插件配置丢失,Pod通信中断
  • 存储快照数据丢失
  • 监控数据采集异常

该功能支持的集群版本范围为v1.30.14-r120、v1.31.14-r80、v1.32.13-r50、v1.33.13-r0、v1.34.10-r0、v1.35.7-r0、v1.36.3-r0及以上。

创建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对应的资源对象

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

编辑CRD的资源对象

  1. 登录CCE控制台。
  2. 单击集群名称进入集群,在左侧导航栏选择“自定义资源”。
  3. 在自定义资源页面的CRD列表中找到目标CRD,单击操作列中的“查看资源”进入详情页。
  4. 在CRD的资源对象列表中找到目标资源对象,单击操作列中的“编辑YAML”按钮。
  5. 按正确格式修改完成后单击“提交”。

删除CRD的资源对象

  1. 登录CCE控制台。
  2. 单击集群名称进入集群,在左侧导航栏选择“自定义资源”。
  3. 在自定义资源页面的CRD列表中找到目标CRD,单击操作列中的“查看资源”进入详情页。
  4. 在CRD的资源对象列表中找到目标资源对象,单击操作列中的“删除”按钮。
  5. 在弹出的窗口中,输入“DELETE”,单击“确定”。

    删除资源后不可恢复,请谨慎操作。

常见问题

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

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

相关文档