Hola a todos, y bienvenidos nuevamente a este blog. Es esta oportunidad hablaremos nuevamente de Kubernetes, y de como instalar y configurar vSphere Container Storage Plug-in como CSI driver para Persistent Volumes en K8s.
CSI fue desarrollado como un estandar para exponer sistemas de almacenamientos, ya sea basado en bloques o en archivos, a cargas de trabajo corriendo como contenedores/pods en Kubernetes. Un CSI Driver en Kubernetes permite, mediante esta integración con sistemas de almacenamiento, la creacion de Persistent Volumes (PV) que luego pueden ser utilizados por pods de Kubernetes.
Si tuvieramos un cluster de Kubernetes sobre algún proveedor de Cloud como AWS EKS, Azure AKS o Google GKE, un CSI Driver compatible con el proveedor de cloud ya estaría instalado por defecto, por lo que podriamos crear PVs en Kubernetes utilizando los sistemas de almacenamiento del proveedor de Cloud. Por ejemplo, en el caso de AWS EKS, podriamos crear un PV utilizando AWS EBS (Elastic Block Store), sin tener que instalar ningún componente extra, ya que el cluster de Kubernetes montado con AWS EKS incluye el CSI Driver instalado por defecto.
Ahora, que pasa si tenemos un cluster de Kubernetes On-premises, ya sea un cluster creado manualmente con Kubeadm o desplegado mediante alguna distribución comercial como OpenShift, y deseamos montar PVs en sistemas de almacenamiento que tengamos en nuestra propia infraestructura? Pues para eso debemos instalar un CSI Driver adecuado para el almacenamiento que queramos utilizar. Existen multiples opciones de CSI Drivers, como por ejemplo para NetApp, Dell EMC, e incluso para Synology, que es el almacenamiento que utilizo en mi homelab.
Como no podia ser de otra forma, si en nuestra infraestructura contamos con un cluster de vSphere, es posible también instalar el CSI Driver para vSphere, de manera de poder crear PVs utilizando los Datastores de vSphere como medio de almacenamiento. Y esto es justamente lo que detallaremos a continuación
Lista de materiales
Para poder desplegar el vSphere CSI Driver, también llamado vSphere Container Plug-in, debemos contar al menos con lo siguiente:
- Un cluster de Kubernetes versión 1.21 o superior (para el vSphere CSI Driver 2.5) desplegado sobre vSphere.
- La herramienta de linea de comando kubectl
- Cada nodo del cluster Kubernetes debe tener instaladas las VMware Tools.
- Las VMs utilizadas para el cluster de K8s deben tener version de hardware 15 o superior.
- En cada VM del cluster K8s se debe habilitar el parametro avanzado disk.EnableUUID=True utilizando el vSphere Client
- Un cluster vSphere 6.7 Update 3 o superior
- Un usuario de vCenter Server con los permisos adecuados. Ver los roles y permisos requeridos en el siguiente link: https://docs.vmware.com/en/VMware-vSphere-Container-Storage-Plug-in/2.0/vmware-vsphere-csp-getting-started/GUID-0AB6E692-AA47-4B6A-8CEA-38B754E16567.html
Instalar el vSphere Cloud Provider Interface
Veremos ahora la primera parte del procedimiento, que consiste en instalar el vSphere Cloud Provider Interface:
- Identificamos la versión mayor de Kubernetes y la añadimos a una Variable llamada VERSION. En este ejemplo, la version es 1.23.6, por lo que la versión mayor que debemos añadir a la variable seria simplemente 1.23.
- Descargamos el fichero vsphere-cloud-controller-manager.yaml
- Editamos el fichero vsphere-cloud-controller-manager.yaml para incluir los detalles de vCenter Server
- FQDN
- Username
- Password
- Labels (opcional)
- Desplegamos el vSphere Cloud Provider Interface con Kubctl
Instalar el vSphere Container Storage Plug-in
Ya tenemos la primera parte lista, ahora toca ir al procedimiento de instalación del CSI Driver para vSphere.
- En primer lugar creamos el namespace llamado vmware-system-csi. Podemos hacer esto con una de estas opciones de linea de comando:
- Luego debemos aplicar un Taint al nodo Master del cluster de Kubernetes y verificamos que se haya aplicado correctamente
- Descargamos el certificado de vCenter Server para habilitar una comunicación segura entre Kubernetes y vSphere
- Creamos un ConfigMap a partir de el certificado que hemos descargado
- El siguiente paso será crear un un archivo de configuracion(csi-vsphere.conf) con los parametros de acceso a vCenter Server y el uso del certificado
- Creamos el Kubernetes Secret con el fichero creado en el paso anterior (no olvidemos eliminar el fichero de configuración luego de crear el Secret, para no exponer las credenciales)
- Ahora toca descargar el fichero YAML que utilizaremos para desplegar el CSI Driver
- Editamos el fichero YAML para montar el ConfigMap creado previamente como un Volumen para acceder al certificado del vCenter Server. Esto se debe realizar en los contenedores vsphere-syncer y vsphere-csi-controller (Ver imagenes a continuación).
- Una vez modificado el fichero YAML, solo queda desplegar el CSI Driver utilizando dicho fichero
- Verificamos que las instancia de vSphere CSI Controller se está ejecutando en el Control Plane, y que las instancias vSphere CSI Nodes se ejecutan en los nodos Worker
- El ultimo paso sería crear uno o más Storage Class en Kubernetes que nos permita utilizar el CSI Driver que acabamos de desplegar:
Pruebas con el CSI Driver
Ya tenemos desplegado el CSI Driver y el Storage Class, por lo que estamos en condiciones de poder crear Persistent Volume Claims con Persistent Volumes manuales o dinamicos. En este caso, podemos crear un PVC que nos permita crear un PV de manera dinamica con el siguiente codigo YAML de ejemplo
Una vez desplegado el fichero YAML, podemos ver como se ha creado el PVC y de manera automatica se ha creado el PV utilizando el CSI Driver de vSphere.
Con ese completamos este procedimiento en Kubernetes, espero que les sea de utilidad y nos vemos en otra ocasión!!!
[…] que eran los CSI Drivers y cual era su proposito principal, por lo que les recomiendo leer el post Kubernetes – Desplegar vSphere Container Storage Plug-in (vSphere CSI) si quieren saber […]