-
Notifications
You must be signed in to change notification settings - Fork 9
/
kubernetes-cluster-dump.sh
74 lines (63 loc) · 2.65 KB
/
kubernetes-cluster-dump.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env bash
set -e
CONTEXT="$1"
if [[ -z ${CONTEXT} ]]; then
echo "Usage: $0 <KUBE-CONTEXT>"
echo "One of:"
kubectl config get-contexts
exit 1
fi
#mkdir -p "${CONTEXT}"
echo -n "Native export to jsons..."
# the -o yaml flag will create yaml exports but name them .json in 1.15.1
kubectl --context ${CONTEXT} cluster-info dump --all-namespaces --output-directory=${CONTEXT}/cluster-info-dump/
NAMESPACES=$(kubectl --context ${CONTEXT} get -o json namespaces|jq '.items[].metadata.name'|sed "s/\"//g")
#RESOURCES="configmap secret daemonset deployment service hpa"
GLOBAL_RESOURCES=$(kubectl api-resources --namespaced=false -o name)
RESOURCES=$(kubectl api-resources --namespaced=true -o name)
echo -n "Counting non-namespaced resources to yamls..."
globalcount=0
for resource in ${GLOBAL_RESOURCES}; do
rsrcs=$(kubectl --context ${CONTEXT} get -o json ${resource} 2>/dev/null | jq '.items[].metadata.name'|sed "s/\"//g" )
if [[ ! -z "${rsrcs}" ]]; then # to avoid counting empty lines
rsrcscount=$(echo "${rsrcs}" | wc -l)
globalcount=$(( globalcount + rsrcscount ))
fi
# else add to the skip list so we dont waste time on it during the export
done
echo "$globalcount. Exporting..."
for resource in ${GLOBAL_RESOURCES}; do
#echo "Global resource $resource"
rsrcs=$(kubectl --context ${CONTEXT} get -o json ${resource} 2>/dev/null | jq '.items[].metadata.name'|sed "s/\"//g" )
for r in ${rsrcs}; do
echo " Name $resource/$r"
dir="${CONTEXT}/global-resources-yaml/${resource}"
mkdir -p "${dir}"
kubectl --context ${CONTEXT} get -o yaml ${resource} ${r} > "${dir}/${r}.yaml"
done
done | pv -pl -s $globalcount > /dev/null
echo -n "Counting namespaced resources to yamls..."
localcount=0
for ns in ${NAMESPACES}; do
for resource in ${RESOURCES}; do
rsrcs=$(kubectl --context ${CONTEXT} -n ${ns} get -o json ${resource} 2>/dev/null | jq '.items[].metadata.name'|sed "s/\"//g")
if [[ ! -z "${rsrcs}" ]]; then # to avoid counting empty lines
rsrcscount=$(echo "${rsrcs}" | wc -l)
localcount=$(( localcount + rsrcscount ))
fi
done
done
echo "$localcount. Exporting..."
for ns in ${NAMESPACES}; do
#echo "Namespace $ns"
for resource in ${RESOURCES}; do
#echo " Resource $resource"
rsrcs=$(kubectl --context ${CONTEXT} -n ${ns} get -o json ${resource} 2>/dev/null | jq '.items[].metadata.name'|sed "s/\"//g")
for r in ${rsrcs}; do
echo " Name $ns/$resource/$r"
dir="${CONTEXT}/namespaces-yaml/${ns}/${resource}"
mkdir -p "${dir}"
kubectl --context ${CONTEXT} -n ${ns} get -o yaml ${resource} ${r} > "${dir}/${r}.yaml"
done
done
done | pv -pl -s $localcount > /dev/null