Go-Kubernetes-CRD自定义资源开发从零实现Operator模式
文章导语
Kubernetes Operator模式是云原生运维的最佳实践。通过CRD(自定义资源)+Controller(控制器),将运维知识编码为自动化程序。本文基于Kubebuilder,从零实现一个Go Operator。
一、Kubebuilder项目初始化
bash
kubebuilder init --domain mycompany.com --repo github.com/mycompany/myoperator
kubebuilder create api --group apps --version v1 --kind MyApp
二、CRD定义
go
type MyAppSpec struct {
Replicas *int32 `json:"replicas"`
Image string `json:"image"`
Resources corev1.ResourceRequirements `json:"resources,omitempty"`
}
type MyAppStatus struct {
AvailableReplicas int32 `json:"availableReplicas"`
Phase string `json:"phase"`
}
三、Reconcile逻辑
go
func (r *MyAppReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
var myApp appsv1.MyApp
if err := r.Get(ctx, req.NamespacedName, &myApp); err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}
// 期望状态 vs 实际状态
deployment := r.desiredDeployment(&myApp)
// 创建或更新Deployment
return ctrl.Result{RequeueAfter: 30 * time.Second}, nil
}
四、全文总结
- CRD扩展K8s API定义领域资源
- Controller持续调和期望状态和实际状态
- Kubebuilder提供代码生成和脚手架
- Operator实现运维自动化
参考文献
- Kubebuilder: https://github.com/kubernetes-sigs/kubebuilder
- K8s Operator模式文档
- CoreOS Operator Framework