Konfigurationen ändern

In dieser Anleitung erfahren Sie, wie Sie eine Konfiguration ändern, validieren und mit einem Cluster synchronisieren. Diese Anleitung basiert auf den Kompetenzen, die Sie in der Kurzanleitung zur Synchronisierung aus einem Git-Repository gelernt haben. Beispiel: Sie sind ein neues Mitglied des Compliance-Teams in Ihrer Organisation und erstellen Ihre erste Konfiguration.

Hinweis

Bevor Sie mit dieser Anleitung beginnen, führen Sie die folgenden Schritte aus:

  1. Folgen Sie der Kurzanleitung zur Synchronisierung aus einem Git-Repository und löschen Sie den von Ihnen konfigurierten Cluster nicht.

  2. Erstellen Sie ein GitHub-Konto, wenn Sie noch keines haben.

  3. Befolgen Sie die Anweisungen zum Hinzufügen eines neuen SSH-Schlüssels zu Ihrem GitHub-Konto in der GitHub-Dokumentation. Sie benötigen den Speicherort Ihres privaten Schlüssels, um diese Anleitung abzuschließen.

Es ist auch hilfreich, mit Verzweigen und Klonen von Git-Repositories vertraut zu sein.

Repository erstellen

In diesem Abschnitt erstellen Sie ein Git-Repository. Dazu erstellen Sie eine Verzweigung des Beispiel-Repositorys von Anthos Config Management und erstellen dann einen lokalen Klon als Arbeitskopie.

Führen Sie die folgenden Schritte aus, um das Repository zu erstellen:

  1. Wechseln Sie in Ihrem Browser zum Beispiel-Repository für Anthos Config Management und klicken Sie auf Verzweigung.

  2. Klonen Sie die Verzweigung auf Ihrem lokalen System:

    git clone git@github.com:GIT_USERNAME/anthos-config-management-samples.git

    Ersetzen Sie GIT_USERNAME durch Ihren GitHub-Nutzernamen.

  3. Konfigurieren Sie Ihr lokales System zur Authentifizierung bei GitHub mit dem SSH-Schlüssel, den Sie im Abschnitt Hinweis hinzugefügt haben.

Nomos-vet-Pre-Commit-Hook erstellen

Der Befehl nomos vet verhindert, dass Sie eine Konfiguration mit Syntaxfehlern übergeben. Sie können einen Pre-Commit-Hook installieren, der den Befehl nomos vet für Ihre Änderung ausführt. Mit diesem Hook sucht nomos vet nach Syntaxfehlern und anderen Problemen mit Ihren Änderungen, bevor Sie den Commit in Ihr lokales Repository übertragen.

Führen Sie die folgenden Schritte aus, um den Pre-Commit-Hook hinzuzufügen:

  1. Öffnen Sie in einem Terminal das Verzeichnis, in dem Sie das Repository geklont haben.

  2. Bearbeiten Sie die Datei .git/hooks/pre-commit. Achten Sie auf das Zeichen . im Verzeichnis .git/.

  3. nomos vet sollte für das Verzeichnis quickstart/multirepo/root in Ihrem lokal geklonten Repository ausgeführt werden. Legen Sie --source-format=unstructured fest, da "unstrukturiert" das empfohlene Format für die meisten Nutzer ist und das Beispiel in der Kurzanleitung unstrukturiert ist. Fügen Sie der Datei Folgendes hinzu.

    nomos vet --path=REPO_PATH/quickstart/multirepo/root --source-format=unstructured
    

    Ersetzen Sie REPO_PATH durch den vollständig qualifizierten Pfad, in den Sie das Repository geklont haben.

  4. Speichern Sie die Datei.

  5. Achten Sie darauf, dass die Datei .git/hooks/pre-commit ausführbar ist:

    chmod +x .git/hooks/pre-commit
  6. Zum Testen des Pre-Commits können Sie absichtlich einen Syntaxfehler in eine Konfiguration einfügen (z. B. ein :-Zeichen löschen), bevor Sie versuchen, git commit auszuführen. nomos vet wird ausgeführt und zeigt eine Fehlermeldung an.

Cluster konfigurieren

Kubernetes-Secrets für Git-Anmeldedaten erstellen

  1. Rufen Sie den privaten Schlüssel ab, der in Ihrem Git-Repository registriert ist. Achten Sie darauf, wie Sie die Datei herunterladen und wo Sie sie speichern, da sie zur Authentifizierung bei Ihrem Git-Repository verwendet werden kann.

  2. Erstellen Sie mit einem SSH-Schlüsselpaar ein Secret.

    • Erstellen Sie ein Secret für das Stamm-Repository:

      kubectl create secret generic SECRET_NAME \
       --namespace=config-management-system \
       --from-file=ssh=/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
      
    • Erstellen Sie für jedes Namespace-Repository ein Secret:

      Das Stamm-Repository enthält ein RepoSync-Objekt. Daher müssen Sie im Namespace des RepoSync-Objekts ein Secret erstellen (gamestore):

      kubectl create secret generic SECRET_NAME \
       --namespace=gamestore
       --from-file=ssh=/path/to/KEYPAIR_PRIVATE_KEY_FILENAME
      

    Dabei gilt:

    • SECRET_NAME: Fügen Sie den Namen des Secrets hinzu.
    • /path/to/KEYPAIR_PRIVATE_KEY_FILENAME: Fügen Sie den Namen des privaten Schlüssels hinzu (den Namen ohne das Suffix .pub).
  3. Schützen Sie den privaten Schlüssel auf Ihrer lokalen Festplatte oder löschen Sie ihn.

Git-Konfigurationen aktualisieren

Bearbeiten Sie die Git-Konfigurationen in den RootSync- und RepoSync-Objekten, die Sie in der Kurzanleitung zur Synchronisierung aus einem Git-Repository erstellt haben. Nehmen Sie die folgenden Änderungen vor:

  1. Aktualisieren Sie die folgenden Werte Ihres RootSync-Objekts:

    • Ändern Sie den Wert von repo in die Adresse der Verzweigung. Ersetzen Sie GIT_USERNAME durch Ihren GitHub-Nutzernamen.
    • Ändern Sie den Wert von auth in ssh.
    • Setzen Sie spec.git.secretRef.name auf SECRET_NAME. Das SECRET_NAME Secret sollte bereits im Cluster vorhanden sein.

    Das folgende Beispiel zeigt eine aktualisierte Konfiguration:

    apiVersion: configsync.gke.io/v1beta1
    kind: RootSync
    metadata:
      name: root-sync
      namespace: config-management-system
    spec:
      sourceFormat: unstructured
      git:
        repo: git@github.com:GIT_USERNAME/anthos-config-management-samples.git
        branch: main
        dir: quickstart/multirepo/root
        auth: ssh
        secretRef:
          name: SECRET_NAME
    

    Ersetzen Sie SECRET_NAME durch den Namen des Secret.

    Eine Erläuterung der Felder finden Sie unter ConfigManagement-Felder.

  2. Wenden Sie die Konfiguration auf Ihren Cluster an:

    kubectl apply -f root-sync.yaml
  3. Aktualisieren Sie die folgenden Werte Ihres RepoSync-Objekts:

    • Ändern Sie den Wert von repo in die Adresse der Verzweigung. Ersetzen Sie GIT_USERNAME durch Ihren GitHub-Nutzernamen.
    • Ändern Sie den Wert von auth in ssh.
    • Setzen Sie spec.git.secretRef.name auf SECRET_NAME. Das SECRET_NAME Secret sollte bereits im Cluster vorhanden sein.

    Das folgende Beispiel zeigt eine aktualisierte Konfiguration:

    apiVersion: configsync.gke.io/v1beta1
    kind: Repo
    metadata:
      name: repo-sync
      namespace: gamestore
    spec:
      sourceFormat: unstructured
      git:
        repo: git@github.com:GIT_USERNAME/anthos-config-management-samples.git
        branch: main
        dir: quickstart/multirepo/namespaces/gamestore
        auth: ssh
        secretRef:
          name: SECRET_NAME
    

    Ersetzen Sie SECRET_NAME durch den Namen des Secret.

  4. Übernehmen Sie die Änderungen für das lokale Repository:

    git add .
    git commit -m 'Update gamestore RepoSync'
    git push
    

Wenn der Befehl erfolgreich ist, aktualisiert Kubernetes den Config Management Operator auf Ihrem Cluster, um mit der Synchronisierung Ihrer Clusterkonfiguration aus dem Repository zu beginnen. Listen Sie alle im Namespace config-management-system ausgeführten Pods auf, um zu prüfen, ob der Config Management Operator ausgeführt wird:

kubectl get pods -n config-management-system

Beispielausgabe:

NAME                                       READY   STATUS    RESTARTS   AGE
admission-webhook-7dbc55cbf5-9thcj         1/1     Running   0          6d18h
admission-webhook-7dbc55cbf5-pmrxt         1/1     Running   0          6d18h
ns-reconciler-gamestore-67ff4dcbc4-x4vnh   3/3     Running   0          14m
reconciler-manager-7cdb699bf8-8lvll        2/2     Running   0          6d18h
root-reconciler-84f976b74d-mh6zd           3/3     Running   0          14m

Ihr Cluster hat an diesem Punkt dieselben Konfigurationen wie in der Kurzanleitung zur Synchronisierung aus einem Git-Repository. Weil die Verzweigung den gleichen Inhalt hat. Sie können den Übungen in dieser Kurzanleitung folgen und dieselben Ergebnisse sehen.

Konfiguration im Repository ändern

Wenn Sie eine Konfiguration im Repository erstellen oder ändern, erkennt Config Sync das Commit und wendet die neue Konfiguration auf relevante Kubernetes-Objekte an.

Konfiguration ergänzen

In diesem Abschnitt fügen Sie dem gamestore-admin-RoleBinding den Nutzer admin@gamestore.com im Namespace gamestore hinzu:

  1. Öffnen Sie ein Terminal und geben Sie den folgenden Befehl ein, um das RoleBinding gamestore auf Änderungen zu überwachen:

    kubectl get rolebindings gamestore-admin -n gamestore -o yaml --watch
    
  2. Öffnen Sie ein anderes Terminal und rufen Sie den lokalen Klon Ihres Repositorys auf.

  3. Bearbeiten Sie die Datei quickstart/multirepo/root/rolebinding-gamestore-admin.yaml, um admin@gamestore.com dem Feld subjects hinzuzufügen.

    Nach der Bearbeitung hat die Datei folgenden Inhalt:

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: gamestore-admin
      namespace: gamestore
    subjects:
    - kind: ServiceAccount
      name: ns-reconciler-gamestore
      namespace: config-management-system
    - kind: User
      name: admin@gamestore.com
      apiGroup: rbac.authorization.k8s.io
    roleRef:
      kind: ClusterRole
      name: admin
      apiGroup: rbac.authorization.k8s.io
    
  4. Speichern Sie die Datei:

    git add quickstart/multirepo/root/rolebinding-gamestore-admin.yaml
    
  5. Erstellen Sie einen Commit:

    git commit -m "Add admin@gamestore.com to cluster admin"
    
  6. Übertragen Sie das Commit per Push an Ihre Verzweigung:

    git push origin main
    
  7. Rufen Sie das Terminal auf und halten Sie nach dem Objekt gamestore-admin Ausschau. In wenigen Sekunden wird die Änderung mit dem Cluster synchronisiert.

Änderungen rückgängig machen

Mit Config Sync können Sie Änderungen ganz einfach rückgängig machen.

Führen Sie die folgenden Schritte aus, um die im vorherigen Abschnitt vorgenommenen Änderungen rückgängig zu machen:

  1. Rufen Sie das Terminal auf, das Sie für Git verwendet haben.

  2. Verwenden Sie den Befehl git log, um den Hash zu finden (in diesem Beispiel handelt es sich um den obersten Eintrag).

  3. Letzte Änderung rückgängig machen:

    git revert HASH
    
    git push origin main
    

    Da durch eine Wiederherstellungsoperation ein neuer Commit erstellt wird, prüft nomos vet --source-format=unstructured die resultierende Konfiguration noch einmal und stellt sicher, dass die Syntax weiterhin korrekt ist.

  4. Rufen Sie das Terminal auf, in dem Sie nach dem Objekt gamestore-admin Ausschau halten, und beachten Sie, dass admin@gamestore.com nicht mehr in den Subjekten für die ClusterRole aufgeführt ist.

  5. Drücken Sie Control+C, um die Überwachung des gamestore-admin-Objekts zu beenden.

Diese Übung zeigt, dass Config Sync Objekte mit den Konfigurationen in Ihrem Repository synchronisiert, wenn Sie Änderungen per Commit an das Repository übertragen.

Bereinigen

Zum Bereinigen führen Sie nach Abschluss der Übungen in dieser Anleitung die folgenden Schritte aus:

  • Löschen Sie den Cluster, den Sie zum Testen verwendet haben.
  • Löschen Sie den lokalen Klon der Verzweigung.
  • Löschen Sie gegebenenfalls den lokalen privaten SSH-Schlüssel.
  • Löschen Sie Ihre Verzweigung des Beispiel-Repositorys. Dadurch werden alle Bereitstellungsschlüssel gelöscht, die nur dem Repository zugeordnet sind.

Nächste Schritte