operator-sdk

Prerequisites: kubebuilder

Neues Projekt initialisieren:

kubebuilder init --owner tasanger --domain sidecar-demo.ta.vg --repo sidecar-demo
$ kubectl api-resources | grep Pod
pods                              po           v1                                          true         Pod
podtemplates                                   v1                                          true         PodTemplate
horizontalpodautoscalers          hpa          autoscaling/v2                              true         HorizontalPodAutoscaler
pods                                           metrics.k8s.io/v1beta1                      true         PodMetrics
poddisruptionbudgets              pdb          policy/v1                                   true         PodDisruptionBudget

Es wird keine neue Ressource benötigt, daher wird nur der Controller erstellt:

$ kubebuilder create api --group core --version v1 --kind Pod
INFO Create Resource [y/n]                        
n
INFO Create Controller [y/n]                      
y
INFO Writing kustomize manifests for you to edit... 
INFO Writing scaffold for you to edit...          
INFO internal/controller/suite_test.go            
INFO internal/controller/pod_controller.go        
INFO internal/controller/pod_controller_test.go   
INFO Update dependencies:
$ go mod tidy           

Edit pod_controller.go

func (r *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
	l := log.FromContext(ctx)

	// TODO(user): your logic here
	pod := &corev1.Pod{}
	if err := r.Get(ctx, req.NamespacedName, pod); err != nil {
		return ctrl.Result{}, client.IgnoreNotFound(err)

	}

	l.Info("Pod", "Name", pod.Name, "Namespace", pod.Namespace)

	return ctrl.Result{}, nil
}

eine launch.json im Verzeichnis .vscode erstellen

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch Package",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "./cmd"
        }
    ]
}

Wenn sich Ihre main.go Datei im Verzeichnis cmd befindet, müssen Sie sicherstellen, dass der Build-Prozess dieses Verzeichnis berücksichtigt. Hier sind einige Schritte, um sicherzustellen, dass alles richtig konfiguriert ist:

Anpassen der VSCode Debug-Konfiguration: Passen Sie die launch.json in Ihrem .vscode-Verzeichnis an, um sicherzustellen, dass das cmd-Verzeichnis verwendet wird:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Launch",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}/cmd",
            "env": {},
            "args": [],
            "showLog": true,
            "trace": "verbose"
        }
    ]
}