如何在 Kubernetes 中自定义 CRD 资源?
描述了自定义 Kubernetes CRD 的步骤,包括定义、部署和创建资源实例。介绍了 Operator 控制器的概念及其常用工具链。
自定义Kubernetes资源定义(CRD)是扩展Kubernetes API的核心机制,允许用户根据特定需求定义和管理自定义资源对象。主要步骤如下:
- 定义CRD:
创建一个YAML文件定义CRD的元数据和schema。以下是一个标准CRD定义示例:apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: examples.example.com # CRD名称格式:plural.group spec: group: example.com # 自定义资源组名 scope: Namespaced # 可选Namespaced或Cluster versions: - name: v1 served: true storage: true schema: openAPIV3Schema: # 定义schema规则,如属性类型验证 names: plural: examples # 资源复数形式 singular: example # 资源单数形式 kind: Example # 资源kind标识 listKind: ExampleList
- 部署CRD到Kubernetes集群:
使用kubectl命令应用CRD文件以创建资源类型:kubectl apply -f crd-definition.yaml
- 创建资源实例(CR):
基于已定义的CRD,创建一个YAML文件实例化自定义资源:apiVersion: example.com/v1 kind: Example # 与CRD中的kind匹配 metadata: name: example-instance spec: foo: bar # 自定义属性的值和配置
部署实例到集群:
kubectl apply -f custom-resource.yaml
- 可选:部署Operator控制器:
为CRD编写Operator以处理资源操作(如创建、更新或删除)。常见的工具链包括:- Operator SDK:快速构建控制器逻辑(通常以Pod形式部署到集群)。
// 示例Operator伪代码:监听到资源变化时触发自定义逻辑 if event.Type == "ADDED" { reconcile(instance) }
- 通过命令行部署:
kubectl apply -f operator-manifest.yaml
- Operator SDK:快速构建控制器逻辑(通常以Pod形式部署到集群)。
- 验证操作:
- 查看自定义资源列表:
kubectl get examples.example.com
- 检查资源状态:
kubectl describe example.example.com example-instance
- 监控Operator日志以确认业务逻辑执行正常:
kubectl logs operator-pod-name
- 查看自定义资源列表: