рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдЬреЛ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреЙрдбреНрд╕, рд╕реЗрд╡рд╛рдУрдВ, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЗрддреНрдпрд╛рджрд┐ рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдПрдХ рдпрд╛ рдЕрдзрд┐рдХ рдлрд╛рдЗрд▓реЗрдВ (рд╡рд╛рдИрдПрдордПрд▓ рдкреНрд░рд╛рд░реВрдк рдкрд╕рдВрджреАрджрд╛) рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рдирдП рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдПрдХ рдкреНрд░рдЪрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рдЧрд┐рдЯ рд░реЗрдкреЛ рдореЗрдВ рд╡рд╛рдИрдПрдордПрд▓ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░реА 'рд╕реНрдЯреИрдХ рдлрд╛рдЗрд▓реЗрдВ' рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдордиреБрд╖реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ 'рдУрдкрди рд▓реВрдк' рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рдореИрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдпрд╛ рдЕрдиреНрдп рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рдХреМрди рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдирд╡реАрдирддрдо рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдЙрдкрд▓рдмреНрдз рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред
рдУрдкрди-рд▓реВрдк рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рдереЗ, рдпрд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рдереАрдВ, рдЖрджрд┐ред
рдпрджрд┐ рдореИрдВ рдЪрд▓ рд░рд╣реЗ рдХреНрд▓рд╕реНрдЯрд░ рд╕реЗ 'рд╕рдордХрдХреНрд╖' рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рдХрд╛рд▓ рд╕рдХрддрд╛ рд╣реВрдВ, рддреЛ рдореИрдВ рдЙрдирдХреА рддреБрд▓рдирд╛ рдЙрди рд▓реЛрдЧреЛрдВ рд╕реЗ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдмрд╣реБрдд рдордЬрдмреВрдд, 'рдХреНрд▓реЛрдЬреНрдб рд▓реВрдк' рдкреНрд░рдгрд╛рд▓реА рд╣реИ - рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рд╣реЛрдЧрд╛, рднрд▓реЗ рд╣реА рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рдХреНрд╖реНрдп рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЯреНрд░реИрдХ рдЦреЛ рджрд┐рдпрд╛ рд╣реЛред
рдЕрдЧрд░ Kubectl apply -f . рдЬреИрд╕реА рдХреЛрдИ рдЪреАрдЬ рд╣реЛрддреА рддреЛ
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рд╣реИ? рд╣рдо рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдирдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рдЕрдкрдиреЗ рд░реЗрдбрд╣реИрдЯ/рд╕реИрдЯреЗрд▓рд╛рдЗрдЯ рдЖрд░рдкреАрдПрдо-рдЖрдзрд╛рд░рд┐рдд рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрдирд╛рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ K8s рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдмреЗрд╢рдХ, k8s рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИ рдХрд┐ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рд╣реА рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╕реНрдерд╛рдкрд┐рдд рдкреИрдХреЗрдЬ рд╕рдВрд╕реНрдХрд░рдг!
Kubectl рдкреАрдУ, рдкрд░рд┐рдирд┐рдпреЛрдЬрди, рдЖрд░рд╕реА, рдЖрд░рдПрд╕, рдбреАрдПрд╕, рдирд╣реАрдВ, рдиреМрдХрд░реА-рдУ рдпрдорд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?
рдЖрд╣ рд╣рд╛рдБ, рдмрд┐рд▓реНрдХреБрд▓! рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ред рдпрд╣ рдореЗрд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдЙрди рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред
рдореИрдВрдиреЗ рд╕реАрдЦрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ 'рдЕрдВрддрд┐рдо-рд▓рд╛рдЧреВ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди' рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдкрдврд╝рдирд╛ рд╣реИ рдЬреЛ рдХреБрдмреЗрдХреНрдЯрд▓ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрд╣ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рджреЗрдЧрд╛ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
@dcowden рднреА рджреЗрдЦреЗрдВ kubectl get --export
рдЖрд╣ рдпрд╣ рдФрд░ рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ! рдзрдиреНрдпрд╡рд╛рдж!
рдЕрдиреНрдп рдЙрддреНрддрд░реЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░, рдореИрдВ рдмреИрд╢ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛ рд╣реВрдВ:
for n in $(kubectl get -o=name pvc,configmap,serviceaccount,secret,ingress,service,deployment,statefulset,hpa,job,cronjob)
do
mkdir -p $(dirname $n)
kubectl get -o=yaml --export $n > $n.yaml
done
k8s 1.8
kubectl get all --export=true -o yaml
Google рд╕реЗ рдпрд╣рд╛рдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдкрд░, рдЕрдВрддрд┐рдо рдЯрд┐рдкреНрдкрдгреА рдХреА all
рдореЗрдВ ingress
, рдФрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ --all-namespaces
рднреА рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдЕрдиреНрдп рдирд╛рдорд╕реНрдерд╛рди рдбрдВрдк рдХрд░реЗрдВред
рд╕рдВрдмрдВрдзрд┐рдд: https://github.com/kubernetes/kubernetes/issues/42885 рдФрд░ https://github.com/kubernetes/kubernetes/pull/42954#issuecomment -285949856 рдЖрджрд┐ред
@alahijani . рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рднрд┐рдиреНрдирддрд╛
for n in $(kubectl get -o=name pvc,configmap,ingress,service,secret,deployment,statefulset,hpa,job,cronjob | grep -v 'secret/default-token')
do
kubectl get -o=yaml --export $n > $(dirname $n)_$(basename $n).yaml
done
рдпрд╣ рдПрдХ рдЖрд╕рд╛рди kubectl apply -f
рд▓рд┐рдП рд╕рднреА yaml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рд╣реА dir рдореЗрдВ рд░рдЦрдирд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рд░рд╣рд╕реНрдп рднреА рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдирд┐рд░реНрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдФрд░ рд╕рдВрд╕реНрдХрд░рдг: рд╕рднреА рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рд╕реЗ рд╕рднреА рдпрдорд▓ рдХрд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдирд╛ред рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред
i=$((0))
for n in $(kubectl get -o=custom-columns=NAMESPACE:.metadata.namespace,KIND:.kind,NAME:.metadata.name pv,pvc,configmap,ingress,service,secret,deployment,statefulset,hpa,job,cronjob --all-namespaces | grep -v 'secrets/default-token')
do
if (( $i < 1 )); then
namespace=$n
i=$(($i+1))
if [[ "$namespace" == "PersistentVolume" ]]; then
kind=$n
i=$(($i+1))
fi
elif (( $i < 2 )); then
kind=$n
i=$(($i+1))
elif (( $i < 3 )); then
name=$n
i=$((0))
echo "saving ${namespace} ${kind} ${name}"
if [[ "$namespace" != "NAMESPACE" ]]; then
mkdir -p $namespace
kubectl get $kind -o=yaml --export $name -n $namespace > $namespace/$kind.$name.yaml
fi
fi
done
рдФрд░ рдлрд┐рд░ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
path=$(pwd)
for n in $(ls -d */)
do
echo "Creating namespace ${n:0:-1}"
kubectl create namespace ${n:0:-1}
for yaml in $(ls $path/$n)
do
echo -e "\t Importing $yaml"
kubectl apply -f $path/$n$yaml -n ${n:0:-1}
done
done
рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдЯреЛрдХрди рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЫреЛрдЯрд╛ рд╕рд╛ рдЯреНрд╡реАрдХ:
#!/bin/env bash
## https://github.com/kubernetes/kubernetes/issues/24873#issuecomment-416189335
i=$((0))
for n in $(kubectl get -o=custom-columns=NAMESPACE:.metadata.namespace,KIND:.kind,NAME:.metadata.name pv,pvc,configmap,ingress,service,secret,deployment,statefulset,hpa,job,cronjob --all-namespaces | grep -v 'secrets/default-token')
do
if (( $i < 1 )); then
namespace=$n
i=$(($i+1))
if [[ "$namespace" == "PersistentVolume" ]]; then
kind=$n
i=$(($i+1))
fi
elif (( $i < 2 )); then
kind=$n
i=$(($i+1))
elif (( $i < 3 )); then
name=$n
i=$((0))
if [[ "$namespace" != "NAMESPACE" ]]; then
mkdir -p $namespace
yaml=$((kubectl get $kind -o=yaml $name -n $namespace ) 2>/dev/null)
if [[ $kind != 'Secret' || $yaml != *"type: kubernetes.io/service-account-token"* ]]; then
echo "Saving ${namespace}/${kind}.${name}.yaml"
kubectl get $kind -o=yaml --export $name -n $namespace > $namespace/$kind.$name.yaml
fi
fi
fi
done
рд╡рд┐рдВрдбреЛрдЬрд╝ рдкреЙрд╡рд░реНрд╕рд╢реЗрд▓ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдПрдХ-рд▓рд╛рдЗрдирд░ рд╣реИ:
Foreach ($i in $(kubectl get -o=name pvc,configmap,ingress,service,secret,deployment,statefulset,hpa,job,cronjob)) {If($i -notmatch "default-token") {kubectl get -o=yaml --export $i | Out-File -filepath $($i.Replace("/", "-") + ".yaml")}}
@mrwulf @acondrat
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ grep -v 'secrets/default-token'
рдХреЛ grep -v 'secret/default-token'
рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
secrets
рдореЗрд░реЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдореИрдВ Kubectl рдФрд░ k8s рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ
Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.2", GitCommit:"17c77c7898218073f14c8d573582e8d2313dc740", GitTreeState:"clean", BuildDate:"2018-10-24T06:54:59Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.5", GitCommit:"32ac1c9073b132b8ba18aa830f46b77dcceb0723", GitTreeState:"clean", BuildDate:"2018-06-21T11:34:22Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
@ 4m3ndy рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ! рдзрдиреНрдпрд╡рд╛рдж!
рдЕрд░реЗ рджреЛрд╕реНрддреЛрдВ рдиреЗ рдЗрд╕ рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ yaml рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рд╣реИред рдЗрди рдмреИрдХрдЕрдк рдХреЛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рд╕рд╛рде рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ S3 рдмрдХреЗрдЯ рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЕрдЧрд░ рдХреЛрдИ рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ рдпрд╛ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ: +1:
рдкрд░рд┐рд╡реЗрд╢-рдирд╡рд╛рдЪрд╛рд░/k8s-рдмреИрдХрдЕрдк
рдЙрджрд╛рд╣рд░рдг: pv yaml рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред
kubectl get pv -o yaml --export | sed -e '/resourceVersion: "[0-9]\+"/d' -e '/uid: [a-z0-9-]\+/d' -e '/selfLink: [a-z0-9A-Z/]\+/d' -e '/status:/d' -e '/phase:/d' -e '/creationTimestamp:/d' > pvList.yaml
@xiaoping378
https://github.com/ambient-innovation/k8s-backup/blob/01c1bfe750136648fd91e14dd691ba39bb05f282/k8s-backup.sh#L38
рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рд╕рднреА рдкреАрд╡реАрд╕реА рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдкреАрд╡реА рдХреЗ рд▓рд┐рдП yaml рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрдпрд╛рдд рдХрд░реЗрдВ, рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ
${HOME}/clusterstate/ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ, рдлрд┐рд░ рдЪрд▓рд╛рдПрдБ:
kubectl cluster-info dump --all-namespaces --output-directory=${HOME}/clusterstate/ -o yaml
рдЖрдкрдХреА рд╕рднреА рд╕рдВрд╕реНрдерд╛рдПрдВ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рдЕрдиреБрд░реВрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╣реЛрдВрдЧреАред
.json рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдпрд╛рдиреА рдкрд░рд┐рдирд┐рдпреЛрдЬрди.json, рднреНрд░рд╛рдордХ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ -o yaml
рдзреНрд╡рдЬ yaml рдирд┐рд░реНрдпрд╛рдд рдмрдирд╛рдПрдЧрд╛ред
${HOME}/clusterstate/ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ, рдлрд┐рд░ рдЪрд▓рд╛рдПрдБ:
kubectl cluster-info dump --all-namespaces --output-directory=${HOME}/clusterstate/ -o yaml
рдЖрдкрдХреА рд╕рднреА рд╕рдВрд╕реНрдерд╛рдПрдВ рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рдЕрдиреБрд░реВрдк рдЕрд▓рдЧ-рдЕрд▓рдЧ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╣реЛрдВрдЧреАред
.json рдПрдХреНрд╕рдЯреЗрдВрд╢рди, рдпрд╛рдиреА рдкрд░рд┐рдирд┐рдпреЛрдЬрди.json, рднреНрд░рд╛рдордХ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐-o yaml
рдзреНрд╡рдЬ yaml рдирд┐рд░реНрдпрд╛рдд рдмрдирд╛рдПрдЧрд╛ред
FYI рдХрд░реЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реА рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП RAM рдХреА рдПрдХ рдЕрдЪреНрдЫреА рдорд╛рддреНрд░рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдореЗрд░рд╛ 2GB RAM CLI рдЬрдВрдкрдмреЙрдХреНрд╕ VM рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рд╕рдХрддрд╛ рд╣реИ (рд╢рд╛рдпрдж 4 рдпрд╛ 8 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдХрд▓реНрдкрдирд╛ рд╣реИ):
fatal error: runtime: out of memory
runtime stack:
runtime.throw(0x1ab7c29, 0x16)
/usr/local/go/src/runtime/panic.go:774 +0x72
runtime.sysMap(0xc068000000, 0x10000000, 0x2da7238)
/usr/local/go/src/runtime/mem_linux.go:169 +0xc5
runtime.(*mheap).sysAlloc(0x2d8e9a0, 0x10000000, 0x0, 0x0)
/usr/local/go/src/runtime/malloc.go:701 +0x1cd
runtime.(*mheap).grow(0x2d8e9a0, 0x8000, 0xffffffff)
/usr/local/go/src/runtime/mheap.go:1255 +0xa3
runtime.(*mheap).allocSpanLocked(0x2d8e9a0, 0x8000, 0x2da7248, 0x42c7bc)
/usr/local/go/src/runtime/mheap.go:1170 +0x266
runtime.(*mheap).alloc_m(0x2d8e9a0, 0x8000, 0x101, 0xc000103f18)
/usr/local/go/src/runtime/mheap.go:1022 +0xc2
рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдбреЗрд╕реНрдХрдЯреЙрдк рдкрд░ рдлрд┐рд░ рд╕реЗ рджреМрдбрд╝ рд▓рдЧрд╛рдИ рдФрд░ Kubectl рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛, рдпрд╣ рд▓рдЧрднрдЧ 4GB рдкрд░ рдЪрд░рдо рдкрд░ рдерд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ 8GB рд╣реИ!
рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░ рдбрдВрдк рдХреЗ рдХреБрд▓ рдЖрдЙрдЯрдкреБрдЯ рдЖрдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд▓реЙрдЧ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдХреБрдЫ рдкреЙрдб (рдЙрдирдореЗрдВ рд╕реЗ 90) 100 рдПрдордмреА рд╕реЗ рдЕрдзрд┐рдХ рдЖрдХрд╛рд░ рдХреЗ рд▓реЙрдЧ рдбрд╛рд▓ рд░рд╣реЗ рд╣реИрдВред рдпрд╣ рдореБрдЭреЗ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдбрдВрдк рдХрдорд╛рдВрдб рд░реИрдо рдореЗрдВ рд╕рдм рдХреБрдЫ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдпрд╣ рдбрд┐рд╕реНрдХ рдкрд░ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реЛ, рд╢рд╛рдпрдж рд░реИрдо рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд▓реЙрдЧ рд▓рд┐рдЦрдирд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред
рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдХрдорд╛рдВрдб рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рднреА рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╕реНрдЯрд░ (рдПрдирдПрд╕, рдкрд░рд┐рдирд┐рдпреЛрдЬрди, рдПрд╕рд╡реАрд╕реА, рд░рд╣рд╕реНрдп, рдкреАрд╡реА рдкреАрд╡реАрд╕реА, рд╕реЗрдореА yaml рдлрд╝рд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ) рдХрд╛
рдореИрдВрдиреЗ --export рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реЗрд╡рд╛ рдореЗрдВ yaml рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдЧрд╛рдпрдм рд╣реИ рдФрд░ рдЕрдЧрд░ рдореИрдВ --export рдХреЗ рдмрд┐рдирд╛ рдмреИрдХрдЕрдк рд▓реЗрддрд╛ рд╣реВрдВ рддреЛ рдЗрд╕рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░рдЖрдИрдкреА рдЖрдИрдкреА , рдиреЛрдбрдкреЛрд░реНрдЯ рдкреЛрд░реНрдЯ , рд▓реЛрдбрдмреИрд▓реЗрдВрд╕рд░ рдЖрдИрдкреА рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЗрд╕реЗ рдирдП рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИ (рдХреНрд▓рд╕реНрдЯрд░рдЖрдИрдкреА рдФрд░ рд▓реЛрдбрдмреИрд▓реЗрдВрд╕рд░)ред
Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рд╕рдВрд╕реНрдХрд░рдг 1.14 рдЖрдЧреЗ 1.15/16/17 (рдЬреАрд╕реАрдкреА gke рдпрд╛ AWS eks рдореЗрдВ рдмреИрдХрдЕрдк рд▓реЗрдиреЗ/рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕)ред
kubectl api-resources
рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ k8s рдореЗрдВ рд╕рднреА рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдореИрдирд┐рдлреЗрд╕реНрдЯ (yaml рдлрд╝рд╛рдЗрд▓реЗрдВ) рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВ:
#!/usr/bin/env bash
while read -r line
do
output=$(kubectl get "$line" --all-namespaces -o yaml 2>/dev/null | grep '^items:')
if ! grep -q "\[\]" <<< $output; then
echo -e "\n======== "$line" manifests ========\n"
kubectl get "$line" --all-namespaces -o yaml
fi
done < <(kubectl api-resources | awk '{print $1}' | grep -v '^NAME')
рдКрдкрд░ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
v1.16.3
18.04.3
рдУрдПрд╕4.4.20(1)-release (x86_64-pc-linux-gnu)
@vhosakot рдЖрдкрдХреА рд▓рд┐рдкрд┐ рдореЗрдВ рдЫреЛрдЯрд╛ рд╕рд░рд▓реАрдХрд░рдгред
рдЖрдк рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: kubectl api-resources | awk '{print $1}' | grep -v '^NAME'
рд╕рд╛рде рдореЗрдВ: kubectl api-resources -o name
#!/usr/bin/env bash
while read -r namespace
do
echo "scanning namespace '${namespace}'"
mkdir -p "${HOME}/cluster-backup/${namespace}"
while read -r resource
do
echo " scanning resource '${resource}'"
mkdir -p "${HOME}/cluster-backup/${namespace}/${resource}"
while read -r item
do
echo " exporting item '${item}'"
kubectl get "$resource" -n "$namespace" "$item" -o yaml > "${HOME}/cluster-backup/${namespace}/${resource}/$item.yaml"
done < <(kubectl get "$resource" -n "$namespace" 2>&1 | tail -n +2 | awk '{print $1}')
done < <(kubectl api-resources --namespaced=true 2>/dev/null | tail -n +2 | awk '{print $1}')
done < <(kubectl get namespaces | tail -n +2 | awk '{print $1}')
рдореИрдВрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдереЛрдбрд╝рд╛ рдКрдкрд░ рдмрдврд╝рд╛рдпрд╛ (рдФрд░ рдЗрд╕реЗ рдзреАрдорд╛ рдХрд░ рджрд┐рдпрд╛)ред рдпрд╣ рд╕рднреА рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рд╕рднреА рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИ рдФрд░ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрддрд┐рдо рдкрд░рд┐рдгрд╛рдо (рдбрдВрдк) рд╕рд╛рдл рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
#!/usr/bin/env bash
ROOT=${HOME}/clusterstate
while read -r resource
do
echo " scanning resource '${resource}'"
while read -r namespace item x
do
mkdir -p "${ROOT}/${namespace}/${resource}"
echo " exporting item '${namespace} ${item}'"
kubectl get "$resource" -n "$namespace" "$item" -o yaml > "${ROOT}/${namespace}/${resource}/$item.yaml" &
done < <(kubectl get "$resource" --all-namespaces 2>&1 | tail -n +2)
done < <(kubectl api-resources --namespaced=true 2>/dev/null | tail -n +2 | awk '{print $1}')
wait
@scones рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рд▓реЗрдХрд┐рди рдкреНрд░рдХреНрд░рд┐рдпрд╛
@ рдирд╛рдерди-рд╕реА . рдХреЗ рд╕рдорд╛рди
рдореИрдВрдиреЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕рд╛рдзрди рд╕реВрдЪреА рд╕реЗ events
рд╣рдЯрд╛ рджрд┐рдпрд╛
#!/usr/bin/env bash
ROOT=${HOME}/clusterstate
while read -r resource
do
echo " scanning resource '${resource}'"
while read -r namespace item x
do
mkdir -p "${ROOT}/${namespace}/${resource}"
echo " exporting item '${namespace} ${item}'"
kubectl get "$resource" -n "$namespace" "$item" -o yaml > "${ROOT}/${namespace}/${resource}/$item.yaml" &
done < <(kubectl get "$resource" --all-namespaces 2>&1 | tail -n +2)
done < <(kubectl api-resources --namespaced=true 2>/dev/null | grep -v "events" | tail -n +2 | awk '{print $1}')
wait
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
Kubectl рдкреАрдУ, рдкрд░рд┐рдирд┐рдпреЛрдЬрди, рдЖрд░рд╕реА, рдЖрд░рдПрд╕, рдбреАрдПрд╕, рдирд╣реАрдВ, рдиреМрдХрд░реА-рдУ рдпрдорд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?