kubeadm - CLI-Tool zur einfachen Bereitstellung eines sicheren Kubernetes-Clusters.
kubefed - CLI-Tool zur Verwaltung Ihres Clusterverbunds.
Konfigurationsreferenz
kubelet - Der primäre Node-Agent, der auf jedem Node ausgeführt wird. Das Kubelet betrachtet eine Reihe von PodSpecs und stellt sicher, dass die beschriebenen Container ordnungsgemäß ausgeführt werden.
kube-apiserver - REST-API zur Überprüfung und Konfiguration von Daten für API-Objekte wie Pods, Services und Replikationscontroller.
kube-controller-manager - Daemon, der die mit Kubernetes gelieferten zentralen Regelkreise einbettet.
kube-proxy - Kann einfache TCP/UDP-Stream-Weiterleitung oder Round-Robin-TCP/UDP-Weiterleitung über eine Reihe von Back-Ends durchführen.
kube-scheduler - Scheduler, der Verfügbarkeit, Leistung und Kapazität verwaltet.
Diese Seite ist eine Übersicht über den Befehl kubectl.
kubectl - Spickzettel
Kubectl Autovervollständigung
BASH
source <(kubectl completion bash)# Wenn Sie autocomplete in bash in der aktuellen Shell einrichten, sollte zuerst das bash-completion-Paket installiert werden.echo"source <(kubectl completion bash)" >> ~/.bashrc # Fügen Sie der Bash-Shell dauerhaft Autocomplete hinzu.
Sie können auch ein Abkürzungsalias für kubectl verwenden, welches auch mit Vervollständigung funktioniert:
aliask=kubectl
complete -F __start_kubectl k
ZSH
source <(kubectl completion zsh)# Richten Sie Autocomplete in zsh in der aktuellen Shell einecho"if [ $commands[kubectl] ]; then source <(kubectl completion zsh); fi" >> ~/.zshrc # Fügen Sie der Zsh-Shell dauerhaft Autocomplete hinzu
Kubectl Kontext und Konfiguration
Legen Sie fest, welcher Kubernetes-Cluster mit kubectl kommuniziert und dessen Konfiguration ändert. Lesen Sie die Dokumentation Authentifizierung mit kubeconfig über mehrere Cluster hinweg für ausführliche Informationen zur Konfigurationsdatei.
kubectl config view # Zusammengeführte kubeconfig-Einstellungen anzeigen.# Verwenden Sie mehrere kubeconfig-Dateien gleichzeitig und zeigen Sie die zusammengeführte Konfiguration anKUBECONFIG=~/.kube/config:~/.kube/kubconfig2 kubectl config view
# Zeigen Sie das Passwort für den e2e-Benutzer ankubectl config view -o jsonpath='{.users[?(@.name == "e2e")].user.password}'kubectl config view -o jsonpath='{.users[].name}'# den ersten Benutzer anzeigenkubectl config view -o jsonpath='{.users[*].name}'# eine Liste der Benutzer erhaltenkubectl config current-context # den aktuellen Kontext anzeigenkubectl config use-context my-cluster-name # Setzen Sie den Standardkontext auf my-cluster-name# Fügen Sie Ihrer kubeconf einen neuen Cluster hinzu, der basic auth unterstütztkubectl config set-credentials kubeuser/foo.kubernetes.com --username=kubeuser --password=kubepassword
# Legen Sie einen Kontext fest, indem Sie einen bestimmten Benutzernamen und einen bestimmten Namespace verwenden.kubectl config set-context gce --user=cluster-admin --namespace=foo \
&& kubectl config use-context gce
kubectl config unset users.foo # delete user foo
Apply
apply verwaltet Anwendungen durch Dateien, die Kubernetes-Ressourcen definieren. Es erstellt und aktualisiert Ressourcen in einem Cluster durch Ausführen von kubectl apply. Dies ist die empfohlene Methode zur Verwaltung von Kubernetes-Anwendungen in der Produktion. Lesen Sie die ausführliche Kubectl Dokumentation für weitere Informationen.
Objekte erstellen
Kubernetes Manifeste können in Json oder Yaml definiert werden. Die Dateierweiterungen .yaml,
.yml, und .json können verwendet werden.
kubectl apply -f ./my-manifest.yaml # Ressource(n) erstellenkubectl apply -f ./my1.yaml -f ./my2.yaml # aus mehreren Dateien erstellenkubectl apply -f ./dir # Erstellen Sie Ressourcen in allen Manifestdateien in Verzeichniskubectl apply -f https://git.io/vPieo # Ressource(n) aus URL erstellenkubectl create deployment nginx --image=nginx # Starten Sie eine einzelne Instanz von Nginxkubectl explain pods,svc # Zeigen Sie die Dokumentation für Pod und SVC Manifeste an# Erstellen Sie mehrere YAML-Objekte aus stdincat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000000"
---
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep-less
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000"
EOF# Erstellen Sie ein "Secret" mit mehreren Schlüsselncat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
password: $(echo -n "s33msi4" | base64 -w0)
username: $(echo -n "jane" | base64 -w0)
EOF
Suchen und Anzeigen von Ressourcen
# Get Befehle mit grundlegenden Ausgabenkubectl get services # Listen Sie alle Dienste im Namespace aufkubectl get pods --all-namespaces # Listen Sie alle Pods in allen Namespaces aufkubectl get pods -o wide # Listen Sie alle Pods im Namespace mit weiteren Details aufkubectl get deployment my-dep # Listen Sie eine bestimmte Bereitstellung aufkubectl get pods # Listen Sie alle Pods im Namespace auf# Describe Befehle mit ausführlicher Ausgabekubectl describe nodes my-node
kubectl describe pods my-pod
kubectl get services --sort-by=.metadata.name # Listen Sie Dienste nach Namen sortiert auf# Listen Sie Pods Sortiert nach Restart Count aufkubectl get pods --sort-by='.status.containerStatuses[0].restartCount'# Erhalten Sie die Versionsbezeichnung aller Pods mit der Bezeichnung app=cassandrakubectl get pods --selector=app=cassandra -o \
jsonpath='{.items[*].metadata.labels.version}'# Alle Worker-Knoten abrufen (verwenden Sie einen Selektor, um Ergebnisse auszuschließen,# die ein Label mit dem Namen 'node-role.kubernetes.io/master' tragen).kubectl get node --selector='!node-role.kubernetes.io/master'# Zeigen Sie alle laufenden Pods im Namespace ankubectl get pods --field-selector=status.phase=Running
# Rufen Sie die externe IP aller Nodes abkubectl get nodes -o jsonpath='{.items[*].status.addresses[?(@.type=="ExternalIP")].address}'# Listet die Namen der Pods auf, die zu einem bestimmten RC gehören# Der Befehl "jq" ist nützlich für Transformationen, die für jsonpath zu komplex sind. Sie finden ihn unter https://stedolan.github.io/jq/sel=${$(kubectl get rc my-rc --output=json | jq -j '.spec.selector | to_entries | .[] | "\(.key)=\(.value),"')%?}echo$(kubectl get pods --selector=$sel --output=jsonpath={.items..metadata.name})# Labels für alle Pods anzeigen (oder jedes andere Kubernetes-Objekt, das labelling unterstützt)# Verwendet auch "jq"for item in $( kubectl get pod --output=name); doprintf"Labels for %s\n""$item" | grep --color -E '[^/]+$'&& kubectl get "$item" --output=json | jq -r -S '.metadata.labels | to_entries | .[] | " \(.key)=\(.value)"' 2>/dev/null; printf"\n"; done# Prüfen Sie, welche Nodes bereit sindJSONPATH='{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}'\
&& kubectl get nodes -o jsonpath="$JSONPATH" | grep "Ready=True"# Listen Sie alle Secrets auf, die derzeit von einem Pod verwendet werdenkubectl get pods -o json | jq '.items[].spec.containers[].env[]?.valueFrom.secretKeyRef.name' | grep -v null | sort | uniq
# Ereignisse nach Zeitstempel sortiert auflistenkubectl get events --sort-by=.metadata.creationTimestamp
Ressourcen aktualisieren
Ab Version 1.11 ist das rolling-update veraltet (Lesen Sie CHANGELOG-1.11.md für weitere Informationen), verwenden Sie stattdessen rollout.
kubectl set image deployment/frontend www=image:v2 # Fortlaufende Aktualisierung der "www" Container der "Frontend"-Bereitstellung, Aktualisierung des Imageskubectl rollout undo deployment/frontend # Rollback zur vorherigen Bereitstellungkubectl rollout status -w deployment/frontend # Beobachten Sie den fortlaufenden Aktualisierungsstatus der "Frontend"-Bereitstellung bis zum Abschluss.# veraltet ab Version 1.11kubectl rolling-update frontend-v1 -f frontend-v2.json # (veraltet) Fortlaufendes Update der Pods von Frontend-v1kubectl rolling-update frontend-v1 frontend-v2 --image=image:v2 # (veraltet) Ändern Sie den Namen der Ressource und aktualisieren Sie das Imagekubectl rolling-update frontend --image=image:v2 # (veraltet) Aktualisieren Sie das Pod-Image des Frontendskubectl rolling-update frontend-v1 frontend-v2 --rollback # (veraltet) Bricht das laufende Rollout abcat pod.json | kubectl replace -f - # Ersetzen Sie einen Pod basierend auf der in std übergebenen JSON# Ersetzen, löschen und Ressource neu erstellen. Dies führt zu einer temprären Unerreichbarkeit des Dienstes.kubectl replace --force -f ./pod.json
# Erstellen Sie einen Dienst für eien replizierten nginx Webserver, der an Port 80 und in den Containern an Port 8000 lauschtkubectl expose rc nginx --port=80 --target-port=8000# Aktualisieren Sie die Image-Version (Tag) eines Einzelcontainer-Pods auf Version 4kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -
kubectl label pods my-pod new-label=awesome # Label hinzufügenkubectl annotate pods my-pod icon-url=http://goo.gl/XXBTWq # Eine Anmerkung hinzufügenkubectl autoscale deployment foo --min=2 --max=10# Automatische Skalierung einer Bereitstellung "Foo"
Ressourcen patchen
kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'# Aktualisieren Sie einen Node teilweise# Aktualisieren Sie das Image eines Containers; spec.containers[*].name ist erforderlich, da es sich um einen Merge-Schlüssel handeltkubectl patch pod valid-pod -p '{"spec":{"containers":[{"name":"kubernetes-serve-hostname","image":"new image"}]}}'# Aktualisieren Sie das Image eines Containers mithilfe eines Json-Patches mit Positionsarrayskubectl patch pod valid-pod --type='json' -p='[{"op": "replace", "path": "/spec/containers/0/image", "value":"new image"}]'# Deaktivieren Sie eine Bereitstellung von livenessProbe durch verwenden eines Json-Patches mit Positionsarrayskubectl patch deployment valid-deployment --type json -p='[{"op": "remove", "path": "/spec/template/spec/containers/0/livenessProbe"}]'# Fügen Sie einem Positionsarray ein neues Element hinzukubectl patch sa default --type='json' -p='[{"op": "add", "path": "/secrets/1", "value": {"name": "whatever" } }]'
Ressourcen bearbeiten
Bearbeiten Sie eine beliebige API-Ressource in einem Editor.
kubectl edit svc/docker-registry # Bearbeiten Sie den Dienst docker-registryKUBE_EDITOR="nano" kubectl edit svc/docker-registry # Verwenden Sie einen alternativen Texteditor
Ressourcen skalieren
kubectl scale --replicas=3 rs/foo # Skaliert ein Replikat mit dem Namen 'foo' auf 3kubectl scale --replicas=3 -f foo.yaml # Skaliert eine in "foo.yaml" angegebene Ressource auf 3kubectl scale --current-replicas=2 --replicas=3 deployment/mysql # Wenn die aktuelle Konfiguration der Replikation von mysql 2 ist, skaliert mysql auf 3kubectl scale --replicas=5 rc/foo rc/bar rc/baz # Skaliert mehrere Replikationscontroller
Ressourcen löschen
kubectl delete -f ./pod.json # Löscht einen Pod mit dem in pod.json angegebenen Typ und Namenkubectl delete pod,service baz foo # Löscht Pods und Services mit den gleichen Namen "baz" und "foo"kubectl delete pods,services -l name=myLabel # Löscht Pods und Services mit dem Label name=myLabelkubectl -n my-ns delete po,svc --all # Löscht alle Pods und Dienste, im Namespace my-ns
Interaktion mit laufenden Pods
kubectl logs my-pod # Pod-Logdatei ausgeben (stdout)kubectl logs my-pod --previous # Pod-Logdatei für eine vorherige Instantiierung eines Containers ausgeben (stdout)kubectl logs my-pod -c my-container # Pod Container-Logdatei ausgeben (stdout, multi-container case)kubectl logs my-pod -c my-container --previous # Pod Container-Logdatei für eine vorherige Instantiierung eines Containers ausgeben (stdout, multi-container case)kubectl logs -f my-pod # Pod-Logdatei streamen (stdout)kubectl logs -f my-pod -c my-container # Pod Container-Logdatei streamen (stdout, multi-container case)kubectl run -i --tty busybox --image=busybox -- sh # Pod als interaktive Shell ausführenkubectl attach my-pod -i # An laufenden Container anhängenkubectl port-forward my-pod 5000:6000 # Lauscht auf Port 5000 auf dem lokalen Computer und leitet den Port 6000 auf my-pod weiterkubectl exec my-pod -- ls / # Befehl in vorhandenem Pod ausführen (1 Container)kubectl exec my-pod -c my-container -- ls / # Befehl in vorhandenem Pod ausführen (Mehrere Container)kubectl top pod POD_NAME --containers # Zeigt Metriken für einen bestimmten Pod und seine Container an
Mit Nodes und Clustern interagieren
kubectl cordon my-node # Markiert "my-node" als unplanbarkubectl drain my-node # Entleert "my-node" zur Vorbereitung der Wartungkubectl uncordon my-node # Markiert "my-node" als planbarkubectl top node my-node # Metriken für einen bestimmten Node anzeigenkubectl cluster-info # Adressen des Masters und der Services anzeigenkubectl cluster-info dump # Ausgabe des aktuellen Clusterstatus in stdoutkubectl cluster-info dump --output-directory=/pfad/zum/cluster-status # Aktuellen Cluster-Status in /pfad/zum/cluster-status ausgeben# Wenn bereits ein Taint mit diesem Key und Effekt vorhanden ist, wird sein Wert wie angegeben ersetzt.kubectl taint nodes foo dedicated=special-user:NoSchedule
Ressourcentypen
Liste aller unterstützten Ressourcentypen mit ihren Kurzbezeichnungen, der API-Gruppe, unabhängig davon ob sie im Namespace liegen, und der Art:
kubectl api-resources
Andere Operationen zum Erkunden von API-Ressourcen:
kubectl api-resources --namespaced=true# Alle Ressourcen im Namespacekubectl api-resources --namespaced=false# Alle nicht im Namespace befindlichen Ressourcenkubectl api-resources -o name # Alle Ressourcen mit einfacher Ausgabe (nur der Ressourcenname)kubectl api-resources -o wide # Alle Ressourcen mit erweiterter Ausgabe (aka "Wide")kubectl api-resources --verbs=list,get # Alle Ressourcen, die "list" und "get" Verben unterstützen anfordernkubectl api-resources --api-group=extensions # Alle Ressourcen in der API-Gruppe "extensions"
Ausgabe formatieren
Um Details in einem bestimmten Format an Ihr Terminalfenster auszugeben, können Sie entweder das -o oder --output Flag zu einem unterstützten kubectl Befehl anhängens.
Ausgabeformat
Beschreibung
-o=custom-columns=<spec>
Ausgabe einer Tabelle mit einer durch Kommas getrennten Liste benutzerdefinierter Spalten
-o=custom-columns-file=<dateiname>
Drucken Sie eine Tabelle mit der benutzerdefinierten Spaltenvorlage in der <dateiname> Datei
-o=json
Ausgabe eines JSON-formatierten API-Objekts
-o=jsonpath=<template>
Ausgabe der in einem jsonpath-Ausdruck definierten Felder
-o=jsonpath-file=<dateiname>
Ausgabe der in einem jsonpath-Ausdruck definierten Felder in der <dateiname> Datei
-o=name
Ausgabe von nur dem Ressourcennamen und nichts anderes
-o=wide
Ausgabe im Klartextformat mit zusätzlichen Informationen. Bei Pods ist der Node-Name enthalten
-o=yaml
Gibt ein YAML-formatiertes API-Objekt aus
Kubectl Ausgabe Ausführlichkeit und Debugging
Die Ausführlichkeit von Kubectl wird mit den Flags -v oder --v gesteuert, gefolgt von einer Ganzzahl, die die Protokollebene darstellt. Allgemeine Protokollierungskonventionen für Kubernetes und die zugehörigen Protokollebenen werden hier beschrieben.
Ausführlichkeit
Beschreibung
--v=0
Allgemein nützlich, damit dies für den Bediener IMMER sichtbar ist.
--v=1
Eine vernünftige Standardprotokollebene, wenn Sie keine Ausführlichkeit wünschen.
--v=2
Nützliche Informationen zum stabilen Status des Dienstes und wichtige Protokollnachrichten, die möglicherweise zu erheblichen Änderungen im System führen. Dies ist die empfohlene Standardprotokollebene für die meisten Systeme.
--v=3
Erweiterte Informationen zu Änderungen.
--v=4
Debug-Level-Ausführlichkeit.
--v=6
Angeforderte Ressourcen anzeigen
--v=7
HTTP-Anforderungsheader anzeigen
--v=8
HTTP-Anforderungsinhalt anzeigen
--v=9
HTTP-Anforderungsinhalt anzeigen, ohne den Inhalt zu kürzen.
Kubernetes enthält mehrere integrierte Tools, die Ihnen bei der Arbeit mit dem Kubernetes System helfen.
Kubectl
kubectl ist ein Kommandozeilenprogramm für Kubernetes. Es steuert den Kubernetes Clustermanager.
Kubeadm
kubeadm ist ein Kommandozeilenprogramm zur einfachen Bereitstellung eines sicheren Kubernetes-Clusters auf physischen oder Cloud-Servern oder virtuellen Maschinen (derzeit in alpha).
Kubefed
kubefed ist ein Kommandozeilenprogramm um Ihnen bei der Verwaltung Ihrer Verbundcluster zu helfen.
Minikube
minikube ist ein Tool, das es Ihnen einfach macht, einen Kubernetes-Cluster mit einem einzigen Knoten lokal auf Ihrer Workstation für Entwicklungs- und Testzwecke auszuführen.
Dashboard
Dashboard, die webbasierte Benutzeroberfläche von Kubernetes ermöglicht es Ihnen containerisierte Anwendungen in einem Kubernetes-Cluster bereitzustellen Fehler zu beheben und den Cluster und seine Ressourcen selbst zu verwalten.
Helm
Kubernetes Helm ist ein Tool zur Verwaltung von Paketen mit vorkonfigurierten Kubernetes-Ressourcen, auch bekannt als Kubernetes charts.
Verwenden Sie Helm um:
Beliebte Software verpackt als Kubernetes charts zu finden und zu verwenden
Ihre eigenen Applikationen als Kubernetes charts zu teilen
Reproduzierbare Builds Ihrer Kubernetes Anwendungen zu erstellen
Intelligenten Verwaltung von Ihren Kubernetes manifest files
Verwalten von Versionen von Helm Paketen
Kompose
Kompose ist ein Tool, das Docker Compose Benutzern hilft, nach Kubernetes zu wechseln.
Verwenden Sie Kompose um:
Ein Docker Compose Datei in Kubernetes Objekte zu übersetzen
Von Ihrer lokalen Docker Entwicklung auf eine Kubernetes verwaltete Entwicklung zu wechseln