Escribir un operador de Kubernetes desde cero

imagen







En este artículo, analizaremos más de cerca cómo crear su propio operador de Kubernetes desde cero. Los operadores son complementos que utilizan recursos personalizados (tipo) para administrar aplicaciones. Leer más en la documentación oficial .







— HelloApp. HelloApp, Kubernetes.







imagen







kind: HelloApp — (Custom Resource Definition, CRD), ( ). ( ).









, , Go. .







() , Kubernetes API.







Kubernetes:







imagen







Kubernetes — . API ( API). , , API Kubernetes . . . Go — Kubernetes, , .









:







  1. Go lang (1.16)
  2. Operator SDK (1.5)
  3. Kind
  4. Visual Studio Code Go




:







1:

2:

3: CRD

4: CRD

5:

6:

7:







1:



, Operator SDK. Operator SDK 1.5. SDK, . .







$ mkdir demo-operator
$ cd demo-operator
$ operator-sdk init --domain anupam.com --repo 
github.com/anupamgogoi/demo-operator
      
      





API



$ operator-sdk create api --group apps --version v1 --kind HelloApp --resource --controller
      
      





.







imagen







:







  1. Makefile , , . make help, .
  2. . , .
  3. . .
  4. .
  5. , . .


2:



. CRD (), () kind HelloApp , spec.size.







imagen







. spec : image () size (). spec, [4] .







imagen







. . — HelloApp , . , spec.size, — . . API .







imagen







Reconciler, Reconcile. Reconcile , CRUD (create read update delete — « », . ), (kind) (spec). , .













main.go



main.go Operator-SDK . , . main.go.







main.go:







imagen







ctrl.GetConfigOrDie() Kubernetes ~/.kube/config . ~/.kube/config :







imagen







IP , . . . GetConfigOrDie() , ctrl.NewManager() . API API Kubernetes. . main.go, .







kubectl CLI API API Kubernetes. :







$ kubectl get nodes --v=8
      
      





imagen







3: CRD



, HelloApp . CRD. demo-operator :







$ make manifests
      
      





CRD

~/demo-operator/config/crd/bases







imagen







~/demo-operator/config/samples .







imagen







4: CRD



, . kind, .







$ kind create cluster --name k8s
      
      





CRD :







$ make install
      
      





~/demo-operator/config/crd/bases







$ kubectl apply -f .
      
      





.







5:



. Kubernetes,







$ cd demo-operator
$ go run main.go
      
      





:







imagen







— samples :







$ kubectl create ns test
$ kubectl apply -f apps_v1_helloapp.yaml -n test
      
      





, test:







$ kubectl get all -n test
      
      





imagen







:







$ kubectl get HelloApp -n test
      
      





imagen







— !







6:



— , .







, -, CRD , 4 ( CRD).







, k8s . Go Visual Studio Code . Run → Start Debugging VS Code, .







imagen







— :







imagen







, ~/demo-operator/config/samples

CRD.







$ kubectl apply -f apps_v1_helloapp.yaml -n test
      
      





Reconcile, Reconcile, . Reconcile. , , .







7:



— (YAML) docker- . :







  1. .
  2. .
  3. , API Kubernetes.
  4. 2.
  5. , .




imagen







~/demo-operator/config/rbac . . ?







.







imagen







:







  1. Get, HelloApp. , Get HelloApp, API apps.anupam.com.
  2. Get, Deployment. , Deployment Kubernetes API apps.
  3. Update Deployment, API apps.


, +.







//+kubebuilder:rbac:groups=apps.anupam.com,resources=helloapps,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups=apps.anupam.com,resources=helloapps/status,verbs=get;update;patch
//+kubebuilder:rbac:groups=apps.anupam.com,resources=helloapps/finalizers,verbs=update
      
      





. Kubernetes . controller-gen CLI (CRD, RBAC . .).







make manifests. , , — CRD, , . .







Docker-



— docker- Kubernetes.







, Dockerfile, Operator-SDK. .







imagen







docker-:







$ make docker-build IMG=anupamgogoi/demo-operator:latest
      
      





docker. registry :







make docker-push IMG=anupamgogoi/demo-operator:latest
      
      





.









dist 5 , .







imagen







1-Namespace.yaml ( ). . 2, 3 4 rbac. 5 crd/bases. , 6-Controller.yaml, . . .







imagen







.









Kubernetes CentOS. . . - Kubernetes . .







dist - , kubectl apply .







imagen







demo-operator-system. , .







imagen







. CRD. CRD — helloapps.apps.anupam.com, 5-apps.anupam.com_helloapps.yaml.







, kind, HelloApp. - , HelloApp.







imagen







, HelloApp ( ) . Kubernetes.







, HelloApp.







$ kubectl get all -n test
      
      





!







imagen







, (size=1).







, IP .







imagen







. .









Kubernetes Operator-SDK. Go, . !








All Articles