一、开发环境准备
安装必要工具
# 安装 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 定义中添加多个版本并设置转换逻辑。