Crea copias de seguridad de clústeres y restablécelos

En esta página, se describe cómo crear una copia de seguridad y restablecer los clústeres creados con clústeres de Anthos alojados en un equipo físico. Estas instrucciones se aplican a todos los tipos de clústeres compatibles con los clústeres de Anthos alojados en equipos físicos.

Crea una copia de seguridad de un clúster

El proceso de copia de seguridad tiene dos partes. Primero, se realiza una instantánea desde el almacén de etcd. Luego, los certificados de PKI relacionados se guardan en un archivo tar. El almacén de etcd es el almacenamiento de copia de seguridad de Kubernetes para todos los datos del clúster y contiene todos los objetos de Kubernetes y objetos personalizados requeridos para administrar el estado del clúster. Los certificados de PKI se usan para la autenticación con TLS. Estos datos tienen copia de seguridad desde el plano de control del clúster o en uno de los planos de control para una implementación con alta disponibilidad (HA).

Te recomendamos crear una copia de seguridad de tus clústeres con regularidad para asegurarte de que los datos de la instantánea sean relativamente actuales. La frecuencia de las copias de seguridad depende de la frecuencia con la que se producen cambios significativos en los clústeres.

Haz una instantánea de almacenamiento de etcd

En los clústeres de Anthos alojados en equipos físicos, un Pod llamado etcd-CONTROL_PLANE_NAME en el espacio de nombres de kube-system ejecuta el etcd para ese plano de control. Para crear una copia de seguridad del almacén de etcd del clúster, realiza los siguientes pasos desde tu estación de trabajo de administrador:

  1. Usa kubectl get po para identificar el Pod de etcd.

    kubectl --kubeconfig CLUSTER_KUBECONFIG get po -n kube-system \
        -l 'component=etcd,tier=control-plane'
    

    La respuesta incluye el nombre del Pod de etcd y su estado.

  2. Usa kubectl describe pod para ver los contenedores que se ejecutan en el Pod etcd, incluido el contenedor etcd.

    kubectl --kubeconfig CLUSTER_KUBECONFIG describe pod ETCD_POD_NAME -n kube-system
    
  3. Ejecuta una shell de Bash en el contenedor de etcd.

    kubectl --kubeconfig CLUSTER_KUBECONFIG exec -it \
        ETCD_POD_NAME --container etcd --namespace kube-system \
        -- bin/sh
    
  4. Desde la shell dentro del contenedor de etcd, usa etcdctl (la versión 3 de la API) para guardar una instantánea, snapshot.db, del almacén de etcd.

    ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
        --cacert=/etc/kubernetes/pki/etcd/ca.crt \
        --cert=/etc/kubernetes/pki/etcd/peer.crt \
        --key=/etc/kubernetes/pki/etcd/peer.key \
        snapshot save /tmp/snapshotDATESTAMP.db
    

    Reemplaza DATESTAMP por la fecha actual para evitar reemplazar las instantáneas posteriores.

  5. Sal de la shell en el contenedor y ejecuta el siguiente comando para copiar el archivo de instantáneas en la estación de trabajo de administrador.

    kubectl --kubeconfig CLUSTER_KUBECONFIG cp \
        kube-system/ETCD_POD_NAME:/tmp/snapshot.db \
        --container etcd snapshot.db
    
  6. Copia el objeto binario etcdctl del Pod de etcd para que se pueda usar lo mismo durante el proceso de restablecimiento.

    kubectl --kubeconfig CLUSTER_KUBECONFIG cp \
      kube-system/ETCD_POD_NAME:/usr/local/bin/etcdctl \
      --container etcd etcdctl
    
  7. Almacena el archivo de instantánea y el objeto binario etcdctl en una ubicación que esté fuera del clúster y no dependa de la operación de este.

Archiva los certificados de PKI

Los certificados para crear una copia de seguridad se encuentran en el directorio /etc/kubernetes/pki del plano de control. Los certificados de PKI, junto con el archivo snapshot.db del almacén de etcd, son necesarios para recuperar un clúster en caso de que el plano de control se interrumpa por completo. Los siguientes pasos crean un archivo tar y contienen los certificados de PKI.

  1. Usa ssh para conectarte al plano de control del clúster como raíz.

    ssh root@CONTROL_PLANE_NAME
    
  2. En el plano de control, crea un archivo tar, certs_backup.tar.gz, con el contenido del directorio /etc/kubernetes/pki.

    tar -czvf certs_backup.tar.gz -C /etc/kubernetes/pki .
    

    Crea el archivo tar desde el plano de control conserva todos los permisos del archivo de certificado.

  3. Sal del plano de control y, en la estación de trabajo, copia el archivo tar y que contiene los certificados para una ubicación preferida de la estación de trabajo.

    sudo scp root@CONTROL_PLANE_NAME:certs_backup.tar.gz BACKUP_PATH
    

Restablece un clúster

Restablecer un clúster desde una copia de seguridad es el último recurso y se debe usar cuando un clúster falla de manera catastrófica y no puede regresar al servicio de ninguna otra manera. Por ejemplo, los datos etcd están dañados o el Pod de etcd está en un bucle de falla.

El proceso de restablecimiento del clúster tiene dos partes. En primer lugar, los certificados de PKI se restablecen en el plano de control. A continuación, se restablecen los datos de almacén de etcd.

Restablece certificados de la PKI

