Abhängigkeiten zwischen Ressourcenobjekten deklarieren

In diesem Leitfaden erfahren Sie, wie Abhängigkeiten in Config Sync funktionieren und wie Sie Ihre eigenen Abhängigkeiten angeben.

Config Sync erkennt automatisch bestimmte Abhängigkeiten zwischen bestimmten Objekten, wenn diese mit dem Cluster synchronisiert werden. Beispielsweise werden die Namespace-Objekte immer vor Objekten in diesen Namespaces angewendet. Außerdem wird ein CRD-Objekt (CustomResourceDefinition) immer angewendet, bevor benutzerdefinierte Ressourcen dieses Typs angewendet werden. Ebenso ist die Löschreihenfolge für diese impliziten Abhängigkeiten umgekehrt: Namespaces werden nach Objekten in diesem Namespace gelöscht und CRDs werden nach benutzerdefinierten Ressourcen dieses Typs gelöscht.

Sie können explizite Abhängigkeiten auch mit der Annotation depends-on festlegen. Angenommen, Sie möchten, dass Ihr MySQL-StatefulSet vor der WordPress-Bereitstellung gestartet wird, damit die Datenbank angewendet wird und bereit ist, bevor Wordpress beginnt.

Voraussetzungen

  • RootSync und RepoSync APIs müssen aktiviert sein. Wenn Sie Config Sync manuell mit kubectl installiert haben und die APIs von RootSync und RepoSync nicht aktiviert sind, müssen Sie Ihr ConfigManagement-Objekt migrieren.

  • Einschränkung: Abhängigkeiten müssen sich in derselben Source of Truth wie die abhängigen Elemente befinden. Abhängigkeiten müssen von demselben RootSync- oder RepoSync-Objekt verwaltet werden wie ihre abhängigen Elemente. So wird sichergestellt, dass sich alle Ressourcen in derselben ResourceGroup befinden.

Apply-Gruppe

Beim Synchronisieren von Ressourcen mit dem Cluster teilt Config Sync Ressourcen mit direkten oder indirekten Abhängigkeiten in verschiedene Apply-Gruppen auf. Eine Apply-Gruppe besteht nur aus Ressourcen ohne direkte oder indirekte Abhängigkeiten. Die Apply-Gruppe, in der Ressourcen keine Abhängigkeiten haben, wird zuerst angewendet.

Aktivierung und Abgleich

Wenn ein Objekt ausgeführt wird (entweder angewendet oder bereinigt), kann es eine Weile dauern, bis das Objekt vom Controller abgeglichen wird. Wenn beispielsweise eine Bereitstellung angewendet wird, sind die zugrunde liegenden Pods möglicherweise nicht sofort bereit. Sobald die zugrunde liegenden Pods bereit sind, wird die Bereitstellung abgeglichen. Config Sync überprüft verschiedene Typen von Bedingungen, um zu prüfen, ob ein Objekt abgeglichen wurde. Weitere Details finden Sie unter sigs.k8s.io/cli-utils.

Mit der Annotation depends-on wendet Config Sync nicht nur Objekte in der gewünschten Reihenfolge an, sondern prüft auch, ob das Abhängigkeitsobjekt abgeglichen wird, bevor das abhängige Objekt angewendet wird.

Wenn das Abhängigkeitsobjekt nicht innerhalb des Standardabgleichzeitlimits von 5 Minuten abgeglichen wird, wendet Config Sync das abhängige Objekt bis zum nächsten Synchronisierungszeitraum nicht an. Sie können das Standardzeitlimit für den Abgleich überschreiben, indem Sie spec.override.reconcileTimeout festlegen.

Einem Objekt die Annotation depends-on hinzufügen

Um eine Abhängigkeit anzugeben, fügen Sie dem abhängigen Objekt die Annotation config.kubernetes.io/depends-on mit einem Wert hinzu, der auf die Abhängigkeitsobjekte verweist.

Für das WordPress-Beispiel sieht die Annotation in WordPress-Bereitstellung so aus:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  namespace: default
  labels:
    app: wordpress
  annotations:
    config.kubernetes.io/depends-on: apps/namespaces/default/StatefulSet/wordpress-mysql

Wenn Config Sync die Objekte anwendet, wendet es zuerst die Abhängigkeit an, das Objekt wordpress-mysql StatefulSet. Wenn die Abhängigkeit abgeglichen wurde, wendet Config Sync die Abhängigkeit an, die Bereitstellung wordpress an.

Objektreferenzen

Objektreferenzen verwenden die folgende Syntax:

  • Für Namespace-Objekte:

    GROUP/namespaces/NAMESPACE/KIND/NAME
    
  • Für clusterbezogene Objekte:

    GROUP/KIND/NAME
    

    Dabei gilt:

    • GROUP: Die Gruppe des Abhängigkeitsobjekts.
    • NAMESPACE: Den Namespace des Namespace-bezogenen Abhängigkeitsobjekts.
    • KIND: Die Art des Abhängigkeitsobjekts. Bei diesem Feld wird zwischen Groß- und Kleinschreibung unterschieden. Verwenden Sie beispielsweise "Pod" anstelle von "pod".
    • NAME: Der Name des Abhängigkeitsobjekts.

Für Objekte in der Kerngruppe wird stattdessen der leere String verwendet, z. B. /namespaces/test/Pod/pod-a.

Verwenden Sie ,, um mehrere Objektreferenzen zu trennen, z. B. /namespaces/test/Pod/pod-a,/namespaces/test/Pod/pod-b.