Ir al contenido
  1. Blog/

Veeam + Kasten

··2248 palabras·11 mins·
Autor
Marco Escobar
Data protection, Kubernetes, ciberseguridad e IA. Guías prácticas desde la trinchera: Veeam, Kasten, VMware, Oracle, cloud y lo que sea que esté rompiendo en el homelab esta semana.
Tabla de contenido
Veeam + Kasten — veeam kasten final

Excelente noticia! La adquisición de Kasten por Veeam Software, lo cual amplia las bondades de protección de datos de Veeam en los centros de datos modernos con tecnologías de contenedores usando Kubernetes o k8s. En este post veremos la instalación, configuración y recuperación de contendores con Kasten en un cluster de Kubernetes basado en Tanzu Kubernetes Grid.

Introducción
#

Ahora más de alguno/a se preguntará, ¿Qué es Kasten?, Bueno, Kasten es el líder de respaldo y recuperación ante desastres para Kubernetes, una de las características importantes es que es una solución muy fácil de usar, está desarrollada para kubernetes y en una arquitectura nativa para Cloud.

Es por ello que Kasten puede ayudar a proteger tus contenedores con integración de aplicaciones ya sea en Cloud Publicas o Privadas, por ejemplo, Google Kubernetes Engine, AWS Elastic Kubernetes Services, Azure Kubernetes Services, IBM Kubernetes Services, VMware vSphere, Red Hat OpenShift, entre otros.

Como también integrarse con distintas tecnologías de Storage, como por ejemplo:

  • Amazon Elastic Block Store (EBS)
  • Amazon Elastic File System (EFS)
  • Azure Managed Disks
  • Google Persistent Disk
  • IBM Cloud Block Storage
  • Ceph (RBD)
  • Cinder-based providers on OpenStack
  • vSphere Cloud Native Storage (CNS) (Requiere vSphere 6.7u3+)
  • Portworx
  • Pure Storage
  • Netapp

Además permite realizar migraciones de contenedores entre distintos servicios de contenedores para el caso de algún desastre, cambio de proveedor, pruebas o simplemente mantener una arquitectura hibrida.

Si quieres saber más de Kasten, puedes ingresar a su Web y a la Web de documentación:

https://www.kasten.io/

https://docs.kasten.io/latest/

Luego de saber un poco que es Kasten, comenzaremos por detallar que tengo como ambiente para respaldar mis contenedores Tanzu Kubernetes Grid 1.1.3, en vSphere 7 Update 1, recuerda que se puede usar desde vSphere 6.7 Update 3

Cluster Productivo de Tanzu Kubernetes Grid:
#

Veeam + Kasten — captura 1
Veeam + Kasten — captura 2

Donde el management cluster esta con un plan productivo, y para el cluster de aplicaciones también use el plan productivo para utilizar múltiples roles de k8s, si quieres saber mas de los planes que ofrece Tanzu Kubernetes Grid o TKG visita:

https://docs.vmware.com/en/VMware-Tanzu-Kubernetes-Grid/1.1/vmware-tanzu-kubernetes-grid-11/GUID-tanzu-k8s-clusters-create.html

Y si revisamos los recursos del cluster podremos observar:

Veeam + Kasten — captura 3

Con el comando:

 kubectl get pvc,pv,sc --all-namespaces
```bash

Nos indicará las solicitudes de discos pvc (PersistentVolumeClaim) para aplicaciones, volúmenes persistentes que son provistos por el sistema o dinámicos pv (PersistenVolume), y la clase de storage o almacenamiento se ofrece al cluster sc (Storage Classes).

```bash
kubectl get pod --all-namespaces
```bash

Nos indicara todos los pods que instala por defecto Tanzu al crear un cluster y sus respectivos namespaces, que nos permite identificar el proyecto que se instale en el cluster.

```bash
kubectl get node --all-namespaces
```text

Y por ultimo ver la cantidad de nodos que están involucrados en el cluster y su respectivo rol, como se puede observar en las imagen anterior es posible ver:

```text
kube-system   vsphere-csi-controller-8c9b98f7f-tt9p6                   5/5     Running   8          3h30m
kube-system   vsphere-csi-node-5k2fp                                   3/3     Running   0          3h17m
kube-system   vsphere-csi-node-5skv2                                   3/3     Running   3          3h11m
kube-system   vsphere-csi-node-g9dpn                                   3/3     Running   0          3h17m
kube-system   vsphere-csi-node-rptch                                   3/3     Running   3          3h30m
kube-system   vsphere-csi-node-vgn7s                                   3/3     Running   3          3h17m
kube-system   vsphere-csi-node-xg6mb                                   3/3     Running   3          3h17m

```bash

Lo que nos indica que ya se encuentra instalado el driver CSI de vSphere, CSI es el acrónimo de Container Storage Interface:

[https://github.com/kubernetes-sigs/vsphere-csi-driver](https://github.com/kubernetes-sigs/vsphere-csi-driver)

Este driver es la pieza esencial para la integración de Kubernetes con vSphere ya que permite crear discos para asignarlos a los volúmenes persistentes necesarios para las aplicaciones instaladas en el cluster de Tanzu Kubernetes Grid.

## Storage Class

Ahora una de las requerimientos de Kasten son discos persistentes y como vimos anteriormente, el cluster por defecto no posee ningún Storage Class habilitado, por tanto, la aplicación que instalemos no podrá crear los volúmenes que necesite para su funcionamiento, para ello debemos ejecutar en la maquina que esta administrando TKG:

```bash
echo "
 kind: StorageClass
 apiVersion: storage.k8s.io/v1
 metadata:
   name: 24xs-vol
   annotations:
     storageclass.kubernetes.io/is-default-class: \"true\"
 provisioner: csi.vsphere.vmware.com
 parameters:
   DatastoreURL: "ds:///vmfs/volumes/5b00a1aa-6b210381-9411-54e1ad1b3bcd/"
   fstype: ext4
 " > 24xs-vol.yaml
 kubectl create -f 24xs-vol.yaml
```bash

Donde en la linea **5** podemos asignar el nombre del Storage Class, en la linea **7** asegurarnos que el valor sea " **true**" ya que con esto nos aseguramos que quede por defecto configurado y habilitado, linea **8** nos aseguramos que es el driver csi de vsphere, en la linea **10** es clave para indicarle la url del Datastore que utilizaremos como destino de los volúmenes persistentes en vSphere (en la siguiente imagen veras de donde tomar el dato) y por ultimo el nombre del archivo para guardarlo con su extensión .yaml.


Veeam + Kasten — captura 4
Veeam + Kasten — captura 5
Como observamos en la imagen anterior el primer comando nos muestra que no tenemos ningún Storage Class en nuestro cluster de Tanzu y luego ejecutamos el archivo para generar el Storage Class que podemos ver con el comando: ```bash kubectl get sc ```bash
Veeam + Kasten — captura 6
Ahora, si revisamos el monitoreo del DataStore que seleccionamos para ser el almacenamiento de nuestros volúmenes persistentes, veremos lo siguiente en vCenter:
Veeam + Kasten — captura 7
Por tanto ya tenemos todo listo para instalar Kasten k10 en su ultima versión 2.5.22. ## Instalación de Kasten Ahora revisaremos los prerrequisitos de Kasten que los puedes encontrar: [https://docs.kasten.io/latest/install/requirements.html](https://docs.kasten.io/latest/install/requirements.html) Lo primero que necesita es instalar helm, que es una administrador de paquetes para instalar fácilmente aplicaciones: [https://helm.sh/](https://helm.sh/) La instalación de helm es muy sencilla solo debemos descargar el archivo desde github y moverlo a la carpeta de ejecutables del servidor que estas usando para administrar Tanzu Kubernetes Grid o TKG: ```bash wget https://get.helm.sh/helm-v3.3.4-linux-amd64.tar.gz ```json
Veeam + Kasten — captura 8
```bash tar xvzf helm-v3.3.4-linux-amd64.tar.gz ```json
Veeam + Kasten — captura 9
```text cd linux-amd64/ ```bash
Veeam + Kasten — captura 10
Y por ultimo lo movemos a la carpeta de ejecutables: ```bash mv helm /usr/local/bin/ ```bash
Veeam + Kasten — captura 11
si ejecutamos el comando helm versión veremos la versión de helm:
Veeam + Kasten — captura 12
Como indica el manual de Kasten, lo que debemos realizar ahora es agregar el repositorio de Kasten en helm, con el siguiente comando: ```bash helm repo add kasten https://charts.kasten.io/ ```bash
Veeam + Kasten — captura 13
Y luego crear el nombre del proyecto o namespace con el comando: ```bash kubectl create namespace kasten-io ```bash
Veeam + Kasten — captura 14
Luego procederemos a la instalación como se indica en: [https://docs.kasten.io/latest/install/vmware/vsphere.html](https://docs.kasten.io/latest/install/vmware/vsphere.html) El primer comando a ejecutar es: ```bash helm install k10 kasten/k10 --namespace=kasten-io ```bash Los cual nos mostrará:
Veeam + Kasten — captura 15
Y luego con el siguiente comando podremos ver el progreso de instalación: ```bash kubectl get pods --namespace kasten-io --watch ```bash Y podremos ver:
Veeam + Kasten — captura 16
Debemos asegurarnos que todos los pods se encuentren en estado " **Running**" ya que con esto luego podremos acceder a la consola de Kasten. Si revisamos nuestro Datastore que anteriormente no almacenaba volúmenes persistentes y actualizamos podremos observar:
Veeam + Kasten — captura 17
Veeam + Kasten — captura 18
Nos listará los volúmenes usados por Kasten para su correcto funcionamiento. Y volvemos a asegurarnos que todos los pods estén en su estado "Running":
Veeam + Kasten — captura 19
Y ya tenemos instalado Kasten! ## Acceder a Kasten Como vimos en una imagen anterior, Kasten nos indico que para acceder al Dashboard necesitamos ingresar un comando: ```bash kubectl --namespace kasten-io port-forward service/gateway 8080:8000 ```text Y luego ingresar a la url: ```text http://127.0.0.1:8080/k10/#/. ```bash Y obviamente si es que tienes instalado GUI o Desktop en tu linux de administración de Tanzu Kubernetes Grid podrás acceder. Pero que pasa si no tengo instalado GUI y necesito acceder desde la red via Web? Existen distintas formas de acceder al Dashboard de Kasten, aquí veremos la mas simple y rápida con autenticación que inclusive también lo puedes encontrar en el manual de Kasten, de hecho revisaremos los siguientes links: [https://docs.kasten.io/latest/access/dashboard.html#dashboard](https://docs.kasten.io/latest/access/dashboard.html#dashboard) [https://docs.kasten.io/latest/access/authentication.html#basic-auth](https://docs.kasten.io/latest/access/authentication.html#basic-auth) ```bash https://hostingcanada.org/htpasswd-generator/ ```bash El primer link nos dice las múltiples formas de ingresar al Dashboard, en este caso utilizaremos " **Accessing via a LoadBalancer**", para ello instalaremos "metallb" que es un balanceador para k8s: [https://metallb.universe.tf/](https://metallb.universe.tf/) La instalación es muy sencilla, debemos ejecutar el siguiente comando: ```bash kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.3/manifests/metallb.yaml ```bash
Veeam + Kasten — captura 20
Y ya está instalado. Ahora lo configuraremos con el rango de direcciones IP que deseamos que trabaje: ```bash cat <<EOF | kubectl apply -f - apiVersion: v1 kind: ConfigMap metadata: namespace: metallb-system name: config data: config: | address-pools: - name: default protocol: layer2 # MetalLB IP Pool addresses: - 20.20.20.110-20.20.20.140 EOF ```bash En la linea **15**, debemos ingresar un pool de direcciones IP para que las asigne a los servicios que instalemos. Y ejecutamos:
Veeam + Kasten — captura 21
Luego de esto volvemos a la configuración de Kasten, debemos generar una contraseña htpasswd, en los links anteriores aparece una web que nos permite realizarlo online:
Veeam + Kasten — captura 22
Copiamos el usuario y contraseña y lo agregamos en el siguiente comando (Si copian y pegan la contraseña cifrada es 24xsiempre.com): ```bash helm upgrade k10 kasten/k10 --namespace=kasten-io \ --set auth.basicAuth.enabled=true \ --set auth.basicAuth.htpasswd='admin:$apr1$8zsf2361$V3BlxNRZsfbnUmDFM.XRa1' ```bash En la linea **3**, debes copiar tu usuario y password generado en la web. Luego ejecutamos:
Veeam + Kasten — captura 23
Con el comando anterior solo configuramos el mecanismo de autenticación, ahora con la siguiente instrucción le indicaremos que nos permita acceder a través del gateway de Kasten y el balanceador: ```bash helm upgrade k10 kasten/k10 --namespace=kasten-io \ --reuse-values \ --set externalGateway.create=true ```bash
Veeam + Kasten — captura 24
Vimos que el mensaje cambió y Kasten ahora nos indico que debemos acceder al Dashboard vía: ```bash The K10 Dashboard is accessible via a LoadBalancer. Find the service's EXTERNAL IP using: `kubectl get svc gateway-ext --namespace kasten-io -o wide` And use it in following URL `http://SERVICE_EXTERNAL_IP/k10/#/` ```bash Por tanto, solo nos queda saber la dirección IP para acceder, la cual la obtendremos con el siguiente comando: ```bash kubectl get svc gateway-ext --namespace kasten-io -o wide
Veeam + Kasten — captura 25

**Cabe señalar que tengo habilitado DHCP en TKG**

En mi caso la url de acceso será http://kastentkg.24xsiempre.cl/k10/#/ ya que la dirección IP la asocie al DNS (Si no accede directamente a la IP de EXTERNAL-IP) y solicitará el usuario y contraseña antes configurado a través de la pagina que genera el htpasswd:

Veeam + Kasten — captura 26

Y veremos la pantalla de Bienvenida de Kasten, ingresamos empresa, correo y aceptamos:

Veeam + Kasten — captura 27

Configuración de Kasten
#

Ya tenemos funcionando Kasten, con posibilidad de acceder remotamente con usuario y contraseña, ahora solo nos falta habilitar y configurar la solución, en la parte inferior del Dashboard aparece un mensaje importante " K10 Disaster Recovery is not enabled for this cluster. "

Veeam + Kasten — captura 28

Hacemos clic en " See Settings" donde nos indicara que debemos realizar algunas configuraciones antes de Habilitar Kasten:

Veeam + Kasten — captura 29

Hacemos clic en " Locations" y crearemos un nuevo perfil, en este caso Amazon s3:

Veeam + Kasten — captura 30

Como se observa, podrás utilizar distintos perfiles para almacenar los Containers los que pueden ser:

  • Google Cloud Storage
  • Amazon S3
  • Azure Storage
  • S3 Compatible

Ingresas los datos solicitados y veremos el perfil creado:

Veeam + Kasten — captura 31

Luego clic en " Infrastructure" y generaremos un perfil para vSphere:

Veeam + Kasten — captura 32

Al igual que el perfil anterior, tenemos distintas opciones:

  • OpenStack
  • Ceph
  • Portworx
  • vSphere

Ahora volvemos a hacer clic en " K10 Disaster Recovery" y procederemos a habilitar Kasten haciendo clic en " Enable K10 DR", seleccionamos el perfil de " Location" y asignamos una contraseña para cifrar los respaldos. Muy importante Guarda la contraseña ya que la necesitaras en algunas recuperaciones

Veeam + Kasten — captura 33

Y después si Quieres cambias el tema del Dashboard en el menú “Dashboard” y volvemos al inicio para configurar Políticas de respaldo:

Veeam + Kasten — captura 34

Paralelamente instalé un wordpress en su propio namespace para ver los respaldos de una aplicación adicional:

Veeam + Kasten — captura 35

Al crear un nuevo namespace, Kasten lo reconocerá automáticamente en la parte de " Applications" e indicará que se encuentra " Unmanaged" ya que no tiene ninguna política de respaldo asociada:

Veeam + Kasten — captura 36
Veeam + Kasten — captura 37

Puedes lanzar un " Snapshot" directamente desde " Applications", realizar tareas de restauración o " Export" el Container que desees.

Políticas de Respaldos
#

Ingresaremos a " Policies" y veremos una política por defecto de Kasten para protegerse a sí mismo:

Veeam + Kasten — captura 38

El cual, como recomendación, no debemos cambiar ya que estará ejecutándose con su respectiva política de retención.

Veeam + Kasten — captura 39

Ahora haremos clic en " Create New Policy" e ingresaremos los datos solicitados:

Veeam + Kasten — captura 40
Veeam + Kasten — captura 41

Donde ingresamos el nombre, comentarios y la acción, para el caso de protección de datos necesitamos seleccionar " Snapshot" y seleccionar la frecuencia de los snapshots y su respectiva retención. Si haces clic en " Show Advanced Frequency Options" podrás seleccionar la hora de ejecución:

Veeam + Kasten — captura 42

Luego si lo deseamos, podemos exportar los respaldos hacia el bucket S3 habilitando " Backups via Snapshot Exports":

Veeam + Kasten — captura 43

Luego seleccionaremos la aplicación a respaldar, buscándola por " Name" o si quieres por " Label" en este caso seleccionare wordpress

Veeam + Kasten — captura 44

Y por ultimo hacemos clic en " Create Policy"

Veeam + Kasten — captura 45

Ahora podemos ejecutar el respaldo directamente o esperar la agenda. Lo ejecutare para ver el respaldo haciendo clic en " Run once"

Veeam + Kasten — captura 46

Y volveremos al Dashboard para ver el estado del respaldo:

Veeam + Kasten — captura 47

Además veremos las ejecuciones de snapshots en vCenter:

Veeam + Kasten — captura 48

También veremos todas las ejecuciones que configuramos en la política:

Veeam + Kasten — captura 49

Y ya estamos respaldando nuestro Tanzu Kubernetes Grid con Kasten!

Recuperación Containers con Kasten
#

Si hacemos clic en " Applications" veremos nuestra política de respaldo exitosa para wordpress:

Veeam + Kasten — captura 50

En la parte inferior de la política podrás ver un botón " Restore" nos mostrara los puntos de restauración que tenemos:

Veeam + Kasten — captura 51

Y si hacemos clic en el punto de restauración:

Veeam + Kasten — captura 52

Nos permitirá elegir desde donde deseas recuperar, ya sea desde s3 o del snapshot local, en este caso seleccionare el local:

Veeam + Kasten — captura 53

Para confirmar:

Veeam + Kasten — captura 54

Y por ultimo volvemos al Dashboard para ver el estado:

Veeam + Kasten — captura 55

Y podremos ver la recuperación exitosa:

Veeam + Kasten — captura 56

Existen múltiples opciones de recuperación que se deben analizar de acuerdo a la necesidad, pero como vimos el respaldo es simple, la detección de los namespaces lo hace automáticamente y es muy fácil configurar políticas de respaldos, en el siguiente link tienes el detalle de todas las opciones de recuperación:

https://docs.kasten.io/latest/usage/restore.html

Y con eso finalizamos esta guía para usar Kasten! Cualquier idea es bienvenida como siempre!

Posts relacionados
#