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, sodasskubectleinfach 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). KUBECONFIGnutzen: Setzen Sie die UmgebungsvariableKUBECONFIGin 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
--namespaceoder 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.