En este documento se muestra cómo crear copias de seguridad y restaurar el almacén etcd de un clúster de administrador creado con Google Distributed Cloud (solo software) para VMware. En este documento también se proporciona una secuencia de comandos que puedes usar para crear automáticamente una copia de seguridad del almacén etcd de un clúster. También puedes crear y restaurar una copia de seguridad de un clúster de administrador con la herramienta de línea de comandos gkectl.
Puedes crear un archivo de copia de seguridad para recuperarte de desastres inesperados que puedan dañar los datos de etcd de tu clúster. Almacena el archivo de copia de seguridad en una ubicación que esté fuera del clúster y que no dependa del funcionamiento del clúster.
Limitaciones
El procedimiento de copia de seguridad y restauración descrito en este documento tiene las siguientes limitaciones:
Este procedimiento no crea copias de seguridad de datos específicos de la aplicación.
Este procedimiento no crea copias de seguridad de tus PersistentVolumes.
Las cargas de trabajo programadas después de crear una copia de seguridad no se restauran con esa copia.
No puedes restaurar un clúster después de que falle una actualización.
Este procedimiento no está diseñado para restaurar un clúster eliminado.
No utilices este procedimiento en clústeres con la opción Clúster avanzado habilitada. En su lugar, consulta Crear y restaurar una copia de seguridad de clústeres avanzados con gkectl.
Para obtener más información sobre las limitaciones, consulta Incompatibilidad de la infraestructura.
Crear una copia de seguridad de un clúster de administrador
Una copia de seguridad de un clúster de administrador contiene lo siguiente:
- Una instantánea de etcd del clúster de administrador.
- Los secretos del plano de control de administrador, que son necesarios para autenticar los clústeres de administrador y de usuario.
Sigue estos pasos antes de crear una copia de seguridad de un clúster de administrador:
Busca la dirección IP externa del clúster de administrador, que se usa para conectarse por SSH al plano de control del clúster de administrador:
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get nodes -n kube-system -o wide | grep master
donde [ADMIN_CLUSTER_KUBECONFIG] es el archivo kubeconfig del clúster de administrador.
Crea una clave SSH llamada
vsphere_tmpa partir de la clave privada del clúster de administrador.Puedes encontrar la clave privada en los secretos de los clústeres de administrador:
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get secrets sshkeys -n kube-system -o yaml
En la salida del comando, puedes encontrar la clave privada en el campo
vsphere_tmp.Copia la clave privada en
vsphere_tmp:echo "[PRIVATE_KEY]" | base64 -d > vsphere_tmp; chmod 600 vsphere_tmp
Comprueba que puedes acceder al shell del plano de control de administrador con esta clave privada:
ssh -i vsphere_tmp ubuntu@[EXTERNAL_IP]
Sal del contenedor:
exit
Crear una copia de seguridad del almacén etcd de un clúster de administrador
Para crear una copia de seguridad del almacén etcd del clúster de administrador, sigue estos pasos:
Obtén el nombre del pod de etcd:
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get pods \ -n kube-system -l component=etcd,tier=control-plane -ojsonpath='{$.items[*].metadata.name}{"\n"}'Accede al shell del contenedor kube-etcd del pod:
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] exec -it \ -n kube-system [ADMIN_ETCD_POD] -- bin/shdonde [ADMIN_ETCD_POD] es el nombre del pod de etcd.
En el shell, usa
etcdctlpara crear una copia de seguridad llamadasnapshot.dben el directorio local:ETCDCTL_API=3 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 /tmp/snapshot.dbSal del contenedor:
exit
Copia la copia de seguridad del contenedor kube-etcd con
kubectl cp:kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] cp \ kube-system/[ADMIN_ETCD_POD]:tmp/snapshot.db [RELATIVE_DIRECTORY]
donde [RELATIVE_DIRECTORY] es la ruta en la que quieres almacenar tu copia de seguridad.
Crear copias de seguridad de los secretos de un clúster de administrador
Para crear una copia de seguridad de los secretos del plano de control del administrador, haz lo siguiente:
Usa SSH para conectarte al nodo del plano de control de administrador:
ssh -i vsphere_tmp ubuntu@EXTERNAL_IP
Sustituye
EXTERNAL_IPpor la dirección IP externa del plano de control de administrador, que anotaste anteriormente.Opcional, pero muy recomendable: crea un directorio de copia de seguridad local.
Debes cambiar los permisos de los secretos de copia de seguridad para copiarlos fuera del nodo.
mkdir backup
Copia los secretos localmente en el directorio de copia de seguridad local:
sudo cp -r /etc/kubernetes/pki/* backup/
Cambia los permisos de los secretos de la copia de seguridad:
sudo chmod -R a+rX backup/
Sal del nodo del plano de control de administrador:
exit
Ejecuta
scppara copiar la carpeta de copia de seguridad fuera del nodo del plano de control de administrador:sudo scp -r -i vsphere_tmp ubuntu@EXTERNAL_IP:backup/ RELATIVE_DIRECTORY
Sustituye
RELATIVE_DIRECTORYpor la ruta en la que quieras almacenar la copia de seguridad.
Restaurar un clúster de administrador
.En el siguiente procedimiento se vuelve a crear un clúster de administrador del que se ha hecho una copia de seguridad y todos los planos de control de usuario que gestionaba cuando se creó su copia de seguridad de etcd.
Ejecuta
scppara copiarsnapshot.dben el plano de control de administrador:sudo scp -i vsphere_tmp snapshot.db ubuntu@[EXTERNAL_IP]:
donde [EXTERNAL_IP] es la dirección IP externa del plano de control de administrador, que has obtenido anteriormente.
Accede al shell del plano de control de administrador:
sudo ssh -i vsphere_tmp ubuntu@[EXTERNAL_IP]
Copia
snapshot.db/en/mnt:sudo cp snapshot.db /mnt/
Crea un directorio temporal, como
backup:mkdir backup
Sal del plano de control de administrador:
exit
Copia los certificados en
backup/:sudo scp -r -i vsphere_tmp [BACKUP_CERT_FILE] ubuntu@[EXTERNAL_IP]:backup/
Accede al shell del nodo del plano de control de administrador:
ssh -i vsphere_tmp ubuntu@[EXTERNAL_IP]
donde [EXTERNAL_IP] es la dirección IP externa del plano de control de administrador, que has obtenido anteriormente.
Detén
kube-etcdykube-apiserver.sudo mv /etc/kubernetes/manifests/etcd.yaml /tmp/etcd.yaml
sudo mv /etc/kubernetes/manifests/kube-apiserver.yaml /tmp/kube-apiserver.yaml
Copia los secretos de la copia de seguridad en
/etc/kubernetes/pki/:sudo cp -r backup/* /etc/kubernetes/pki/
Ejecuta
etcdctl restore:ETCDCTL_API=3 sudo etcdctl snapshot restore /backup/snapshot.db sudo rm -r /var/lib/etcd/* sudo mv /default.etcd/member/ /var/lib/etcd/
Reinicia
kube-etcdykube-apiserver.sudo mv /tmp/etcd.yaml /etc/kubernetes/manifests/etcd.yaml
sudo mv /tmp/kube-apiserver.yaml /etc/kubernetes/manifests/kube-apiserver.yaml
Comprueba que
kube-etcdykube-apiserverse hayan iniciado.sudo crictl ps -a
Copia
/etc/kubernetes/admin.confen una carpeta.kubepara que se pueda acceder a ella desde la estación de trabajo del administrador:mkdir -p [HOME]/.kube
sudo cp -i /etc/kubernetes/admin.conf [HOME]/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Sal del plano de control de administrador:
exit
Copia el archivo kubeconfig recién generado del nodo de administrador:
sudo scp -i vsphere_tmp ubuntu@[EXTERNAL_IP]:[HOME]/.kube/config kubeconfig
sudo chown $(id -u):$(id -g) kubeconfig
donde:
- [EXTERNAL_IP] es la dirección IP externa del plano de control de administrador.
- [HOME] es el directorio principal del nodo de administrador.
Ahora puedes usar este nuevo archivo kubeconfig para acceder al clúster restaurado.
Solucionar problemas de restauración de un clúster de administrador
Si tienes algún problema al restaurar el clúster de administrador, debes ponerte en contacto con el equipo de Asistencia de Google para solucionarlo.
Mientras tanto, puedes consultar lo siguiente para seguir solucionando el problema.
Buscar el ID del contenedor etcd
sudo crictl ps -a | grep [ADMIN_ETCD_POD]
donde [ADMIN_ETCD_POD] es el nombre del pod de etcd.
Examina los registros del contenedor etc
sudo crictl logs [ETCD_CONTAINER_ID]
donde [ETCD_CONTAINER_ID] es el ID del contenedor de etcd.
Busca los siguientes mensajes de registro de permiso denegado, como
etcdserver: create snapshot directory error:mkdir /var/lib/etcd/member/snap: permission deniedSi se encuentran mensajes de permiso denegado, actualiza la propiedad de /opt/data/var/lib/etcd/.
sudo chown -R 2001:2001 /opt/data/var/lib/etcd/
Comprueba que
kube-etcdykube-apiserverse hayan iniciado.sudo crictl ps
Copia de seguridad automática de clústeres
Puedes usar la secuencia de comandos que se indica aquí como ejemplo de cómo crear copias de seguridad de tus clústeres automáticamente. Ten en cuenta que la siguiente secuencia de comandos no es compatible y solo debe usarse como referencia para escribir una secuencia de comandos mejor, más sólida y completa. Antes de ejecutar la secuencia de comandos, rellena los valores de las cinco variables que aparecen al principio:
- Define
BACKUP_DIRen la ruta en la que quieras almacenar las copias de seguridad del clúster de administrador y de usuario. Esta ruta no debería existir. - Define
ADMIN_CLUSTER_KUBECONFIGcomo la ruta del archivo kubeconfig del clúster de administrador. - Define
USER_CLUSTER_NAMESPACEcon el nombre de tu clúster de usuario. El nombre de tu clúster de usuarios es un espacio de nombres del clúster de administrador. - Asigna
EXTERNAL_IPal VIP que has reservado para el servicio del plano de control de administrador. - Asigna
SSH_PRIVATE_KEYa la ruta de tu clave SSH. - Si usas una red privada, asigna a
JUMP_IPla dirección IP del servidor de salto de tu red.
#!/usr/bin/env bash
# Automates manual steps for taking backups of user and admin clusters.
# Fill in the variables below before running the script.
BACKUP_DIR="" # path to store user and admin cluster backups
ADMIN_CLUSTER_KUBECONFIG="" # path to admin cluster kubeconfig
USER_CLUSTER_NAMESPACE="" # user cluster namespace
EXTERNAL_IP="" # admin control plane node external ip - follow steps in documentation
SSH_PRIVATE_KEY="" # path to vsphere_tmp ssh private key - follow steps in documentation
JUMP_IP="" # network jump server IP - leave empty string if not using private network.
mkdir -p $BACKUP_DIR
mkdir $BACKUP_DIR/pki
# USER CLUSTER BACKUP
# Snapshot user cluster etcd
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} exec -it -n ${USER_CLUSTER_NAMESPACE} kube-etcd-0 -c kube-etcd -- /bin/sh -ec "export ETCDCTL_API=3; etcdctl --endpoints=https://127.0.0.1:2379 --cacert=/etcd.local.config/certificates/etcdCA.crt --cert=/etcd.local.config/certificates/etcd.crt --key=/etcd.local.config/certificates/etcd.key snapshot save /tmp/${USER_CLUSTER_NAMESPACE}_snapshot.db"
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} cp ${USER_CLUSTER_NAMESPACE}/kube-etcd-0:tmp/${USER_CLUSTER_NAMESPACE}_snapshot.db $BACKUP_DIR/user-cluster_${USER_CLUSTER_NAMESPACE}_snapshot.db
# ADMIN CLUSTER BACKUP
# Set up ssh options
SSH_OPTS=(-oStrictHostKeyChecking=no -i ${SSH_PRIVATE_KEY})
if [ "${JUMP_IP}" != "" ]; then
SSH_OPTS+=(-oProxyCommand="ssh -oStrictHostKeyChecking=no -i ${SSH_PRIVATE_KEY} -W %h:%p ubuntu@${JUMP_IP}")
fi
# Copy admin certs
ssh "${SSH_OPTS[@]}" ubuntu@${EXTERNAL_IP} 'sudo chmod -R a+rX /etc/kubernetes/pki/*'
scp -r "${SSH_OPTS[@]}" ubuntu@${EXTERNAL_IP}:/etc/kubernetes/pki/* ${BACKUP_DIR}/pki/
# Snapshot admin cluster etcd
admin_etcd=$(kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} get pods -n kube-system -l component=etcd,tier=control-plane -ojsonpath='{$.items[*].metadata.name}{"\n"}')
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} exec -it -n kube-system ${admin_etcd} -- /bin/sh -ec "export ETCDCTL_API=3; 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 /tmp/admin_snapshot.db"
kubectl --kubeconfig=${ADMIN_CLUSTER_KUBECONFIG} cp -n kube-system ${admin_etcd}:tmp/admin_snapshot.db $BACKUP_DIR/admin-cluster_snapshot.db
Siguientes pasos
- Crear copias de seguridad de un clúster de usuarios y restaurarlo
- Diagnosticar problemas de clústeres
- Consulta información sobre augur, una herramienta de código abierto para restaurar objetos individuales a partir de copias de seguridad de etcd.