11 kubectl

Kubectl cheatsheet

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.

11.1 Grundlegende Funktionen

11.2 Integration mit Manifesten

Kubernetes Objects

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.

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.yaml

Diese 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.

11.2.1 Kubernetes Pod Management mit kubectl

11.2.1.1 Befehlsübersicht

Die 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:

Diese 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.

11.2.2 Kubernetes Kubeconfig und Context Verwaltung

11.2.2.1 KUBECONFIG Variable

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.

11.2.2.2 Anzeigen der effektiven Konfiguration

Der Befehl kubectl config view zeigt die effektive, zusammengeführte Konfiguration an.

kubectl config view

11.2.2.3 Wechseln des Contexts

Um den Context zu wechseln, verwenden Sie den Befehl

kubectl config use-context NAME_DES_CONTEXT

11.2.2.4 Anzeigen der verfügbaren Kontexte

Der Befehl kubectl config get-contexts listet alle verfügbaren Kontexte auf.

kubectl config get-contexts

11.2.2.5 Anzeigen des aktuellen Contexts

Mit kubectl config current-context können Sie den derzeit aktiven Context anzeigen.

kubectl config current-context

11.2.2.6 Zusätzliche Hinweise

Diese Befehle und Optionen bieten eine mächtige Möglichkeit zur Verwaltung verschiedener Kubernetes Cluster und zur Konfiguration der kubectl CLI-Werkzeuge.

11.2.3 pod erzeugen

kubectl run nginx --image=nginx --restart=Never
kubectl get pod nginx                          

NAME    READY   STATUS    RESTARTS   AGE
nginx   1/1     Running   0          25h

11.2.4 Enter pod

kubectl exec -it nginx -- /bin/bash

11.2.5 Install tools inside pod

apt update
apt install psmisc psutils

11.2.6 See processes

pstree -p

nginx(1)-+-nginx(29)
         |-nginx(30)
         |-nginx(31)
         |-nginx(32)
         |-nginx(33)
         `-nginx(34)

11.3 POD Manifest

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: 80

11.3.1 Erklärung

11.4 Manifest per cli erzeugen

kubectl run –dry-run option

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.

11.5 Clientseitiger dry-run

kubectl run nginx-pod --image=nginx --port=8080 --dry-run=client -o yaml
apiVersion: 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: {}

11.6 Cluster seitiger dry-run

run nginx-pod --image=nginx --port=8080 --dry-run=server -o yaml
apiVersion: 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