Zum Inhalt springen
_CORE
KI & Agentensysteme Unternehmensinformationssysteme Cloud & Platform Engineering Datenplattform & Integration Sicherheit & Compliance QA, Testing & Observability IoT, Automatisierung & Robotik Mobile & Digitale Produkte Banken & Finanzen Versicherungen Öffentliche Verwaltung Verteidigung & Sicherheit Gesundheitswesen Energie & Versorgung Telko & Medien Industrie & Fertigung Logistik & E-Commerce Retail & Treueprogramme
Referenzen Technologien Blog Know-how Tools
Über uns Zusammenarbeit Karriere
CS EN DE
Lassen Sie uns sprechen

Kubernetes Operators — Vývoj Vlastního Operátoru

25. 12. 2022 1 Min. Lesezeit intermediate

Cloud Experte

Kubernetes Operators — Entwicklung eines eigenen Operators

KubernetesOperatorsGoController 6 Min. Lesezeit

Entwicklung eines Kubernetes-Operators mit dem Operator SDK. Reconciliation Loop, Finalizers und Status-Management.

Operator Pattern

Operator = CRD + Controller. Kodifiziert operatives Wissen in Software.

  • CRD — definiert den Desired State
  • Controller — gleicht Actual und Desired State ab
  • Reconciliation Loop — Observe → Diff → Act

Scaffolding

operator-sdk init --domain example.com --repo github.com/org/db-operator
operator-sdk create api --group database --version v1 --kind Database --resource --controller

# Struktur
├── api/v1/
│   └── database_types.go
├── controllers/
│   └── database_controller.go
├── config/
│   ├── crd/
│   ├── rbac/
│   └── manager/
└── main.go

Reconciliation Loop

func (r *DatabaseReconciler) Reconcile(ctx context.Context,
    req ctrl.Request) (ctrl.Result, error) {

    db := &databasev1.Database{}
    if err := r.Get(ctx, req.NamespacedName, db); err != nil {
        return ctrl.Result{}, client.IgnoreNotFound(err)
    }

    // Create StatefulSet if not exists
    sts := &appsv1.StatefulSet{}
    err := r.Get(ctx, types.NamespacedName{
        Name: db.Name, Namespace: db.Namespace,
    }, sts)
    if errors.IsNotFound(err) {
        sts = r.constructStatefulSet(db)
        if err := r.Create(ctx, sts); err != nil {
            return ctrl.Result{}, err
        }
    }

    // Update status
    db.Status.Ready = sts.Status.ReadyReplicas == *sts.Spec.Replicas
    r.Status().Update(ctx, db)

    return ctrl.Result{RequeueAfter: 30 * time.Second}, nil
}

Finalizers

const dbFinalizer = "database.example.com/finalizer"

if !db.DeletionTimestamp.IsZero() {
    if controllerutil.ContainsFinalizer(db, dbFinalizer) {
        // Cleanup
        r.dropDatabase(ctx, db)
        controllerutil.RemoveFinalizer(db, dbFinalizer)
        r.Update(ctx, db)
    }
    return ctrl.Result{}, nil
}

Zusammenfassung

Kubernetes-Operators kodifizieren operatives Wissen in Code. Reconciliation Loop, Finalizers und Status-Management sind die grundlegenden Bausteine.

Brauchen Sie Hilfe bei der Implementierung?

Unser Team hat Erfahrung mit dem Entwurf und der Implementierung moderner Architekturen. Wir helfen Ihnen gerne.

Kostenlose Beratung

Teilen:

CORE SYSTEMS Team

Wir bauen Kernsysteme und KI-Agenten, die den Betrieb am Laufen halten. 15 Jahre Erfahrung mit Enterprise-IT.