Kubernetes – Respaldando un cluster de k8s con Kasten K10.

Kubernetes – Respaldando un cluster de k8s con Kasten K10.

Kasten K10 es una solución de respaldos para Kubernetes, ya he tocado el tema de los respaldos en dos ocasiones con dos herramientas diferentes, K10 tiene ventajas muy claras en frente a los respaldos de Longhorn o Velero.

El primer punto a favor que tiene la herramienta es la facilidad con la que se instala, sin embargo, K10 hace uso de funcionalidades que no vienen hábiles por defecto y tenemos que aplicar CRDs al cluster. K10 se apoya de VolumeSnapshot de Kubernetes que hasta hace varias versiones era Beta y que aun en versión 1.19 se deben agregar de manera manual algunos CRD.

Otro punto a tener en cuenta es que la solución de almacenamiento habilitada en k8s debe soportar el CSI de snapshots. En mi ambiente de “producción” estoy usando Longhorn 1.0.2 y esta opción solo está disponible para la versión 1.1.0, esto quiere decir que la instalación descrita en este artículo fue hecha en un cluster para estos fines ya que por circunstancias ajenas aun no puedo actualizar Longhorn a la última versión.

Que tiene de impresionante K10?

Lo primero es su versión free que soporta hasta 10 nodos de Kuberentes, sin importar la cantidad de data o deployments que este cluster contenga, podrás hacer respaldos tanto de la data como de las definiciones, configmaps y secrets.

Actualmente hago uso de los snapshot/backups de Longhorn a Minio, estos respaldos no son administrados por k8s y no sabe que existen, a su vez para poder hacer respaldos de la otra información en el cluster uso Velero, son dos herramientas con conocimiento muy diferente que se deben administrar para lograr lo que ahora lograre hacer con solo K10.

Prerequisitos.

kubectl

helm

Instalando.

Para instalar K10 primero debemos tener Kubectl y Helm disponibles para ejecutar, luego agregamos el repo que contiene los Charts a nuestro repositorio local de helm, creamos un namespaces y lanzamos la instalación en ese namespace, listo.

Así de fácil! ??

No, en mi caso no fue así.

Lo mejor es seguir las recomendaciones y nos libraremos de muchos dolores de cabeza y troubleshooting cuando veamos que nuestros respaldos siempre fallan diciendo que no se puede hacer un snapshot.

https://docs.kasten.io/latest/install/requirements.html#install-prereqs

Debemos ejecutar un script bash, siempre tener en cuenta que al momento de ejecutar scripts bash desde Internet, existe la posibilidad de comprometer el servidor donde se está ejecutando dicho script. Dicho esto:

curl https://docs.kasten.io/tools/k10_primer.sh | bash

El script revisa que las herramientas necesarias están disponibles, en este caso kubectl y helm, revisa que hallamos agregado el repositorio a helm, descarga un contenedor el cual será ejecutado en el cluster y este se asegurara que dicho cluster cumple con los requisitos.

En el mejor de los casos tendremos mensajes con un OK de color verde al final, pero como pueden ver en esta imagen tenemos dos errores, estos son relacionados con las capacidades de CSI (no existe un CRD para VolumeSnapshot) y no tenemos un VolumeSnapshotClass disponible y asociado al driver de Longhorn.

Estos errores son debido a que nos saltamos la instalación de los CRD antes mencionados, esto fue lo que me paso en mi cluster de “producción” y luego de investigar más a fondo y entender que no contaba con VolumeSnapshot ni nada parecido, por esta razón no podía hacer ningún respaldo.

RTFM – así dicen.

Después de invertir un buen rato en kubernetes.io, la documentación de Longhorn y la documentación de K10, descubrí que faltaban varios componentes.

1 – CRDs de VolumeSnaphiot y VolumeSnapshotContent

2 – La versión de longhorn instalada no cuenta con la implementación de csi-snapshotter.

3 – Crear un VolumeSnapshotClass con la anotación de k10.

Al terminar la evaluación de todos los cambios que tenía que realizar y al ser mi cluster de producción, decidí crear un nuevo cluster desde Rancher UI y su integración a vSphere.

Luego de solicitar la creación de un nuevo cluster de Kubernetes (RKE) en vSphere procedemos a copiar el kubeconfig desde el portal de Rancher y cargarlo en KUBECONFIG.

Ahora procedemos a crear los nuevos recursos en forma de CRD, los pasos están muy bien detallados en la página de Kubernetes-CSI en GitHub: https://kubernetes-csi.github.io/docs/snapshot-controller.html

CRDs – esto debe realizar en todos los cluster que queramos tener snapshots.

kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-2.0/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml

kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-2.0/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml

kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-2.0/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml

Snapshot Controller – al igual que el CRD, se debe realizar en todos los cluster.

kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-2.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml

kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-2.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml

Longhorn version 1.1.0

La versión actual de Longhorn que tengo instalada es 1.0.201, al momento de escribir este post, esa es la versión más reciente. Teniendo en cuenta que Longhorn acaba de liberar hace más de 15 días una versión 1.1.0 que cuenta con la funcionalidad que se necesita para lograr hacer snapshot desde k8s. Al parecer son dos Helm Charts diferentes y aún no está listo el Chart para Cluster Explorer de Rancher UI.

Esta fue la principal razón por la que decidí levantar un nuevo cluster para probar que corriendo Longhorn 1.1.0 se pueden hacer los respaldos con K10.

En lugar de usar el Chart desde Cluster Explorer, procedí a usar el viejo método [Rancher dice que esto será eliminado en futuras versiones] e instalar la versión 1.1.0 de longhorn.

Otra configuración que debemos crear es un VolumeSnapshotClass, esta configuración ayuda a K10 a detectar que almacenamiento soporta snapshots para realizar respaldos.

apiVersion: snapshot.storage.k8s.io/v1beta1
driver: driver.longhorn.io
kind: VolumeSnapshotClass
deletionPolicy: Delete
metadata:
  annotations:
    k10.kasten.io/is-snapshot-class: "true"
  name: csi-hostpath-snapclass

Ejecutamos nuevamente el script de pre-flight, ahora si tenemos todo verde!!!

Todo verde !!!

Ya que este es un cluster nuevo y no existe el namespace de kasten-io, podemos proceder a realizar los pasos descritos en https://docs.kasten.io/latest/install/requirements.html#prerequisites

Todo se está creando en el namespace aplicado en Helm. Cuando todo este “Running” podemos proceder a hacer el port-forward y conectarnos al dashboard de K10.

Ya podemos proceder a crear las configuraciones iniciales!!

Esta entrada se queda hasta este punto ya que debo realizar algunas pruebas y determinar si la nueva versión de Longhorn con su csi-snapshotter funciona con Kasten k10.

Autor: Ariel Antigua

Automation guy with a love for Containers!