Leitfaden zur Verwaltung mehrerer Kubernetes-Cluster mit kubectl config

Verwalten Sie mehrere Kubernetes-Cluster mit kubectl-Kontexten, Kubeconfig-Dateien, Namespaces und sichereren Wechselbefehlen.

Leitfaden zur Verwaltung mehrerer Kubernetes-Cluster mit kubectl config

Die Verwaltung mehrerer Kubernetes-Cluster ist normal, sobald Sie Entwicklungs-, Staging-, Produktions- oder Cluster in mehr als einer Cloud haben. Das Risiko ist einfach: Ein Befehl kann den falschen Cluster treffen, wenn Ihr Kontext nicht klar ist.

Dieser Leitfaden zeigt Ihnen, wie Sie kubectl config verwenden, um Kontexte zu inspizieren, Cluster zu wechseln, Namespaces festzulegen und mehrere Kubeconfig-Dateien zu organisieren.

Die Kubeconfig-Datei verstehen

Bevor Sie in die kubectl config-Befehle eintauchen, ist es wichtig, die Kubeconfig-Datei zu verstehen. Diese Datei speichert Informationen über Ihre Cluster, Benutzer und die Kontexte, die sie miteinander verbinden. kubectl verwendet diese Datei, um sich zu authentifizieren und festzulegen, mit welchem Cluster interagiert werden soll. Standardmäßig sucht kubectl nach der Kubeconfig-Datei unter $HOME/.kube/config.

In dieser Datei finden Sie drei Hauptabschnitte:

  • clusters: Definiert die Kubernetes-Cluster, einschließlich ihrer API-Server-Endpunkte und Zertifizierungsstellen.
  • users: Speichert Authentifizierungsdaten wie Client-Zertifikate und Tokens.
  • contexts: Verknüpft einen Cluster, einen Benutzer und optional einen Namespace. Ein Kontext bietet eine bequeme Möglichkeit, diese Konfigurationen zu gruppieren, sodass kubectl einfach zwischen verschiedenen Cluster-/Benutzerkombinationen wechseln kann.

Verwalten von Kontexten mit kubectl config

Kontexte sind die primäre Art und Weise, wie kubectl Ihre Verbindung zu verschiedenen Kubernetes-Clustern verwaltet. Sie fungieren als Abkürzungen, mit denen Sie mit einem einzigen Befehl zwischen ihnen wechseln können.

Verfügbare Kontexte anzeigen

Um alle Kontexte anzuzeigen, die in Ihrer aktuellen Kubeconfig-Datei verfügbar sind, verwenden Sie den folgenden Befehl:

kubectl config get-contexts

Dieser Befehl gibt eine Liste der Kontexte aus, zusammen mit dem Cluster, dem Benutzer und dem Namespace, die mit jedem verbunden sind. Der aktuell aktive Kontext wird mit einem Sternchen (*) markiert.

Beispielausgabe:

CURRENT   NAME                 CLUSTER              AUTHINFO       NAMESPACE
*         my-dev-context       my-dev-cluster       dev-user       default
          my-prod-context      my-prod-cluster      prod-user      production
          staging-context      staging-cluster      staging-user   staging

Aktuellen Kontext abrufen

Um schnell zu überprüfen, welchen Kontext Sie derzeit verwenden, führen Sie Folgendes aus:

kubectl config current-context

Dies gibt den Namen des aktiven Kontexts aus.

Kontexte wechseln

Das Wechseln zu einem anderen Kontext ist unkompliziert. Verwenden Sie den Unterbefehl use-context gefolgt vom Namen des Kontexts, den Sie aktivieren möchten:

kubectl config use-context <context-name>

Um beispielsweise zum my-prod-context aus dem obigen Beispiel zu wechseln:

kubectl config use-context my-prod-context

Nach Ausführung dieses Befehls werden nachfolgende kubectl-Befehle an den in my-prod-context angegebenen Cluster gerichtet.

Einen Kontext festlegen

Sie können auch einen bestimmten Kontext für einen Cluster und Benutzer festlegen, ohne ihn unbedingt zur Standardeinstellung für die zukünftige Verwendung zu machen. Dies ist nützlich für temporäre Operationen.

kubectl config set-context <context-name> --cluster=<cluster-name> --user=<user-name> --namespace=<namespace-name>

Wenn Sie --namespace weglassen, wird der Standard-Namespace des Clusters verwendet.

Verwalten von Clustern und Benutzern

Während Kontexte zum Wechseln verwendet werden, können Sie auch direkt die Cluster- und Benutzerkonfigurationen verwalten, auf die sich Kontexte beziehen.

Cluster-Informationen anzeigen

Um alle konfigurierten Cluster aufzulisten:

