管理自定义资源
自定义资源定义(Custom Resource Definition,CRD) 是对Kubernetes API的扩展,当默认的Kubernetes资源无法满足业务需求时,您可以通过CRD对象来定义新的资源类别。 根据CRD的定义,您可以在集群中创建自定义资源(Custom Resource,CR)来满足业务需求。 CRD允许用户创建新的资源类别的同时又不必添加新的Kubernetes API服务器,从而有效提高集群管理的灵活性。
创建CRD
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“自定义资源”,在右上角单击“YAML创建”。
- 输入YAML来新建CRD。CRD的YAML定义需要根据业务需求进行定制,详情请参见使用CustomResourceDefinition扩展Kubernetes API。
- 单击“确定”。
查看CRD及其对应的资源
- 登录CCE控制台。
- 单击集群名称进入集群,在左侧选择“自定义资源”。
- 在自定义资源页面,查看CRD或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