Kubernetes CRD 开发示例

一、开发环境准备

安装必要工具‌

# 安装 kubectl 和 kubebuilder(以 macOS 为例)
brew install kubectl  
curl -L https://github.com/kubernetes-sigs/kubebuilder/releases/download/v3.10.0/kubebuilder_darwin_amd64 -o kubebuilder  
chmod +x kubebuilder && mv kubebuilder /usr/local/bin/  

注:kubebuilder 是 Kubernetes 官方推荐的 CRD 开发框架‌。

初始化项目‌

mkdir scaling-operator && cd scaling-operator  
kubebuilder init --domain mydomain.com  

二、定义 CRD

创建 API 资源类型‌


kubebuilder create api --group autoscaling --version v1 --kind ScalingConfig  

该命令生成以下文件:

api/v1/scalingconfig_types.go(资源结构定义)
controllers/scalingconfig_controller.go(控制器逻辑)‌。

自定义资源结构‌
编辑 api/v1/scalingconfig_types.go,定义字段:

type ScalingConfigSpec struct {
    MinReplicas int32  `json:"minReplicas"`
    MaxReplicas int32  `json:"maxReplicas"`
    MetricType  string `json:"metricType"` // 例如 CPU、Memory
}

完成后执行 make manifests 生成 CRD YAML 文件‌。


三、实现控制器逻辑

监控资源变更‌
在 controllers/scalingconfig_controller.go 的 Reconcile 函数中处理资源变更事件:

func (r *ScalingConfigReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
    config := &autoscalingv1.ScalingConfig{}
    if err := r.Get(ctx, req.NamespacedName, config); err != nil {
        return ctrl.Result{}, client.IgnoreNotFound(err)
    }

    // 根据配置调整 Deployment 副本数(示例逻辑)
    deployment := &appsv1.Deployment{}
    if err := r.Get(ctx, types.NamespacedName{Name: config.Spec.TargetDeployment, Namespace: req.Namespace}, deployment); err == nil {
        if *deployment.Spec.Replicas < config.Spec.MinReplicas {
            *deployment.Spec.Replicas = config.Spec.MinReplicas
            r.Update(ctx, deployment)
        }
    }
    return ctrl.Result{}, nil
}

四、部署与测试

部署 CRD 和控制器‌

make install          # 安装 CRD 到集群
make docker-build && make deploy  # 构建镜像并部署控制器

创建自定义资源实例‌
创建 configs/scaling-config.yaml:

apiVersion: autoscaling.mydomain.com/v1
kind: ScalingConfig
metadata:
  name: example-scaling
spec:
  minReplicas: 2
  maxReplicas: 10
  metricType: CPU
  targetDeployment: my-app

执行 kubectl apply -f configs/scaling-config.yaml‌。

验证功能‌

kubectl get scalingconfigs.autoscaling.mydomain.com  # 查看资源状态
kubectl describe deployment my-app                  # 检查副本数是否调整

核心流程总结
步骤 工具/操作 关键输出
环境准备 kubebuilder 安装 开发框架初始化完成‌
定义资源结构 编辑 *_types.go 文件 CRD YAML 文件生成‌
实现业务逻辑 编写 Reconcile 函数 控制器逻辑代码‌
部署与测试 make install 和 kubectl 资源实例生效‌
扩展能力
高级场景‌:通过 Operator 模式实现自动化运维(如自动扩缩容)‌;
多版本支持‌:在 CRD 定义中添加多个版本并设置转换逻辑‌。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值