Zum Inhalt

nützliche Kommandos

Eine weitere Sammlung an Befehls-Sätzen und -Sequenzen zur Arbeit mit Kubernetes Deployments und deren Wartung.

Alle Deployments durchstarten

## als Einzeiler
# StatefulSets
for _ns in $(kubectl get ns -o name);do for _depl in $(kubectl get -n ${_ns##*/} statefulset -o name);do kubectl rollout -n ${_ns##*/} restart $_depl ;done;done
# Deployments
for _ns in $(kubectl get ns -o name);do for _depl in $(kubectl get -n ${_ns##*/} deployment -o name);do kubectl rollout -n ${_ns##*/} restart $_depl ;done;done
# DaemonSets
for _ns in $(kubectl get ns -o name);do for _depl in $(kubectl get -n ${_ns##*/} daemonset -o name);do kubectl rollout -n ${_ns##*/} restart $_depl ;done;done

... lesbarer (für ein Skript):

for _dtype in statefulset deployment daemonset
do
  for _ns in $(kubectl get ns -o name)
  do
    for _depl in $(kubectl get -n ${_ns##*/} $_dtype -o name)
    do
      kubectl rollout -n ${_ns##*/} restart $_depl
    done
  done
done

Secrets auslesen

kubectl get [-n <Namespace>] secrets <Secret-Name> -o jsonpath='{.data.<Key>}' | base64 -d
# Beispiel einer Docker-Config:
kubectl get secrets myregauth -o jsonpath='{.data.\.dockerconfigjson}' | base64 -d

Auslastung der Nodes

kubectl top node

oder für Pods

kubectl top pod -A|-n <Namespace>

Auflisten von Pods

Alle Pods auf einem Node:

kubectl get -A pod -o wide --field-selector spec.nodeName=<Node-Name>

Alle Pods nicht auf benannten Nodes:

# Beispiel der Ausklammerung mehrerer Nodes
kubectl get -A pods -o wide --field-selector spec.nodeName!=<Node-Name 1>,spec.nodeName!=<Node-Name 2>

Alle Pods ohne System-Namespaces:

kubectl get -A pods -o wide --field-selector metadata.namespace!=kube-system,metadata.namespace!=longhorn-system,metadata.namespace!=traefik-system
# oder einfach alle Pods, die nicht im Kube-System oder default Namespace sind:
kubectl get -A pods -o wide --field-selector metadata.namespace!=kube-system,metadata.namespace!=default

Alle nicht laufende Pods ermitteln:

kubectl get -A pods -o wide --field-selector status.phase!=Running

Labels behandeln

generell:

# erstellen
kubectl label -n <Namespace> <Ressource-Type> <Ressource-Name> <Label-Name>='<Label-Value>'
# ändern
kubectl label -n <Namespace> --overwrite <Ressource-Type> <Ressource-Name> <Label-Name>='<Label-Value>'
# entfernen
kubectl label -n <Namespace> <Ressource-Type> <Ressource-Name> <Label-Name>-

alternativ mit Patching:

# erstellen oder ändern
kubectl path -n <Namespace> <Ressource-Type> <Ressource-Name> -p '{"metadata":{"labels":{"Label-Name":"Label-Value"}}}'
# entfernen
kubectl path -n <Namespace> <Ressource-Type> <Ressource-Name> -p '{"metadata":{"labels":{"Label-Name":null}}}'

Label zu Namespaces

# Label setzen
kubectl label ns <NameSpace> <Label>='<Wert>'
# Label ändern
kubectl label --overwrite ns <NameSpace> <Label>='<Wert>'
# Label entfernen
kubectl label --overwrite ns <NameSpace> <Label>-