Skip to content

Instantly share code, notes, and snippets.

@negz
Last active Oct 14, 2021
Embed
What would you like to do?
Dump Kubernetes cluster resources as YAML
#!/usr/bin/env bash
set -e
CONTEXT="$1"
if [[ -z ${CONTEXT} ]]; then
echo "Usage: $0 KUBE-CONTEXT"
exit 1
fi
NAMESPACES=$(kubectl --context ${CONTEXT} get -o json namespaces|jq '.items[].metadata.name'|sed "s/\"//g")
RESOURCES="configmap secret daemonset deployment service hpa"
for ns in ${NAMESPACES};do
for resource in ${RESOURCES};do
rsrcs=$(kubectl --context ${CONTEXT} -n ${ns} get -o json ${resource}|jq '.items[].metadata.name'|sed "s/\"//g")
for r in ${rsrcs};do
dir="${CONTEXT}/${ns}/${resource}"
mkdir -p "${dir}"
kubectl --context ${CONTEXT} -n ${ns} get -o yaml ${resource} ${r} > "${dir}/${r}.yaml"
done
done
done
@tilleryd

This comment has been minimized.

Copy link

@tilleryd tilleryd commented Jan 29, 2020

awesome

@wuestkamp

This comment has been minimized.

Copy link

@wuestkamp wuestkamp commented Apr 22, 2020

sweet! If you want all resources you could do:

RESOURCES=$(kubectl api-resources --namespaced -o name | tr "\n" " ")

and namespaces without jq:

kubectl get ns -o jsonpath="{.items[*].metadata.name}"
@boweeb

This comment has been minimized.

Copy link

@boweeb boweeb commented Nov 20, 2020

Quick jq tip:
If you use -r then you won't need to strip quotes with sed.

... | jq '.items[].metadata.name' | sed "s/\"//g"

# is equivalent to

... | jq -r '.items[].metadata.name'

Quote from man page:

o   --raw-output / -r:

    With this option, if the filter's result is a string then it will be written
    directly to standard output  rather  than  being formatted as a JSON string
    with quotes. This can be useful for making jq filters talk to non-JSON-based
    systems.
@cig0

This comment has been minimized.

Copy link

@cig0 cig0 commented Dec 17, 2020

Saved me from a huge headache today

@artemkoru

This comment has been minimized.

Copy link

@artemkoru artemkoru commented Dec 25, 2020

Thanks!

@WoozyMasta

This comment has been minimized.

Copy link

@WoozyMasta WoozyMasta commented Feb 16, 2021

You can try this script

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment