Creamos una carpeta backup en el master y copiarmos la configuracion de kubernetes
mkdir /backup cp -r /etc/kubernetes/pki /backup/pki cp -r /etc/kubernetes/manifests /backup
Para crear el snapshot tenemos que montar la misma imagen que tengamos en el etcd.yaml
image_version=$(cat /backup/manifests/etcd.yaml | grep image: | awk '{print $2}') && echo $image_version
Creamos el snapshot
sudo docker run --rm -v /backup:/backup --network host -v /etc/kubernetes/pki/etcd:/etc/kubernetes/pki/etcd --env ETCDCTL_API=3 $image_version etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key snapshot save /backup/etcd-snapshot-latest.db
Con esto ya tenemos creado al backup
Restore cluster backup
Restauremos los certificados
sudo cp -r /backup/pki /etc/kubernetes/
Creamos el directorio /var/lib/etcd
sudo mkdir -p /var/lib/etcd
Restauramos el snapshot con la misma imagen del etcd.yaml
image_version=$(cat /backup/manifests/etcd.yaml | grep image: | awk '{print $2}') && echo $image_version
sudo docker run --rm -v /backup:/backup -v /var/lib/etcd:/var/lib/etcd --env ETCDCTL_API=3 $image_version /bin/sh -c "etcdctl snapshot restore '/backup/etcd-snapshot-latest.db' ; mv /default.etcd/member/ /var/lib/etcd/"
Reiniciamos el cluster con el flag de archivos pre-existentes en var/lib/etc
sudo kubeadm init --apiserver-advertise-address=192.168.1.88 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=DirAvailable--var-lib-etcd
Ya podemos agregar de nuevo los nodos
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
token=$(kubeadm token create --print-join-command) && ansible nodes -a "$token"
Habiliatar cron
Podemos crear un script que nos cree un backup diario con la fecha como nombre de la carpeta y añadir un crontab -e 0 1 * * * sh backup.sh
time_stamp=$(date +%Y-%m-%d) mkdir -p "${backuppath}/${time_stamp}" dirname="/backup${backuppath}/${time_stamp}" echo $dirname mkdir $dirname cp -r /etc/kubernetes/pki ${dirname}/pki cp -r /etc/kubernetes/manifests $dirname image_version=$(cat $dirname/manifests/etcd.yaml | grep image: | awk '{print $2}') && echo $image_version sudo docker run --rm -v $dirname:$dirname --network host -v /etc/kubernetes/pki/etcd:/etc/kubernetes/pki/etcd --env ETCDCTL_API=3 $image_version etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key snapshot save $dirname/etcd-snapshot-latest.db
0 comentarios