Kubernetes - NFS Server
Hay algunas ocasiones en el que deseemos desarrollar aplicaciones que queramos guardar la data recolectada, ya sea una base de datos, archivos, etc. Para los desarrolladores que desplegaron estas aplicaciones en algún proveedor de k8s en la nube (AKS, GKE, EKS, etc.) se nos es más fácil usar volúmenes por que dichos proveedores ya implementaron la solución para esa necesidad, por si aún no te diste cuenta cuando creas algún volumen en cualquier proveedor, por defecto toma el “provider” de dicho proveedor (AWSElasticBlockStore, GCEPersistentDisk, AzureDisk). Esta característica no la encontramos cuando instalamos k8s en nuestros propios servidores, razón por la cual escribo este post para poder instalar y configurar un NFS Server para guardar la data que deseemos.
Requisitos:
- Tener un cluster k8s instalado (Aquí tengo una publicación de como instalarlo onPremise).
- Una maquina que será usado como servidor NFS.
Configuración del Servidor NFS:
Instalamos las herramientas necesarias para NFS y luego habilitamos los servicios
Ahora creamos un directorio el cual queremos compartir en nuestro caso será /home/vagrant/nfs_data y además dar ciertos permisos
Luego debemos de realizar la configuración en el archivo exports
vi /etc/exports
Es en este archivo donde describimos que clientes van a tener acceso a la carpeta compartida, en mi caso tengo 2 workers con ip 192.168.2.X por lo tanto la configuración será:
/home/vagrant/nfs_data 192.168.2.90(rw,sync,no_root_squash,no_subtree_check)
/home/vagrant/nfs_data 192.168.2.91(rw,sync,no_root_squash,no_subtree_check)
Una vez hecho la configuración ejecutamos el siguiente comando:
exports -a
Configuración Clientes NFS
En el lado del cliente que son los worker de k8s solo debemos instalar las herramientas necesarias:
yum -y install nfs-utils
Ahora es momento de probar dicha configuración en kubernetes para lo cual creamos un PersistentVolumen en el cual especificaremos la ip y ruta de nuestro servidor NFS
Si todo salio bien entonces ya podríamos crear nuestro PVC y por lo tanto asignarlos a algún POD
Ahora usaremos el PVC en un Nginx;
Ahora ya podemos crear subir archivos a nuestra carpeta compartida y este se mapeara en la ruta /usr/share/nginx/html de cada contenedor que se ejecute.