Kubernetes Cookbook

Pods

Alle Pods einer Node listen

kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=<node>

Alle Pods mit einer eigenen Ausgabe listen

kubectl get pod -A -o=custom-columns=POD_NAME:.metadata.name,STATUS:.status.phase,NAMESPACE:.metadata.namespace,CONTAINER_NAME:.spec.containers[*].name

Alle Pods eines Namespace listen

kubectl get pods -n <namespace>

Alle Pod nicht Running Pods listen

kubectl get pods -n <namespace> --field-selector "status.phase!=Running"

OCI Images

Alle deployments mit bitnami images suchen

Der folgende Befehl listet alle Deployments, StatefulSets und DaemonSets auf bei denen noch OCI Images von bitnami in Benutzung sind.

kubectl get deployments,statefulsets,daemonsets --all-namespaces -o json | \
jq -r '.items[] | select(.spec.template.spec.containers[].image | contains("bitnami/")) | "\(.kind) \(.metadata.namespace)/\(.metadata.name)"'

Alle Deployments mit bitnami zu bitnamilegacy patchen

#!/bin/bash
set -euo pipefail

RESOURCES=("deployments" "statefulsets" "daemonsets")
echo "Searching and patching Bitnami images to Bitnami Legacy..."

for resource in "${RESOURCES[@]}"; do
  echo "Processing ${resource}..."
  
  kubectl get "$resource" --all-namespaces -o json | \
  jq -c '.items[] | select(.spec.template.spec.containers[].image | contains("bitnami/"))' | \
  while read -r item; do
    
    NAME=$(echo "$item" | jq -r '.metadata.name')
    NAMESPACE=$(echo "$item" | jq -r '.metadata.namespace')
    
    echo "-> Patching $resource: $NAMESPACE/$NAME"
    
    PATCH_JSON=$(echo "$item" | jq -c '
      .spec.template.spec.containers |= map(
        if .image | contains("bitnami/") then
          .image |= gsub("bitnami/"; "bitnamilegacy/")
        else
          .
        end
      ) | {spec: {template: {spec: {containers: .spec.template.spec.containers}}}}
    ')
    
    kubectl patch "$resource" "$NAME" -n "$NAMESPACE" --type=merge -p "$PATCH_JSON"
  done
done
echo "Patching complete!"