Instalar Kasten Multi-Cluster Manager

En esta guía revisaremos como instalar Kasten Multi-Cluster Manager para la gestión y protección de contenedores de múltiples clusters de kubernetes en diferentes ambientes con la administración centralizada de recursos. Por lo general en la mayoría de las empresas que mantienen equipos de desarrollo de aplicaciones existen distintos tipos de ambientes como por ejemplo , Desarrollo, QA y Producción, en otras empresas también manejan ambientes de Pre-Producción, Stagging, UAT, etc. De igual manera todo depende mucho del ciclo de vida del desarrollo como de las arquitecturas de cada empresa, es por esto que con Kasten Multi-Cluster Manager podremos conseguir la protección de múltiples ambientes y/o clusters de kubernetes.

Pasos Iniciales

Como comentaba anteriormente es necesario tener una protección de tus datos independientemente de donde este alojados o el tipo de carga de trabajo, ya que en caso de algún desastre, ataque de malwares u otros motivos es posible perder datos y más aun que hoy en día manejamos los datos en muchos ambientes, esparcidos geográficamente y que necesitan una gestión centralizada de los recursos y también la protección de éstos.

Es por ello, Kasten by Veeam desarrolló la solución Kasten Multi-Cluster Manager que nos permite gestionar los recursos de respaldo centralizadamente como también la protección de datos basadas en políticas de respaldos para los clusters. Como siempre revisaremos la documentación oficial que encontraremos

https://docs.kasten.io/latest/multicluster/index.html

Ambientes

Para esta guía tengo dos cluster de kubernetes integrados con vSphere a través de vSphere-CSI, cada uno con 3 nodos Worker y 1 Master, también tengo un ubuntu Linux que utilizo para la administración de kubernetes. Ademas tienen instalado contenedores de mongodb, MySQL y WordPress para validar el respaldo de los ambientes con aplicaciones, aparte de todos los servicios asociados al cluster.

Debemos tener instalado en cada cluster de kubernetes o tu distribución de kubernetes, Kasten K10, si aun no lo tienes instalado, puedes seguir la guía que aplica para cualquier versión de kasten k10:

https://24xsiempre.com/veeam-kasten/#Instalacion_de_Kasten

Y una consideración importante es definir cual sera tu Cluster Primario y Secundario(s), en este caso yo definiré mi cluster de nombre “produccion” como primario y el secundario como “desarrollo”, esto es clave para la configuración del Multi-Cluster de Kasten.

Kubernetes Contexts

Esta configuración de kubernetes contexts nos permitirá en pocas palabras administrar múltiples clusters de kubernetes centralizadamente y nativamente desde una maquina que contenga los archivos de configuración y/o conexión, comúnmente conocidos como KUBECONFIG, por tanto procederemos a copiarlos a la maquina de administracion

scp /home/mescobar/.kube/config [email protected]:/home/mescobar/.kube/produccion
scp /home/mescobar/.kube/config [email protected]:/home/mescobar/.kube/desarrollo

En los comandos anteriores estoy copiando el archivo de configuración desde mis servidores MASTER donde comúnmente lo encontraras en $HOME/.kube/config o dentro del home del usuario que estas usando en la carpeta oculta .kube hacia mis servidor de administración (mgmtCLI). En el caso que por algún motivo no encuentres el archivo de configuración, puedes copiar el siguiente archivo de la siguiente ruta hacia tu servidor de administración

sudo scp /etc/kubernetes/admin.conf [email protected]:/home/mescobar/.kube/produccion

Ahora si listamos el directorio podremos ver los distintos archivos de los clusters

Y con el siguiente comando revisaremos que archivo de configuración esta cargado

echo $KUBECONFIG
kubectl config get-contexts

Como se ve en la imagen anterior tengo otro archivo de configuración y esta cargado en el contexto, por tanto vamos a configurar la variable de entorno KUBECONFIG para que cargue los clusters cada vez que ingresemos con nuestro usuario al servidor de administración, por tanto realizaremos lo siguiente

cd $HOME
nano .bashrc

Y nos dirigimos a la ultima linea y agregaremos

export KUBECONFIG=$HOME/.kube/produccion

Guardamos el archivo y ejecutamos el siguiente comando para cargar la variable de entorno

. .bashrc

Asi con esto podremos validar nuevamente si esta cargado el archivo que necesitamos

echo $KUBECONFIG
kubectl config get-contexts

Configuración Contexts

Como podemos ver en la imagen anterior, el nombre de nuestro cluster esta por defecto “[email protected]” lo cual podría traer confusión para saber cual cluster estamos administrando, es por eso que vamos a cambiar el nombre para que sea mucho mas facil con el siguiente comando:

kubectl config rename-context [email protected] produccion

Ahora ya tenemos identificado el cluster y procederemos a agregar el cluster de desarrollo. Como vimos en un punto anterior agregaremos en el archivo .bashrc la ruta del archivo de configuración de desarrollo y ejecutaremos el comando para cargar esa nueva variable (utiliza el nombre de archivo que pertenece a tus clusters)

export KUBECONFIG=$HOME/.kube/produccion:$HOME/.kube/desarrollo

Ejecutamos los comandos para cargar la variable y ver los contexts

y nuevamente cambiamos el nombre por defecto para identificar el ambiente de desarrollo

kubectl config rename-context [email protected] desarrollo

Por que realizamos lo anterior? netamente por que cuando se configuran cluster de kubernetes por con configuraciones por defecto, el nombre del cluster siempre será [email protected], también el nombre del cluster sera kubernetes, el cambio de nombre en el contexto es importante para saber a que cluster nos estaremos conectando. Y por ultimo para cambiar entre clusters o contextos utilizaremos el siguiente comando

kubectl config use-context desarrollo

Como podrás observar en la imagen anterior o en tu sesión, para ver el cambio de contexto se confirma en la columna “CURRENT” donde se ve un * es el cluster que actualmente estas administrando. Ademas como recomendación en los archivos de configuración puedes cambiar el nombre del cluster para asegurarte aun más sobre que cluster estás usando, de igual manera hay muchísima información en Internet que cubre esta configuración.

Configuración Kasten

Como recordarás, anteriormente definimos nuestros cluster’s primarios y/o secundarios ya que es un requerimiento de Kasten Multi-Cluster que deben tener instalado Kasten k10 y otro requerimiento que debemos cumplir es que la autenticación de los Kasten k10 instalados en cada uno de los cluster’s que serán SECUNDARIOS deben ser vía token. Por tanto podemos utilizar la autenticación que deseemos en el cluster primario, pero siempre sera obligatoria la autenticación por token en los cluster secundarios. Para mayor información:

https://docs.kasten.io/latest/access/authentication.html#token-authentication

Ahora en nuestros cluster secundarios configuraremos la autenticación por token para lo cual deben ejecutar el siguiente comando en el contexto de su cluster secundario o directamente en el servidor master del CLUSTER SECUNDARIO

helm upgrade k10 kasten/k10 --namespace=kasten-io \
>     --reuse-values \
>     --set externalGateway.create=true \
>     --set auth.tokenAuth.enabled=true

Con el comando anterior ejecutado en el o los clusters SECUNDARIOS no aseguramos que se autentiquen vía token. Y el cluster PRIMARIO puede utilizar el método de autenticación que sea necesario. En este caso en el cluster PRIMARIO utilizaremos autenticación básica, para configurar esto es necesario ejecutar (usuario y contraseña “kasten”):

helm upgrade k10 kasten/k10 --namespace=kasten-io \
    --set auth.basicAuth.enabled=true \
    --set auth.basicAuth.htpasswd='kasten:$apr1$twc26zga$AA47exHs1a3uNq/4lDKxD.' \
    --set externalGateway.create=true

Y luego para saber la direccion ip que estara usando este acceso con el comando

kubectl get svc gateway-ext --namespace kasten-io -o wide

Y en la columna “EXTERNAL-IP” podrás ver la dirección IP asignada por MetalLB y por supuesto lo puedes asociar a un DNS, en mi caso utilizare kasten.24xsiempre.cl y kastendev.24xsiempre.cl para acceder a los clusters.

Configuración Kasten Multi-Cluster Manager

Ahora que tenemos nuestros clusters configurados con los requisitos para Multi-Cluster de Kasten, pasaremos a descargar la solucion en nuestro servidor de administracion o en el servidor que estas usando como MASTER para la gestion de los cluster. Para descargar Kasten Multi-Cluster Manager, lo debes realizar desde la siguiente dirección (A la fecha descargaremos la versión 4.0.3):

https://github.com/kastenhq/external-tools/releases/download/4.0.3/k10multicluster_4.0.3_linux_amd64

Para descargar directo desde la linea de comandos, otorgar permisos de ejecución y mover a directorio ejecutable:

wget https://github.com/kastenhq/external-tools/releases/download/4.0.3/k10multicluster_4.0.3_linux_amd64
chmod +x k10multicluster_4.0.3_linux_amd64
sudo mv k10multicluster_4.0.3_linux_amd64 /usr/local/bin/k10multicluster
k10multicluster

Ahora nos aseguraremos que estamos en el contexto del servidor primario que definimos anteriormente con el comando

kubectl config get-contexts

Comprobamos el contexto de mi cluster primario, en este caso producción y procedemos a configurar K10 Multi-Cluster Manager. Con el siguiente comando configuraremos el cluster PRIMARIO

k10multicluster setup-primary \
    --context=produccion \
    --name=produccion

Donde context es el nombre del contexto que tenemos en la configuracion de kubernetes y name es el nombre que aparecera en la interfaz.

Ahora agregaremos el cluster SECUNDARIO con el siguiente comando

k10multicluster bootstrap \
    --primary-context=produccion \
    --primary-name=produccion \
    --secondary-context=desarrollo \
    --secondary-name=desarrollo \
    --secondary-cluster-ingress=http://kastendev.24xsiempre.cl/k10/

Luego de los pasos anteriores, posiblemente aparezca un error 503 o 400 en la interfaz de Kasten Multi-Cluster, esto se debe a que posiblemente no posea permisos para la gestión, para ello debemos ingresar en RBAC Entry y agregar el o los usuarios que utilizaremos para gestionar la protección de datos, en mi caso agregue el usuario k10-admin y con esto ya pude ingresar a toda la gestión.

Si quedan dudas en esta parte solo debes visitar

https://docs.kasten.io/latest/multicluster/access.html#multi-cluster-admins

https://docs.kasten.io/latest/multicluster/user_access.html#configuring-access-for-multi-cluster-users

Y por ultimo necesitamos configurar todas los recursos globales como también políticas globales que se necesiten, para detalle de como realizarlo debes visitar un post que hice anteriormente

https://24xsiempre.com/kasten-k10-multi-cluster/

Conclusiones

Una de las grandes ventajas que no provee esta solución, es la gestión cenrtralizada de recursos para asignar, ya sea por aplicaciones, cluster o de acuerdo a las necesidades de las soluciones que serán protegidas. Es importante señalar que Kasten Multi-Cluster Manager permite agregar cluster de distintas distribuciones de kubernetes, por ejemplo Red Hat OpenShift, Rancher, EKS, AKS o kubernetes, mientras se cumplan los requerimientos necesarios, como por ejemplo instalar Kasten K10 en cada uno de los clusters, nos permitirá tener un acceso único y centralizado para la protección de contenedores.