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

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *