Saltar al contenido

VClusters (Virtual Kubernetes Clusters)

¿Qué son los VClusters?

Los clústeres virtuales son clústeres de Kubernetes en pleno funcionamiento que se ejecutan sobre otros clústeres de KubernetesEn comparación con los clústeres “reales” completamente separados, los clústeres virtuales no tienen sus propios grupos de nodosEn cambio, están programan cargas de trabajo dentro del clúster subyacente mientras tienen su propio plano de control separado.

Arquitectura de vcluster

El clúster virtual en sí solo consta de los componentes centrales de Kubernetes: servidor API, Controller Manager  y base de datos (como etcd, sqlite, mysql, etc.). Para reducir la sobrecarga del clúster virtual, vcluster se basa en k3s , que es una distribución de Kubernetes liviana, certificada y totalmente funcional que compila los componentes de Kubernetes en un solo binario y deshabilita todas las funciones de Kubernetes que no son necesarias, como el scheduler o ciertos controladores.

Además de k3s, hay un hipervisor de Kubernetes que reemplaza al programador de Kubernetes y emula una configuración de Kubernetes completamente funcional en el clúster virtual. Este componente sincroniza un conjunto de recursos básicos que son esenciales para la funcionalidad del clúster entre el clúster virtual y el host:

  • Pods : todos los pods que se inician en el clúster virtual se reescriben y luego se inician en el espacio de nombres del clúster virtual en el clúster de host. Los tokens de la cuenta de servicio, las variables de entorno, el DNS y otras configuraciones se intercambian para apuntar al clúster virtual en lugar del clúster de host. Dentro del pod, parece que el pod se inicia dentro del clúster virtual en lugar del clúster de host.
  • Services : todos los servicios y puntos finales se reescriben y crean en el espacio de nombres del clúster virtual en el clúster de host. El clúster virtual y de host comparten las mismas direcciones IP del clúster de servicios. Esto también significa que se puede acceder a un servicio en el clúster de host desde dentro del clúster virtual sin ninguna penalización de rendimiento.
  • PersistentVolumeClaims : si se crean notificaciones de volumen persistentes en el clúster virtual, se modificarán y crearán en el espacio de nombres del clúster virtual en el clúster de host. Si están vinculados en el clúster de host, la información del volumen persistente correspondiente se sincronizará con el clúster virtual.
  • ConfigMaps y Secrets : Los configmaps o secrets en el clúster virtual que se montan en los pods se sincronizarán con el clúster de host, todos los demás mapas de configuración o secretos permanecerán puramente en el clúster virtual.
  • Otros recursos : los deployments, los statefulsets, los CRD, las service account, etc. NO están sincronizados con el clúster de host y existen únicamente en el clúster virtual.

¿Por qué utilizar clústeres virtuales de Kubernetes?

Los clústeres virtuales resuelven muchos de los problemas que presentan los namespaces, como:

  • Recursos con ámbito de clúster : determinados recursos viven globalmente en el clúster y no puede aislarlos mediante espacios de nombres. Por ejemplo, no es posible instalar istio o cualquier otro operador en diferentes versiones dentro de un solo clúster.

  • Plano de control de Kubernetes compartido : el servidor de API, etcd, el scheduler y el controller-manager se comparten en un solo clúster de Kubernetes. La limitación de la velocidad de solicitud o almacenamiento basada en un espacio de nombres es muy difícil y una configuración defectuosa puede hacer que se caiga todo el clúster.

Los clústeres virtuales también proporcionan más estabilidad que los namespaces en muchas situaciones. El clúster virtual crea sus propios objetos de recursos de Kubernetes, que se almacenan en su propio almacén de datos. El clúster de host no tiene conocimiento de estos recursos.

Debido a que puede tener muchos clústeres virtuales dentro de un solo clúster, son mucho más baratos que los clústeres tradicionales de Kubernetes y requieren menos esfuerzos de administración y mantenimiento. Esto los hace ideales para la ejecución de experimentos, la integración continua y la configuración de entornos de espacio aislado.

Por último, los clústeres virtuales se pueden configurar independientemente del clúster físico. Esto es excelente para múltiples usuarios.

En la siguiente imagen se muestra una comparación entre los namespaces, los vcluster y los clusters independientes

Comparación de vcluster

Comenzando con VClusters

Descargar VCluster CLI

El Cli se puede descargar para MAC, LINUX y Windows Powershell, en nuestro caso lo haremos para Linux.

$ curl -s -L “https://github.com/loft-sh/vcluster/releases/latest” | sed -nE ‘s!.*”([^”]*vcluster-linux-amd64)”.*!https://github.com\1!p’ | xargs -n 1 curl -L -o vcluster && chmod +x vcluster;

$ sudo mv vcluster /usr/local/bin;

Para confirmar que lo has instalado correctamente, lanzaremos:

vcluster –version

Crear un VCluster

Se puede crear tanto con el vcluster CLI con helm o con kubectl, pero nosotros usaremos vcluster CLI

Hay dos formas de hacer la instalación, para que se pueda acceder a través de port-forwarding como para acceder a través de un servicio, nosotros haremos la creación para acceder mediante port-forward para no crear ningún LoadBalancer.

  • Crea Cluster para acceder por port-forwarding

$ vcluster create vcluster-1 -n host-namespace-1

Conectar a un VCluster

Para acceder al cluster virtual usaremos el comando vcluster connect que lo que hará es crear un kubeconfig local con los datos para acceder al vcluster.

  • Conectar por Port-Forwarding
$ vcluster connect vcluster-1 -n host-namespace-1
  • Abrimos otro terminal y hacemos lo siguiente:
$ export KUBECONFIG=./kubeconfig.yaml
Ahora los comandos que lancemos (kubectl, helm..) se lanzaran en el clúster virtual y se sincronizaran los recursos que indicamos anteriormente con el cluster real, lo demás estará guardado en la base de datos del VCluster.
 
Es decir solo podremos ver desde el cluster real los recursos nombrados anteriormente y tendrán la nomenclatura que hemos visto en la primera imagen de esta entrada.

Eliminar un VCluster

Se puede eliminar tanto con el vcluster CLI con helm o con kubectl, pero nosotros usaremos vcluster CLI

$ vcluster delete vcluster-1 -n host-namespace-1

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *