Probablemente tuvo que reconstruir el clúster de Kubernetes después de un error. ¿Ha tenido una estrategia de respaldo inteligente que no requiera arar durante varios días? Sí, puede hacer una copia de seguridad en un clúster etcd, pero ¿qué sucede si solo una parte del clúster se cae o si usa volúmenes persistentes como AWS EBS?
En tales casos, la forma más fácil es usar la utilidad Heptio Ark .
Con Heptio, puede hacer copias de seguridad de todo el clúster, espacios de nombres individuales o tipos de recursos y hacer copias de seguridad a tiempo. Para mí, la principal ventaja de Heptio Ark es su integración con varios proveedores de servicios en la nube, por ejemplo, AWS, Azure, Google Cloud, etc. Por lo tanto, cuando se realiza una copia de seguridad, toma instantáneas de los volúmenes persistentes utilizados.
Veamos cómo instalar esta utilidad y cómo hace copias de seguridad simples y planificadas, y luego las restaura.
Habrá una publicación separada sobre la copia de seguridad de los volúmenes permanentes.
Instalación
Encontrará instrucciones de instalación aquí: ejemplos / README.md. Este proceso creará varias definiciones de recursos personalizados, reglas RBAC (control de acceso basado en roles) que permiten a Heptio realizar copias de seguridad y la implementación. Por defecto, están en el espacio de nombres heptio-ark.
Importante! Después de una instalación exitosa, debe configurar heptio-ark para decirle al servidor qué proveedor de servicios en la nube usar y dónde almacenar las copias de seguridad. Así es como se ve esta configuración:
apiVersion: ark.heptio.com/v1 kind: Config metadata: namespace: heptio-ark name: default backupStorageProvider: name: aws bucket: heptio-backup-bucket config: region: eu-central-1 backupSyncPeriod: 30m gcSyncPeriod: 30m scheduleSyncPeriod: 1m restoreOnlyMode: false
Puedes aplicarlo usando el comando
kubectl apply -f heptio.yaml
Heptio ahora sabe en qué cubo retroceder. La ubicación de almacenamiento de respaldo debe ser accesible desde los hogares de servidor heptio, por lo que puede usar el perfil de instancia con acceso a este depósito o Kube2IAM para perfiles de instancia dinámicos basados en hogar.
Finalmente, para las copias de seguridad, los horarios y la recuperación, debe descargar la CLI de Heptio Ark desde GitHub .
Casi todos los comandos se pueden ejecutar como definiciones de recursos personalizados a través de YAML o JSON.
Copia de seguridad
En este pequeño ejemplo, creé un despliegue simple de NGINX, y antes un servicio en el espacio de nombres del servidor web :
$ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 1 1 1 1 28s NAME DESIRED CURRENT READY AGE rs/nginx-66f5756f9b 1 1 1 28s NAME READY STATUS RESTARTS AGE po/nginx-66f5756f9b-c88ck 1/1 Running 0 28s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/nginx ClusterIP 10.32.0.183 <none> 80/TCP 28s
Hagamos una copia de seguridad de la CLI de Heptio Ark:
$ ark backup create nginx-simple --include-namespaces webserver
Este comando solo realiza una copia de seguridad del espacio de nombres del servidor web . Sin este parámetro, Heptio Ark creará una copia de seguridad completa de todos los recursos en el clúster de Kubernetes. La copia de seguridad llevará algún tiempo. Se guardará una copia en el depósito especificado en S3 ( heptio-backup-bucket ). Para ver el estado y la lista de todas las copias de seguridad, ingrese el siguiente comando en la CLI:
$ ark backup get NAME STATUS CREATED EXPIRES SELECTOR nginx-simple Completed 2018-07-08 17:35:09 +0200 CEST 29d <none>
Como puede ver, la copia de seguridad se ha completado.
Recuperación de respaldo
Eliminemos el espacio de nombres del servidor web (en línea):
$ kubectl delete ns heptio-test
Ahora, restaure el espacio de nombres después de una eliminación "aleatoria", y nuevamente desde la CLI de Heptio Ark:
$ ark restore create --from-backup nginx-simple Restore request "nginx-simple-20180708173924" submitted successfully. Run `ark restore describe nginx-simple-20180708173924` for more details.
Debería ver que el espacio de nombres y todos los recursos (implementación, conjunto de réplicas, sub y servicio) se restauran:
$ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/nginx 1 1 1 1 20s NAME DESIRED CURRENT READY AGE rs/nginx-66f5756f9b 1 1 1 20s NAME READY STATUS RESTARTS AGE po/nginx-66f5756f9b-9mjvg 1/1 Running 0 20s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/nginx ClusterIP 10.32.0.77 <none> 80/TCP 20s
Estructura de respaldo
Para ver la estructura de copia de seguridad, simplemente cárguela desde el depósito en S3 o ingrese el comando Heptio Ark:
$ ark backup download nginx-simple Backup nginx-simple has been successfully downloaded to $PWD/nginx-simple-data.tar.gz

En el archivo webserver.json de nuestro espacio de nombres, vemos un recurso de espacio de nombres regular.
{ "apiVersion":"v1", "kind":"Namespace", "metadata": { "annotations": { "kubectl.kubernetes.io/last-applied-configuration":"{\"apiVersion\":\"v1\",\"kind\":\"Namespace\",\"metadata\":{\"annotations\":{},\"name\":\"webserver\",\"namespace\":\"\"}}\n" }, "creationTimestamp":"2018-07-08T15:26:44Z", "name":"webserver", "resourceVersion":"3364", "selfLink":"/api/v1/namespaces/webserver", "uid":"52698ae7-82c3-11e8-8529-0645eb60c3f4" }, "spec": { "finalizers":["kubernetes"] }, "status": { "phase":"Active" } }
Si no necesitamos una recuperación completa, podemos restaurar solo una parte usando el comando Heptio Ark o ir directamente a la copia de seguridad y restaurar esta parte a través de kubectl.
$ ark schedule create nginx-schedule --schedule="* 10 * * *" --include-namespaces webserver Schedule "nginx-schedule" created successfully.
Copia de seguridad programada
Heptio Ark puede realizar tareas programadas. Indicamos qué recursos y espacios de nombres deben incluirse en la copia de seguridad o excluirse de ella y cuándo hacer una copia de seguridad:
$ ark schedule create nginx-schedule --schedule="* 10 * * *" --include-namespaces webserver Schedule "nginx-schedule" created successfully.
En este caso, se creará una copia de seguridad todos los días a las 10 en punto e incluirá solo el espacio de nombres del servidor web. En la CLI de Heptio Ark, vemos que ha aparecido un calendario y Heptio Ark ya ha creado la primera copia de seguridad:
$ ark schedule get NAME STATUS CREATED SCHEDULE BACKUP TTL LAST BACKUP SELECTOR nginx-schedule Enabled 2018-07-08 17:49:00 +0200 CEST * 10 * * * 720h0m0s 25s ago <none> $ ~/Downloads/ark backup get NAME STATUS CREATED EXPIRES SELECTOR nginx-schedule-20180708154900 Completed 2018-07-08 17:49:00 +0200 CEST 29d <none> nginx-simple Completed 2018-07-08 17:35:09 +0200 CEST 29d <none>
Aquí se indica que las copias de seguridad programadas se eliminan después de 720 horas, es decir, después de 30 días. Cuando crea una copia de seguridad o una programación, puede especificar la duración de la copia: TTL. Después de este período, la copia de seguridad se eliminará del repositorio, en nuestro caso AWS.