Mit einem hierarchischen Repository synchronisieren

In dieser Anleitung erfahren Sie, wie Sie mit einem hierarchischen Root-Repository von Config Sync die Konfiguration eines Kubernetes-Clusters verwalten, der von zwei verschiedenen Teams genutzt wird: team-1 und team-2.

Ziele

  • Best Practices für die Verwendung eines hierarchischen Repositorys.
  • Synchronisieren Sie einen Cluster mit dem hierarchischen Beispiel-Repository.

Kosten

In dieser Anleitung werden die folgenden kostenpflichtigen Komponenten von Google Cloud verwendet:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweis

  1. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.

    Zur Projektauswahl

  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. So prüfen Sie, ob die Abrechnung für Ihr Projekt aktiviert ist.

  3. Sie müssen Zugriff auf einen Cluster mit bereits installiertem Config Sync haben. Wenn Sie keinen solchen Cluster haben, folgen Sie der Anleitung in den Abschnitten „Vorbereitung” und „Umgebung vorbereiten” der Kurzanleitung für Config Sync

    1. Konfigurieren Sie den Zugriff auf die kubectl-Befehlszeile mit dem folgenden Befehl:
    gcloud container clusters get-credentials CLUSTER_NAME \
        --zone ZONE \
        --project PROJECT_ID
    

    Dabei gilt:

    • CLUSTER_NAME: Name des registrierten Clusters, auf den Sie diese Konfiguration anwenden möchten
    • ZONE: Zone, in der Sie den Cluster erstellt haben
    • PROJECT_ID: Ihre Projekt-ID

Repository-Architektur ansehen

In dieser Anleitung konfigurieren Sie Config Sync für die Synchronisierung mit den Konfigurationen im Verzeichnis config/ des Repositorys hierarchical-format/. Das Verzeichnis config/ enthält die folgenden Verzeichnisse und Dateien:

├── cluster
│   ├── clusterrolebinding-namespace-reader.yaml
│   ├── clusterrole-namespace-reader.yaml
│   ├── clusterrole-secret-admin.yaml
│   ├── clusterrole-secret-reader.yaml
│   └── crontab-crd.yaml
├── namespaces
│   ├── limit-range.yaml
│   ├── team-1
│   │   ├── crontab.yaml
│   │   ├── namespace.yaml
│   │   ├── network-policy-default-deny-egress.yaml
│   │   ├── resource-quota-pvc.yaml
│   │   ├── rolebinding-secret-reader.yaml
│   │   └── sa.yaml
│   └── team-2
│       ├── crontab.yaml
│       ├── namespace.yaml
│       ├── network-policy-default-deny-all.yaml
│       ├── resource-quota-pvc.yaml
│       ├── rolebinding-secret-admin.yaml
│       └── sa.yaml
├── README.md
└── system
    └── repo.yaml

Ein gültiges hierarchisches Root-Repository von Config Sync muss drei Unterverzeichnisse enthalten: cluster/, namespaces/ und system/.

Das Verzeichnis cluster/ enthält Konfigurationen, die für ganze Cluster (z. B. CRDs, ClusterRoles und ClusterRoleBindings) gelten, statt für Namespaces.

Das Verzeichnis namespaces/ enthält Konfigurationen für die Namespace-Objekte und die Namespace-bezogenen Objekte. Jedes Unterverzeichnis unter namespaces/ enthält die Konfigurationen für ein Namespace-Objekt und alle Namespace-bezogenen Objekte im Namespace. Der Name eines Unterverzeichnisses muss mit dem Namen des Namespace-Objekts übereinstimmen. Namespace-bezogene Objekte, die in jedem Namespace erstellt werden müssen, können direkt unter namespaces/ platziert werden (z. B. namespaces/limit- range.yaml).

In dieser Anleitung hat jedes Team einen eigenen Kubernetes-Namespace, ein Kubernetes-Dienstkonto, Ressourcenkontingente, Netzwerkrichtlinien und Rollenbindungen. Der Clusteradministrator richtet eine Richtlinie in namespaces/limit-range.yaml ein, um die Ressourcenzuweisung auf Pods oder Container in beiden Namespaces einzuschränken. Der Clusteradministrator richtet auch ClusterRoles und ClusterRoleBindings ein.

Das Verzeichnis system/ enthält Konfigurationen für den Config Sync Operator.


Das Verzeichnis compiled/, das für die Verwendung von Config Sync nicht erforderlich ist, enthält die Ausgabe von nomos hydrate, in der die Konfigurationen aus den Verzeichnissen cluster/, namespaces/, system/ in das genaue Format kompiliert werden, das zum Anwenden an den APIServer gesendet wird. Die clusterbezogenen Ressourcen befinden sich direkt in diesem Verzeichnis. Jedes Unterverzeichnis enthält alle Konfigurationen für die Ressourcen in einem Namespace. Das Verzeichnis compiled/ enthält die folgenden Verzeichnisse und Dateien:

.
├── clusterrolebinding_namespace-reader.yaml
├── clusterrole_namespace-reader.yaml
├── clusterrole_secret-admin.yaml
├── clusterrole_secret-reader.yaml
├── customresourcedefinition_crontabs.stable.example.com.yaml
├── namespace_team-1.yaml
├── namespace_team-2.yaml
├── team-1
│   ├── crontab_my-new-cron-object.yaml
│   ├── limitrange_limits.yaml
│   ├── networkpolicy_default-deny-egress.yaml
│   ├── resourcequota_pvc.yaml
│   ├── rolebinding_secret-reader.yaml
│   └── serviceaccount_sa.yaml
└── team-2
    ├── crontab_my-new-cron-object.yaml
    ├── limitrange_limits.yaml
    ├── networkpolicy_default-deny-all.yaml
    ├── resourcequota_pvc.yaml
    ├── rolebinding_secret-admin.yaml
    └── serviceaccount_sa.yaml

Cluster mit Config Sync mit dem Root-Repository synchronisieren

In diesem Abschnitt synchronisieren Sie Ihren Cluster mit Config Sync und dem gcloud-Befehlszeilentool mit dem hierarchischen Repository.

  1. Erstellen Sie eine apply-spec.yaml-Datei und fügen Sie den folgenden Text in diese ein:

    # apply-spec.yaml
    
    applySpecVersion: 1
    spec:
      configSync:
        enabled: true
        sourceFormat: hierarchy
        syncRepo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples/
        syncBranch: init
        secretType: none
        policyDir: hierarchical-format/config
    
  2. Wenden Sie die Datei apply-spec.yaml mit dem gcloud-Befehlszeilentool an:

     gcloud alpha container hub config-management apply \
         --membership=CLUSTER_NAME \
         --config=CONFIG_YAML_PATH \
         --project=PROJECT_ID
    

    Dabei gilt:

    • CLUSTER_NAME: Name des registrierten Clusters, auf den Sie diese Konfiguration anwenden möchten
    • CONFIG_YAML_PATH: Pfad zur Datei apply-spec.yaml
    • PROJECT_ID: Ihre Projekt-ID
  3. Prüfen Sie, ob Config Sync alle Konfigurationen erfolgreich mit Ihrem Cluster synchronisiert hat:

    gcloud alpha container hub config-management status
        --project=PROJECT_ID
    

    Beispielausgabe:

    Name          Status  Last_Synced_Token  Sync_Branch  Last_Synced_Time      Policy_Controller                          Hierarchy_Controller
    CLUSTER_NAME  SYNCED  6bfc9be            init         2021-06-08T17:26:32Z  GatekeeperControllerManager NOT_INSTALLED  PENDING
    

    Eine erfolgreiche Installation hat den Status SYNCED.

Konfigurationen prüfen

Das Verzeichnis config/ enthält die folgenden Ressourcen:

  • ClusterRoles
  • ClusterRoleBindings
  • CRDs
  • Namespaces
  • RoleBindings
  • ServiceAccounts
  • ResourceQuotas
  • NetworkPolicies
  • LimitRanges
  • CRs

Diese Konfigurationen werden angewendet, sobald Config Sync für den Lesezugriff auf das Repository konfiguriert wurde. In diesem Abschnitt prüfen Sie, ob Config Sync die Namespaces, CRDs und Rollenbindungen im Verzeichnis verwaltet.

Für alle von Config Sync verwalteten Objekte ist das Label app.kubernetes.io/managed-by auf configmanagement.gke.io gesetzt. Sie können dieses Label verwenden, um Ihre Ressourcen abzufragen.

  1. Listen Sie die von Config Sync verwalteten Namespaces auf:

    kubectl get ns -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Beispielausgabe:

    NAME        STATUS   AGE
    team-1      Active   28m
    team-2      Active   28m
    
  2. Listen Sie die von Config Sync verwalteten CRDs auf:

    kubectl get crds -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Beispielausgabe:

    NAME                          CREATED AT
    crontabs.stable.example.com   2021-05-04T14:58:14Z
    
  3. Listen Sie die von Config Sync verwalteten Rollenbindungen auf:

    kubectl get rolebindings -A -l app.kubernetes.io/managed-by=configmanagement.gke.io
    

    Beispielausgabe:

    NAMESPACE   NAME                            ROLE                        AGE
    team-1      secret-reader                   ClusterRole/secret-reader   29m
    team-2      secret-admin                    ClusterRole/secret-admin    29m
    

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

  1. Wechseln Sie in der Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Einzelne Ressourcen löschen

Führen Sie den folgenden Befehl aus, um die Verwaltung Ihres Clusters mit Config Sync zu stoppen:

gcloud alpha container hub config-management unmanage \
    --project=PROJECT_ID \
    --membership=CLUSTER_NAME

Löschen Sie den Cluster mit folgendem Befehl:

gcloud container clusters delete CLUSTER_NAME

Nächste Schritte

  • Referenzarchitekturen, Diagramme, Anleitungen und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center