kubectl config get-clusters

Um Details eines bestimmten Clusters anzuzeigen:

kubectl config view --minify -o jsonpath='{.clusters[?(@.name=="<cluster-name>")].cluster}'

Ersetzen Sie <cluster-name> durch den tatsächlichen Namen Ihres Clusters.

Benutzerinformationen anzeigen

Um alle konfigurierten Benutzer aufzulisten:

kubectl config get-users

Konfigurationen hinzufügen und ändern

Sie können neue Cluster, Benutzer und Kontexte hinzufügen oder vorhandene ändern:

  • Neuen Cluster hinzufügen:
    kubectl config set-cluster <cluster-name> --server=<api-server-url> --certificate-authority=<path-to-ca-file> --embed-certs=true
    
  • Neuen Benutzer hinzufügen:
    kubectl config set-credentials <user-name> --client-certificate=<path-to-cert-file> --client-key=<path-to-key-file> --embed-certs=true
    
  • Neuen Kontext hinzufügen:
    kubectl config set-context <context-name> --cluster=<cluster-name> --user=<user-name> --namespace=<namespace-name>
    

Verwalten mehrerer Kubeconfig-Dateien

Für verbesserte Sicherheit und Organisation, insbesondere beim Umgang mit vielen Clustern oder sensiblen Anmeldeinformationen, ist es eine gute Praxis, Ihre Kubeconfig-Dateien getrennt zu halten. kubectl kann mehrere Kubeconfig-Dateien mit der Umgebungsvariable KUBECONFIG oder dem Flag --kubeconfig verwalten.

Verwenden der Umgebungsvariable KUBECONFIG

Sie können eine Liste von Kubeconfig-Dateien angeben, die geladen werden sollen. kubectl führt diese Dateien zusammen. Wenn derselbe benannte Cluster, Benutzer oder Kontext in mehr als einer Datei vorkommt, hängt die Zusammenführungspriorität von der Reihenfolge der Dateien in KUBECONFIG ab. Verwenden Sie daher eindeutige Namen, um Überraschungen zu vermeiden.

Um diese Variable für Ihre aktuelle Shell-Sitzung festzulegen:

export KUBECONFIG=~/.kube/config:~/.kube/config-dev:~/.kube/config-prod

Um dies dauerhaft zu machen, fügen Sie die export-Zeile zur Profildatei Ihrer Shell hinzu (z. B. ~/.bashrc, ~/.zshrc).

Verwenden des Flags --kubeconfig

Alternativ können Sie eine bestimmte Kubeconfig-Datei für einen einzelnen kubectl-Befehl angeben:

kubectl --kubeconfig=~/.kube/config-dev get pods

Dies ist nützlich für einmalige Befehle oder wenn Sie absolut sicher sein möchten, welche Datei verwendet wird.

Best Practices für die Multi-Cluster-Verwaltung

  • Separate Dateien verwenden: Speichern Sie Konfigurationen für verschiedene Umgebungen (Dev, Staging, Prod) oder Cloud-Anbieter in separaten Kubeconfig-Dateien (z. B. config-dev, config-staging, config-prod).
  • KUBECONFIG nutzen: Setzen Sie die Umgebungsvariable KUBECONFIG in Ihrem Shell-Profil, um mehrere Dateien einfach zusammenzuführen und zu verwalten, ohne manuelles Zusammenführen.
  • Beschreibende Kontextnamen: Verwenden Sie klare und beschreibende Namen für Ihre Kontexte (z. B. aws-prod-us-east-1, gke-dev-eu-west-2), um Verwirrung zu vermeiden.
  • Namespace-Bewusstsein: Achten Sie stets auf den Namespace, in dem Sie arbeiten. Verwenden Sie das Flag --namespace oder legen Sie es in Ihrem Kontext fest, um den richtigen Namespace anzusprechen.
  • Regelmäßig prüfen: Überprüfen Sie regelmäßig Ihre Kontexte und Cluster-Konfigurationen, um sicherzustellen, dass sie aktuell und sicher sind.
  • Kubeconfig sichern: Behandeln Sie Ihre Kubeconfig-Dateien als sensible Anmeldeinformationen. Schränken Sie Dateiberechtigungen ein und vermeiden Sie es, sie in die Versionskontrolle zu übernehmen.

Abschließende Erkenntnis

Machen Sie Kontextprüfungen zu einem Teil Ihres Workflows. Führen Sie kubectl config current-context vor riskanten Befehlen aus, verwenden Sie beschreibende Kontextnamen, legen Sie Namespaces bewusst fest und halten Sie Produktionsanmeldeinformationen aus beiläufigen Shell-Sitzungen fern, wenn Sie sie nicht benötigen.