Si suponemos que creaste copias de seguridad de certificados PKI como se describe en Archiva los certificados de PKI, en los pasos siguientes, se describe cómo restablecer los certificados del archivo tar a un plano de control.

  1. Copia el archivo tar de certificados de PKI, certs_backup.tar.gz, de la estación de trabajo al plano de control del clúster.

    sudo scp -r BACKUP_PATH/certs_backup.tar.gz root@CONTROL_PLANE_NAME:~/
    
  2. Usa ssh para conectarte al plano de control del clúster como raíz.

    ssh root@CONTROL_PLANE_NAME
    
  3. Desde el plano de control, extrae el contenido del archivo tar en el directorio /etc/kubernetes/pki.

    tar -xzvf certs_backup.tar.gz -C /etc/kubernetes/pki/
    
  4. Sal del plano de control.

Restablece el almacén de etcd

Cuando restableces el almacén de etcd, el proceso depende de si el clúster se ejecuta o no en modo de alta disponibilidad (HA) y, de ser así, de si se conservó o no quórum. Usa la siguiente guía a fin de restablecer el almacén de etcd para una situación de falla de clúster determinada:

  • Si el clúster con errores no se ejecuta en modo de alta disponibilidad, restablece el almacén de etcd en el plano de control con los siguientes pasos.

  • Si el clúster se ejecuta en modo de alta disponibilidad y el quórum se conserva, no realices ninguna acción. Siempre que se conserve un quórum, no necesitas restablecer los clústeres con errores.

  • Si el clúster se ejecuta en modo de alta disponibilidad y se pierde quórum, repite los siguientes pasos a fin de restablecer el almacén de etcd para cada miembro con errores.

Sigue estos pasos de la estación de trabajo para quitar y restablecer el almacén de etcd en un plano de control de un clúster con errores:

  1. Crea un directorio /backup en el directorio raíz del plano de control.

    ssh root@CONTROL_PLANE_NAME "mkdir /backup"
    

    Este paso no es estrictamente obligatorio, pero lo recomendamos. En los siguientes pasos, se supone que creaste un directorio /backup.

  2. Copia el archivo de instantánea de etcd, snapshot.db, y el objeto binario etcdctl de la estación de trabajo en el directorio backup del plano de control del clúster.

    sudo scp snapshot.db root@CONTROL_PLANE_NAME:/backup
    sudo scp etcdctl root@CONTROL_PLANE_NAME:/backup
    
  3. Usa SSH para conectarte al nodo del plano de control del administrador:

    ssh root@CONTROL_PLANE_NAME
    
  4. Para detener los Pods estáticos de etcd y kube-apiserver, mueve los archivos de manifiesto del directorio /etc/kubernetes/manifests al directorio /backup.

    sudo mv /etc/kubernetes/manifests/etcd.yaml /backup/etcd.yaml
    sudo mv /etc/kubernetes/manifests/kube-apiserver.yaml /backup/kube-apiserver.yaml
    
  5. Quita el directorio de datos de etcd.

    rm -rf /var/lib/etcd/
    
  6. Ejecuta el restablecimiento de instantánea de etcdctl mediante el objeto binario guardado.

    sudo chmod +x /backup/etcdctl
    sudo ETCDCTL_API=3 /backup/etcdctl \
        --cacert=/etc/kubernetes/pki/etcd/ca.crt \
        --cert=/etc/kubernetes/pki/etcd/server.crt \
        --key=/etc/kubernetes/pki/etcd/server.key \
        --data-dir=/var/lib/etcd \
        --name=CONTROL_PLANE_NAME \
        --initial-advertise-peer-urls=https://CONTROL_PLANE_IP:2380 \
        --initial-cluster=CONTROL_PLANE_NAME=https://CONTROL_PLANE_IP:2380 \
        snapshot restore /backup/snapshot.db
    

    Las entradas para --name, --initial-advertise-peer-urls y --initial-cluster se pueden encontrar en el archivo de manifiesto etcd.yaml que se movió al directorio /backup.

  7. Asegúrate de que se haya vuelto a crear /var/lib/etcd y que se cree un miembro nuevo en /var/lib/etcd/member.

  8. Cambia el propietario del directorio /var/lib/etcd/member a 2003. A partir de la versión 1.10.0 de los clústeres de Anthos en equipos físicos, el contenedor etcd se ejecuta como usuario no raíz con UID y GID de 2003.

    sudo chown -R 2003:2003 /var/lib/etcd
    
  9. Mueve los manifiestos de etcd y kube-apiserver de nuevo al directorio /manifests para que los Pods estáticos puedan reiniciarse.

    sudo mv /backup/etcd.yaml /etc/kubernetes/manifests/etcd.yaml
    sudo mv /backup/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml
    
  10. Ejecuta una shell de Bash en el contenedor de etcd.

    kubectl --kubeconfig CLUSTER_KUBECONFIG exec -it \
        ETCD_POD_NAME --container etcd --namespace kube-system \
        -- bin/sh
    
    1. Usa etcdctl para confirmar que el miembro agregado funciona de forma correcta.
    ETCDCTL_API=3 etcdctl --cert=/etc/kubernetes/pki/etcd/peer.crt  \
        --key=/etc/kubernetes/pki/etcd/peer.key \
        --cacert=/etc/kubernetes/pki/etcd/ca.crt \
        --endpoints=CONTROL_PLANE_IP:2379 \
        endpoint health
    

    Si restableces varios miembros con fallas, una vez que se hayan restablecido todos los miembros con fallas, ejecuta el comando con las direcciones IP del plano de control de todos los miembros restablecidos en el campo “--endpoints”.

    Por ejemplo:

    ETCDCTL_API=3 etcdctl --cert=/etc/kubernetes/pki/etcd/peer.crt  \
        --key=/etc/kubernetes/pki/etcd/peer.key \
        --cacert=/etc/kubernetes/pki/etcd/ca.crt \
        --endpoints=10.200.0.3:2379,10.200.0.4:2379,10.200.0.5:2379 \
        endpoint health
    

    Si se ejecuta de forma correcta para cada extremo, tu clúster debería funcionar bien.