如何在 Kubernetes 中自定义 CRD 资源?

描述了自定义 Kubernetes CRD 的步骤,包括定义、部署和创建资源实例。介绍了 Operator 控制器的概念及其常用工具链。

部署与运维 困难 Kubernetes CRD crd

自定义Kubernetes资源定义(CRD)是扩展Kubernetes API的核心机制,允许用户根据特定需求定义和管理自定义资源对象。主要步骤如下:

  1. 定义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
    
  2. 部署CRD到Kubernetes集群
    使用kubectl命令应用CRD文件以创建资源类型:
    kubectl apply -f crd-definition.yaml
    
  3. 创建资源实例(CR)
    基于已定义的CRD,创建一个YAML文件实例化自定义资源:
    apiVersion: example.com/v1
    kind: Example  # 与CRD中的kind匹配
    metadata:
      name: example-instance
    spec:
      foo: bar     # 自定义属性的值和配置
    

    部署实例到集群:

    kubectl apply -f custom-resource.yaml
    
  4. 可选:部署Operator控制器
    为CRD编写Operator以处理资源操作(如创建、更新或删除)。常见的工具链包括:
    • Operator SDK:快速构建控制器逻辑(通常以Pod形式部署到集群)。
      // 示例Operator伪代码:监听到资源变化时触发自定义逻辑
      if event.Type == "ADDED" {
      reconcile(instance)
      }
      
    • 通过命令行部署:
      kubectl apply -f operator-manifest.yaml
      
  5. 验证操作
    • 查看自定义资源列表:kubectl get examples.example.com
    • 检查资源状态:kubectl describe example.example.com example-instance
    • 监控Operator日志以确认业务逻辑执行正常:kubectl logs operator-pod-name