Files
work/notes/nextcloud/Notes/IT-Know-How/web und cloud gedöns/kubectl.md
T

6.0 KiB
Executable File
Raw Blame History

Hier ist eine kompakte, praxisorientierte Anleitung zu kubectl mit den wichtigsten Funktionen und Use Cases.


1. Was ist kubectl?

kubectl ist das Kommandozeilen-Tool, um mit einem Kubernetes-Cluster zu kommunizieren.
Damit kannst du:

  • Ressourcen erstellen, ändern und löschen (Deployments, Pods, Services, …)
  • Logs einsehen und Probleme debuggen
  • Rollouts steuern (Deployments updaten/rollback)
  • Konfigurationen verwalten (Kontexte, Namespaces, Kubeconfig)

2. Grundlagen: Aufbau von kubectl-Befehlen

Allgemeines Schema:

kubectl <verb> <ressource> [name] [flags]

Beispiele:

kubectl get pods
kubectl describe pod mein-pod
kubectl delete service mein-service

Wichtige Verben:

  • get Anzeigen
  • describe Detailinformationen
  • create / apply Ressourcen anlegen/aktualisieren
  • delete Löschen
  • logs Logs anzeigen
  • exec Befehle innerhalb eines Pods ausführen

3. Konfiguration & Kontexte

3.1 Cluster-Zugriff prüfen

kubectl version
kubectl cluster-info

3.2 Aktuellen Kontext anzeigen und wechseln

kubectl config get-contexts
kubectl config current-context
kubectl config use-context mein-context

3.3 Namespace festlegen

Temporär per Flag:

kubectl get pods -n my-namespace

Standard-Namespace setzen:

kubectl config set-context --current --namespace=my-namespace

4. Ressourcen anzeigen und inspizieren

4.1 Ressourcen auflisten

kubectl get pods
kubectl get deployments
kubectl get services
kubectl get all

Mit mehr Details:

kubectl get pods -o wide
kubectl get pods -o yaml

4.2 Detailinformationen zu einer Ressource

kubectl describe pod mein-pod
kubectl describe deployment mein-deployment

Use Case: Debugging (Events, Container-Status, Restart-Gründe).


5. Deployments & Anwendungen verwalten

5.1 Deployment aus YAML erstellen

deployment.yaml Beispiel (stark vereinfacht):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.25
          ports:
            - containerPort: 80

Anwenden:

kubectl apply -f deployment.yaml

5.2 Deployment aktualisieren (Rolling Update)

Image ändern:

kubectl set image deployment/nginx-deployment nginx=nginx:1.26

Rollout-Status beobachten:

kubectl rollout status deployment/nginx-deployment

Rollback:

kubectl rollout undo deployment/nginx-deployment

5.3 Replica-Anzahl skalieren

kubectl scale deployment nginx-deployment --replicas=5

6. Services & Zugriff auf Anwendungen

6.1 Services anzeigen

kubectl get svc

Beispiel-Service:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: ClusterIP
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80

Anwenden:

kubectl apply -f service.yaml

6.2 Port-Forwarding (lokaler Zugriff)

kubectl port-forward svc/nginx-service 8080:80
# Aufruf im Browser: http://localhost:8080

7. Logs & Debugging

7.1 Logs eines Pods

kubectl logs mein-pod
kubectl logs mein-pod -c container-name
kubectl logs -f mein-pod   # -f = "follow"

7.2 Befehle im Container ausführen

kubectl exec -it mein-pod -- /bin/sh
# oder
kubectl exec -it mein-pod -- bash

Typischer Use Case: Debugging von laufenden Containern, z.B. Netzwerkprobleme, Dateisystem prüfen.

7.3 Problem-Analyse mit describe & Events

kubectl describe pod mein-pod
kubectl get events --sort-by=.metadata.creationTimestamp

8. Ressourcen ändern & löschen

8.1 Änderungen anwenden

Konfiguration in einer Datei ändern und dann:

kubectl apply -f deployment.yaml

Um tatsächliche Unterschiede zu sehen:

kubectl diff -f deployment.yaml

8.2 Ressourcen löschen

kubectl delete pod mein-pod
kubectl delete -f deployment.yaml
kubectl delete deployment nginx-deployment

9. Konfigurationen & Secrets

9.1 ConfigMaps

Erstellen aus einer Datei:

kubectl create configmap app-config --from-file=config.properties

Oder aus Literalwert:

kubectl create configmap app-config --from-literal=KEY=VALUE

ConfigMaps anzeigen:

kubectl get configmaps
kubectl describe configmap app-config

9.2 Secrets

kubectl create secret generic db-secret \
  --from-literal=username=user \
  --from-literal=password=geheim

Achtung: Standard-kubectl get secret -o yaml zeigt Base64-codierte, aber nicht verschlüsselte Daten.


10. Weitere nützliche Features

10.1 Autocomplete

Bash-Beispiel:

source <(kubectl completion bash)
echo 'source <(kubectl completion bash)' >> ~/.bashrc

10.2 Kustomize (ohne extra Tool, ab neueren kubectl-Versionen)

kubectl apply -k ./overlays/production

Struktur z.B.:

base/
  deployment.yaml
  kustomization.yaml
overlays/production/
  kustomization.yaml
  patches.yaml

11. Typische Praxis-Workflows

11.1 Neue Version deployen

git pull
kubectl apply -f k8s/
kubectl rollout status deployment mein-service
kubectl get pods -o wide

11.2 Fehlerhafte Anwendung debuggen

kubectl get pods
kubectl describe pod fehler-pod
kubectl logs fehler-pod
kubectl exec -it fehler-pod -- sh
kubectl get events --sort-by=.metadata.creationTimestamp

11.3 Schnell in einen anderen Namespace/Cluster wechseln

kubectl config use-context staging-cluster
kubectl config set-context --current --namespace=team-a
kubectl get pods

Wenn du möchtest, kann ich dir für deinen konkreten Use Case (z.B. “Web-App deployen”, “CI/CD-Pipeline”, “lokales Minikube-Cluster”) eine konkrete Schritt-für-Schritt-Anleitung mit fertigen kubectl-Befehlen erstellen.