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