Almacenamiento Kubernetes

Instalación y configuración de Kasten K10: Paso a Paso

Este artículo es la segunda parte de nuestra serie sobre la protección de datos en Kubernetes:
1. Protección de Datos en Kubernetes con Kasten K10
2. Instalación y configuración de Kasten K10: Paso a Paso

En esta publicación, vamos a guiarte paso a paso en la instalación y configuración de Kasten K10 en un clúster de Kubernetes que ejecutaremos en Minikube. Si aún no has leído la primera parte, donde hablamos sobre los conceptos básicos y la importancia de Kasten K10 para la protección de datos, te recomendamos hacerlo primero para tener una base sólida antes de seguir adelante.

El objetivo de este tutorial es mostrarte cómo instalar Kubernetes en Minikube, lo que te permitirá probar Kasten en un entorno de laboratorio. También vamos a cubrir cómo instalar y configurar Kasten K10, asegurando que tu entorno esté preparado para gestionar copias de seguridad y restauraciones de manera eficiente. Lo que obtendrás será un clúster de Kubernetes funcional con Kasten K10 y estarás listo para proteger tus aplicaciones en Kubernetes de manera efectiva. Además, te prepararemos para el siguiente paso en esta serie de artículos, donde migraremos una aplicación desde el entorno de desarrollo de Minikube a un clúster de Kubernetes en AWS utilizando EKS usando en todo momento Kasten K10 para estos fines.


Ambiente de kubernetes de prueba

Minikube es una herramienta que te permite ejecutar Kubernetes localmente, facilitando el aprendizaje y desarrollo para Kubernetes. Con Minikube, todo lo que necesitas es un contenedor compatible como Docker, o un entorno de máquina virtual, y Kubernetes estará a solo un comando de distancia: minikube start.

Requisitos Previos

Para instalar y ejecutar Minikube, asegúrate de cumplir con los siguientes requisitos:

La instalación que realizaremos será en el sistema operativo Ubuntu, pero existe soporte para otros sistemas operativos como MacOs y Windows e incluso otras arquitecturas. Para instalar minikube para tu sistema operativo puedes consultar la guia de instalación oficial.

Instalación

Ejecuta los siguientes comandos:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

Iniciar minikube:

Una vez instalado, se inicia el cluster con este comando:

minikube start --kubernetes-version=v1.29  

La salida debe ser similar a esta:

minikube v1.33.1 en Ubuntu 22.04
✨  Controlador docker seleccionado automáticamente. Otras opciones: kvm2, qemu2, virtualbox, none, ssh
📌  Using Docker driver with root privileges
👍  Starting "minikube" primary control-plane node in "minikube" cluster
🚜  Pulling base image v0.0.44 …
💾  Descargando Kubernetes v1.30.0 …
    > preloaded-images-k8s-v18-v1…:  342.90 MiB / 342.90 MiB  100.00% 7.71 Mi
    > gcr.io/k8s-minikube/kicbase…:  481.58 MiB / 481.58 MiB  100.00% 8.94 Mi
🔥  Creating docker container (CPUs=2, Memory=5800MB) …
🐳  Preparando Kubernetes v1.30.0 en Docker 26.1.1…
    ▪ Generando certificados y llaves
    ▪ Iniciando plano de control
    ▪ Configurando reglas RBAC…
🔗  Configurando CNI bridge CNI …
🔎  Verifying Kubernetes components…
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Complementos habilitados: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

Nota: definimos la versión 1.29, ya que mientras escribimos este artículo ya está liberada la versión 1.30 pero kasten aún no la soporta.

Habilitar CSI y VolumeSnapshots

K10 } admite operaciones de instantáneas de volúmenes (VolumeSnaphsots) a través de la interfaz CSI. En minikube, esta compatibilidad se proporciona a través de un addon llamado volumesnapshots. Este aprovisiona los CRD necesarios e implementa el controlador de snaphosts.

Está deshabilitado de forma predeterminada y lo habilitamos de la siguiente forma:

minikube addons enable volumesnapshots
minikube addons enable csi-hostpath-driver

Al habilitar este addon deberá estar presente la storage class llamada csi-hostpath-sc:

kubectk get sc
NAME                 PROVISIONER                RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
csi-hostpath-sc      hostpath.csi.k8s.io        Delete          Immediate           false                  17h
standard (default)   k8s.io/minikube-hostpath   Delete          Immediate           false                  19d

Esta storageclass es la que debemos usar para crear volumenes que kasten pueda respaldar Agregamos una anotación para indicar a kasten cuales son las clases que debe usar:

kubectl annotate volumesnapshotclass csi-hostpath-snapclass k10.kasten.io/is-snapshot-class=true

kubectl annotate storageclass csi-hostpath-sc k10.kasten.io/volume-snapshot-class=csi-hostpath-snapclass

Interactuando con el Clúster

Una vez que hayas iniciado tu clúster con Minikube, puedes interactuar con él usando kubectl con el siguiente comando:

kubectl get pods  -A

NAMESPACE     NAME                               READY   STATUS    RESTARTS   AGE
kube-system   coredns-7db6d8ff4d-7hrbc           1/1     Running   0          3m34s
kube-system   etcd-minikube                      1/1     Running   0          3m49s
kube-system   kube-apiserver-minikube            1/1     Running   0          3m49s
kube-system   kube-controller-manager-minikube   1/1     Running   0          3m49s
kube-system   kube-proxy-tgvn2                   1/1     Running   0          3m35s
kube-system   kube-scheduler-minikube            1/1     Running   0          3m49s
kube-system   storage-provisioner                1/1     Running   0          3m48s

Estos son los pods que se están ejecutando en el cluster en el namespace default. Estamos listos para instalar kasten k10.

Instalación y configuración de Kasten K10

Para instalar k10 es necesario tener instalado helm. Primero, añade el repositorio de Helm de Kasten con el siguiente comando:

helm repo add kasten https://charts.kasten.io/

Antes de instalar Kasten K10, es recomendable realizar algunas verificaciones previas con la herramienta primer y kasten nos otorga un script para hacero. Esta herramienta se ejecuta en un pod del clúster y realiza las siguientes operaciones:

  • Validación de Configuraciones: Verifica si las configuraciones de Kubernetes cumplen con los requisitos de K10.
  • Catalogación de StorageClasses: Lista las StorageClasses disponibles.
  • Validación de Capacidades CSI: Si existe un provisionador CSI, realiza una validación básica de las capacidades CSI del clúster y de cualquier objeto relevante requerido. Se recomienda encarecidamente usar la misma herramienta para una validación más exhaustiva de CSI siguiendo la documentación proporcionada.

Este script de verificación creará y posteriormente eliminará una ServiceAccount y ClusterRoleBinding para realizar comprobaciones de sanidad en el clúster de Kubernetes. La herramienta primer asume que Helm 3 está instalado y que el repositorio de Kasten Helm Charts está configurado.

Ejecuta el siguiente comando para desplegar la herramienta de verificación previa:

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

La salida esperada es como esta:

$ curl https://docs.kasten.io/tools/k10_primer.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10747  100 10747    0     0  51819      0 --:--:-- --:--:-- --:--:-- 51917
Namespace option not provided, using default namespace
Checking for tools
 --> Found kubectl
 --> Found helm
 --> Found jq
 --> Found cat
 --> Found base64
 --> Found tr
Checking if the Kasten Helm repo is present
 --> The Kasten Helm repo was found
Checking for required Helm version (>= v3.11.0)
 --> Helm binary version meet the requirements
K10Primer image
 --> Using Image (gcr.io/kasten-images/k10tools:6.5.14) to run test
Checking access to the Kubernetes context minikube
 --> Able to access the default Kubernetes namespace
K10 Kanister tools image
 --> Using Kanister tools image (gcr.io/kasten-images/k10tools:6.5.14) to run test

Running K10Primer Job in cluster with command
     ./k10tools primer 
serviceaccount/k10-primer created
clusterrolebinding.rbac.authorization.k8s.io/k10-primer created
job.batch/k10primer created
Pod k10primer-qtg4g is in Pending phase
Pod Ready!
================================================================
Kubernetes Version Check:
  Valid kubernetes version (v1.29.4)  -  OK

RBAC Check:
  Kubernetes RBAC is enabled  -  OK

Aggregated Layer Check:
  The Kubernetes Aggregated Layer is enabled  -  OK

         Found multiple snapshot API group versions, using preferred.
CSI Capabilities Check:
  Using CSI GroupVersion snapshot.storage.k8s.io/v1  -  OK

         Found multiple snapshot API group versions, using preferred.
Validating Provisioners: 
hostpath.csi.k8s.io:
  Is a CSI Provisioner  -  OK
  Storage Classes:
    csi-hostpath-sc
      Valid Storage Class  -  OK
  Volume Snapshot Classes:
    csi-hostpath-snapclass
      Has k10.kasten.io/is-snapshot-class annotation set to true  -  OK
      Has deletionPolicy 'Delete'  -  OK

k8s.io/minikube-hostpath:
  Storage Classes:
    standard
      Supported via K10 Generic Volume Backup. See https://docs.kasten.io/latest/install/generic.html.

failed to create fsnotify watcher: too many open files================================================================
serviceaccount "k10-primer" deleted
clusterrolebinding.rbac.authorization.k8s.io "k10-primer" deleted
job.batch "k10primer" deleted


Nota:

Si en la salida del script aparece:

CSI Capabilities Check:  Cluster isn't CSI capable 

Kasten no podrá crear los snapshots y debes seguir los pasos antes descritos para habilitar los addons.

Una vez que hayas completado las verificaciones , puedes proceder con la instalación de Kasten K10. Creamos un namespace en el cluster donde se instalará kasten:

kubectl create namespace kasten-io

Finalmente, para instalar K10 en el namespace kasten-io:

helm install k10 kasten/k10 --namespace=kasten-io

Este comando desplegará Kasten K10 en tu clúster de Kubernetes, listo para gestionar tus backups y restauraciones de manera eficiente. La salida esperada es similar a esta:

NAME: k10
LAST DEPLOYED: Wed May 29 15:22:46 2024
NAMESPACE: kasten-io
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing Kasten’s K10 Data Management Platform 6.5.14!

Documentation can be found at https://docs.kasten.io/.

How to access the K10 Dashboard:

To establish a connection to it use the following `kubectl` command:

`kubectl --namespace kasten-io port-forward service/gateway 8080:80`

The Kasten dashboard will be available at: `http://127.0.0.1:8080/k10/#/`

Finalmente para acceder al dashboard de kasten ejecutamos:

kubectl --namespace kasten-io port-forward service/gateway 8080:80

El comando anterior define el reenvío de puertos entre un puerto local en tu máquina (8080) y un puerto en un servicio de Kubernetes (80) dentro de un espacio de nombres específico. Esto se utiliza a para acceder a servicios que se ejecutan dentro de un clúster de Kubernetes desde tu máquina local.

Una vez que acceder y aceptas los terminos y condiciones, puedes ver el dashboard a continuación:

Se puede cambiar el tema del dashboard desde Settings/Interface, a continuación como se ve el tema ligth:

En el próximo artículo desplegaremos una aplicación con una base de datos y realizaremos el procedimiento de respaldo con Kasten K10.

Author

Guillermo Alvarado

Comment (1)

  1. Protección de Datos en Kubernetes con Kasten K10 – Sentinella
    29/05/2024

    […] Este artículo es la segunda parte de nuestra serie sobre la protección de datos en Kubernetes:1. Protección de Datos en Kubernetes con Kasten K102. Instalación y configuración de Kasten K10: Paso a Paso […]

Leave a comment

Your email address will not be published. Required fields are marked *