Files
2025-04-11 22:01:46 +10:00

39 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
# Set backup directory
BACKUP_DIR="k8s-backup-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$BACKUP_DIR"
# Get all namespaces
kubectl get ns --no-headers | awk '{print $1}' | while read namespace; do
# Create namespace directory
NS_DIR="$BACKUP_DIR/$namespace"
mkdir -p "$NS_DIR"
# Get all resource types in this namespace
kubectl api-resources --verbs=list --namespaced -o name | while read resource; do
# Skip some internal resources
if [[ $resource != "events"* ]] && [[ $resource != "events.events.k8s.io" ]]; then
echo "Backing up $resource in $namespace"
# Get all resources of this type and save to yaml
kubectl get "$resource" -n "$namespace" -o yaml > "$NS_DIR/$resource.yaml" 2>/dev/null
fi
done
done
# Backup cluster-wide resources
CLUSTER_DIR="$BACKUP_DIR/cluster-resources"
mkdir -p "$CLUSTER_DIR"
# Get all non-namespaced resources
kubectl api-resources --verbs=list --namespaced=false -o name | while read resource; do
echo "Backing up cluster resource $resource"
kubectl get "$resource" -o yaml > "$CLUSTER_DIR/$resource.yaml" 2>/dev/null
done
# Create a tarball
tar -czf "$BACKUP_DIR.tar.gz" "$BACKUP_DIR"
rm -rf "$BACKUP_DIR"
echo "Backup completed: $BACKUP_DIR.tar.gz"