kubectl ist die Kommandozeilenschnittstelle (CLI) für
die Interaktion mit einem Kubernetes-Cluster. Mit kubectl
können Benutzer Befehle ausführen, um Kubernetes-Objekte zu erzeugen, zu
modifizieren, anzuzeigen und zu löschen.

kubectl kann
zum Erstellen von Objekten wie Pods, Services und Deployments verwendet
werden.kubectl modifiziert werden, beispielsweise um
die Anzahl der Repliken eines Deployments zu ändern.kubectl
ermöglicht es Benutzern, Objekte im Cluster zu löschen.kubectl verwenden, um Informationen über
den Zustand des Clusters, die vorhandenen Objekte und ihre
Konfigurationen anzuzeigen.kubectl
bietet verschiedene Befehle und Optionen zum Untersuchen und Beheben von
Problemen im Cluster.kubectl apply ermöglicht das Erstellen und Aktualisieren
von Ressourcen in einem Kubernetes-Cluster und nutzt einen
Merge-Algorithmus für idempotente Operationen. Im Gegensatz dazu dient
kubectl create ausschließlich dem Erstellen neuer
Ressourcen und ist nicht idempotent. kubectl delete
entfernt Ressourcen, die entweder in einer Manifest-Datei definiert oder
direkt über die Kommandozeile angegeben sind.
kubectl apply: Dieser Befehl führt einen
dreistufigen Merge durch und berücksichtigt den aktuellen Zustand, die
vorherige Konfiguration und die neue Konfiguration, um den gewünschten
Zustand zu erreichen. apply kann wiederholt mit derselben
Konfigurationsdatei verwendet werden, ohne unerwünschte Effekte zu
erzeugen.
kubectl create: Dieser Befehl erstellt Ressourcen basierend auf einer Manifest-Datei. Wird versucht, eine bereits bestehende Ressource erneut zu erstellen, resultiert dies in einem Fehler.
kubectl delete: Mit diesem Befehl lassen sich Ressourcen anhand ihrer Manifest-Datei oder mittels direkter Angabe entfernen.
Beispiele für die Verwendung dieser Befehle sind:
# Aktualisiert oder erstellt den Service
kubectl apply -f mein-service.yaml
# Erstellt den Pod
kubectl create -f mein-pod.yaml
# Entfernt das Deployment
kubectl delete -f mein-deployment.yamlDiese Befehle nehmen den Pfad zu den Manifest-Dateien an, führen die darin definierten Aktionen aus und ermöglichen eine deklarative Verwaltung der Cluster-Konfiguration.
kubectlDie Verwaltung von Pods in einem Kubernetes-Cluster wird häufig durch
das Kommandozeilen-Tool kubectl durchgeführt. Hier sind
einige häufige kubectl-Befehle für Pod-Management-Aufgaben
zusammen mit Beispielen:
Kommando:
kubectl apply -f pod.yamlBeispiel:
Erstellen Sie eine Datei namens pod.yaml mit dem
folgenden Inhalt:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: nginxFühren Sie den Befehl aus:
kubectl apply -f pod.yamlKommando:
kubectl get podsBeispiel:
Um alle Pods im aktuellen Namespace aufzulisten, führen Sie aus:
kubectl get podsKommando:
kubectl describe pod <pod-name>Beispiel:
Um Details zu einem Pod namens mypod zu
erhalten:
kubectl describe pod mypodKommando:
kubectl delete pod <pod-name>Beispiel:
Um einen Pod namens mypod zu löschen:
kubectl delete pod mypodKommando:
kubectl logs <pod-name>Beispiel:
Um die Logs für einen Pod namens mypod
anzuzeigen:
kubectl logs mypodKommando:
kubectl get pods --namespace=<namespace-name>Beispiel:
Um alle Pods im Namespace development
aufzulisten:
kubectl get pods --namespace=developmentKommando:
kubectl exec -it <pod-name> -- /bin/shBeispiel:
Um eine interaktive Shell-Sitzung in einem Pod namens
mypod zu starten:
kubectl exec -it mypod -- /bin/shKommando:
kubectl label pods <pod-name> key=valueBeispiel:
Um einem Pod namens mypod ein Label
environment=production hinzuzufügen:
kubectl label pods mypod environment=productionDiese Befehle bieten eine Grundlage für das Management von Pods in
einem Kubernetes-Cluster mit kubectl. Die
kubectl-Dokumentation und die Hilfeoption
kubectl --help bieten weitere Informationen und Beispiele
für die Verwendung von kubectl zur Verwaltung von Pods und
anderen Ressourcen in Kubernetes.
Die KUBECONFIG Umgebungsvariable kann den Pfad zu einer
oder mehreren kubeconfig Dateien enthalten. Mehrere Pfade
werden durch Doppelpunkt (:) getrennt. Die Konfigurationen
werden in der angegebenen Reihenfolge gelesen und zusammengeführt.
Der Befehl kubectl config view zeigt die effektive,
zusammengeführte Konfiguration an.
kubectl config viewUm den Context zu wechseln, verwenden Sie den Befehl
kubectl config use-context NAME_DES_CONTEXTDer Befehl kubectl config get-contexts listet alle
verfügbaren Kontexte auf.
kubectl config get-contextsMit kubectl config current-context können Sie den
derzeit aktiven Context anzeigen.
kubectl config current-contextkubectl config set-context NAME_DES_CONTEXT --cluster=CLUSTER_NAME --user=USER_NAME --namespace=NAMESPACE
verwendet werden.kubectl config delete-context NAME_DES_CONTEXT.kubectl config set genutzt werden.Diese Befehle und Optionen bieten eine mächtige Möglichkeit zur
Verwaltung verschiedener Kubernetes Cluster und zur Konfiguration der
kubectl CLI-Werkzeuge.
kubectl run nginx --image=nginx --restart=Neverkubectl get pod nginx
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 25hkubectl exec -it nginx -- /bin/bashapt update
apt install psmisc psutilspstree -p
nginx(1)-+-nginx(29)
|-nginx(30)
|-nginx(31)
|-nginx(32)
|-nginx(33)
`-nginx(34)Die Konfiguration eines Pods in Kubernetes wird durch ein Manifest in Form einer YAML-Datei dargestellt. Dieses Manifest definiert nicht nur die grundlegenden Eigenschaften wie den Namen und das Image des Pods, sondern auch detaillierte Spezifikationen und Verhaltensweisen der enthaltenen Container
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx-container
image: nginx:latest
ports:
- containerPort: 80apiVersion:
apiGroup: Gruppe der API, zu der das Objekt gehört. In
diesem Fall ist es die Kerngruppe, also wird es nicht angegeben.version: Die Version der API innerhalb der Gruppe, in
diesem Fall v1.kind:
Pod.metadata:
name: Der Name des Pods, nginx-pod.labels:
app: nginx ist ein Label, das diesem Pod zugewiesen
ist.spec:
containers:
name: Der Name des Containers,
nginx-container.image: Das Docker-Image, das für den Container
verwendet werden soll, nginx:latest.ports:
containerPort: Der Port, auf dem der Container lauscht,
80.kubectl run –dry-run option
client: Dies ist die Standardoption und führt eine
Überprüfung auf der Client-Seite durch, ohne Änderungen am Cluster
vorzunehmen. Sie erhalten das erzeugte YAML, ohne dass die Objekte im
Cluster erstellt oder aktualisiert werden.
server: Mit dieser Option wird eine Überprüfung auf
der Server-Seite durchgeführt, indem die Anfrage an den
Kubernetes-API-Server gesendet wird, aber keine Änderungen am Cluster
vorgenommen werden. Sie erhalten ebenfalls das erzeugte YAML
zurück.
none: Wenn Sie --dry-run=none verwenden
(default), wird keine “Trockenlauf” Überprüfung durchgeführt, und die
Änderungen werden direkt am Cluster vorgenommen.
Diese verschiedenen Modi bieten Flexibilität bei der Verwendung von
kubectl und ermöglichen es Ihnen, je nach Bedarf eine
Trockenlaufüberprüfung auf Client- oder Server-Seite durchzuführen oder
direkt Änderungen am Cluster vorzunehmen.
kubectl run nginx-pod --image=nginx --port=8080 --dry-run=client -o yamlapiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx-pod
name: nginx-pod
spec:
containers:
- image: nginx
name: nginx-pod
ports:
- containerPort: 8080
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}run nginx-pod --image=nginx --port=8080 --dry-run=server -o yamlapiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2023-10-30T10:06:32Z"
labels:
run: nginx-pod
name: nginx-pod
namespace: default
uid: aae8ce68-ff5b-411b-9881-dda7013cbc41
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx-pod
ports:
- containerPort: 8080
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: kube-api-access-wqdqx
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
preemptionPolicy: PreemptLowerPriority
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
volumes:
- name: kube-api-access-wqdqx
projected:
defaultMode: 420
sources:
- serviceAccountToken:
expirationSeconds: 3607
path: token
- configMap:
items:
- key: ca.crt
path: ca.crt
name: kube-root-ca.crt
- downwardAPI:
items:
- fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
path: namespace
status:
phase: Pending
qosClass: BestEffort