# 管理自定义资源
自定义资源定义（Custom Resource Definition，CRD） 是对Kubernetes API的扩展，当默认的Kubernetes资源无法满足业务需求时，您可以通过CRD对象来定义新的资源类别。 根据CRD的定义，您可以在集群中创建自定义资源（Custom Resource，CR）来满足业务需求。 CRD允许用户创建新的资源类别的同时又不必添加新的Kubernetes API服务器，从而有效提高集群管理的灵活性。
#### 创建CRD
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
2. 单击集群名称进入集群，在左侧选择"自定义资源"，在右上角单击"YAML创建"。
3. 输入YAML来新建CRD。CRD的YAML定义需要根据业务需求进行定制，详情请参见[使用CustomResourceDefinition扩展Kubernetes API](https://kubernetes.io/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/)。
4. 单击"确定"。
 
#### 查看CRD及其对应的资源
1. 登录[CCE控制台](https://console.huaweicloud.com/cce2.0/?#/cce/cluster/list)。
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）](https://support.huaweicloud.com/usermanual-cce/cce_10_0189.html#cce_10_0189__section1273861718819)），权限作用范围如下：
- 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）](https://support.huaweicloud.com/usermanual-cce/cce_10_0189.html#cce_10_0189__section1273861718819)），权限作用范围如下：
- 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
```
