Creación manual y uso de un servidor NFS (sistema de archivos de red) de Linux con Azure Kubernetes Service (AKS)
Compartir datos entre contenedores a menudo es un componente necesario de las aplicaciones y los servicios basados en contenedores. Habitualmente tiene varios pods que necesitan tener acceso a la misma información en un volumen persistente externo. Si bien Azure Files es una posibilidad, crear un servidor NFS en una máquina virtual de Azure es otra forma de almacenamiento compartido persistente.
En este artículo se muestra cómo crear un servidor NFS en una máquina virtual Ubuntu de Azure y configurar el clúster de AKS con acceso a este sistema de archivos compartido como volumen persistente.
Antes de empezar
En este artículo se supone que tiene lo siguiente para admitir esta configuración:
- Un clúster de AKS existente Si no tiene un clúster de AKS, para obtener instrucciones sobre el diseño de una implementación a escala empresarial de AKS, consulte Planeamiento del diseño de AKS.
- Su clúster AKS debe estar en la misma red virtual (VNet) de Azure, o en una red virtual emparejada, que el servidor NFS. El clúster debe crearse en una red virtual existente, que puede ser la misma que la de la máquina virtual del servidor NFS. En los artículos siguientes se describen los pasos para configurar una red virtual existente: Creación de un clúster de AKS en la red virtual y Conexión de redes virtuales con emparejamiento de redes virtuales.
- Una máquina virtual Linux de Azure ubuntu que ejecute la versión 18.04 o posterior. Para implementar una máquina virtual Linux en Azure, consulte Creación y administración de máquinas virtuales Linux.
Si implementa primero el clúster de AKS, Azure rellena automáticamente la configuración de red virtual al implementar la máquina virtual Ubuntu de Azure, asociando la máquina virtual Ubuntu en la misma red virtual. Si desea trabajar con redes emparejadas, consulte la documentación anterior.
Implementación del servidor NFS en una máquina virtual
Para implementar un servidor NFS en la máquina virtual Ubuntu de Azure, copie el siguiente script de Bash y guárdelo en la máquina local. Reemplace el valor de la variable AKS_SUBNET por el correcto del clúster de AKS o, de lo contrario, el valor predeterminado especificado abre el servidor NFS en todos los puertos y conexiones. En este artículo, el archivo se denomina
nfs-server-setup.sh
.#!/bin/bash # This script should be executed on Linux Ubuntu Virtual Machine EXPORT_DIRECTORY=${1:-/export/data} DATA_DIRECTORY=${2:-/data} AKS_SUBNET=${3:-*} echo "Updating packages" apt-get -y update echo "Installing NFS kernel server" apt-get -y install nfs-kernel-server echo "Making data directory ${DATA_DIRECTORY}" mkdir -p ${DATA_DIRECTORY} echo "Making new directory to be exported and linked to data directory: ${EXPORT_DIRECTORY}" mkdir -p ${EXPORT_DIRECTORY} echo "Mount binding ${DATA_DIRECTORY} to ${EXPORT_DIRECTORY}" mount --bind ${DATA_DIRECTORY} ${EXPORT_DIRECTORY} echo "Giving 777 permissions to ${EXPORT_DIRECTORY} directory" chmod 777 ${EXPORT_DIRECTORY} parentdir="$(dirname "$EXPORT_DIRECTORY")" echo "Giving 777 permissions to parent: ${parentdir} directory" chmod 777 $parentdir echo "Appending bound directories into fstab" echo "${DATA_DIRECTORY} ${EXPORT_DIRECTORY} none bind 0 0" >> /etc/fstab echo "Appending localhost and Kubernetes subnet address ${AKS_SUBNET} to exports configuration file" echo "/export ${AKS_SUBNET}(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports echo "/export localhost(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports nohup service nfs-kernel-server restart
El script inicia un reinicio del servidor NFS y, después, puede continuar con la conexión al servidor NFS desde el clúster de AKS.
Después de crear la máquina virtual Linux, copie el archivo creado en el paso anterior de la máquina local a la máquina virtual mediante el siguiente comando:
scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
Una vez copiado el archivo, abra una conexión de Secure Shell (SSH) a la máquina virtual y ejecute el siguiente comando:
sudo ./nfs-server-setup.sh
Si se produce un error en la ejecución debido a un error de permiso denegado, establezca el permiso de ejecución para todo ejecutando el siguiente comando:
chmod +x ~/nfs-server-setup.sh
Conexión del clúster de AKS al servidor NFS
Es posible conectarse al servidor NFS desde el clúster de AKS aprovisionando un volumen persistente y una notificación de volumen persistente que especifique cómo acceder al volumen. Es necesario conectar ambos recursos en la misma red virtual o en redes virtuales emparejadas. Para obtener información sobre cómo configurar el clúster en la misma red virtual, consulte Creación de un clúster de AKS en una red virtual existente.
Una vez que ambos recursos están en la misma red virtual o en una emparejada, aprovisione un volumen persistente y una notificación de volumen persistente en el clúster de AKS. A continuación, los contenedores pueden montar la unidad NFS en su directorio local.
Cree un manifiesto YAML denominado pv-azurefilesnfs.yaml con un elemento PersistentVolume. Por ejemplo:
apiVersion: v1 kind: PersistentVolume metadata: name: NFS_NAME labels: type: nfs spec: capacity: storage: 1Gi accessModes: - ReadWriteMany nfs: server: NFS_INTERNAL_IP path: NFS_EXPORT_FILE_PATH
Reemplace los valores de NFS_INTERNAL_IP, NFS_NAME y NFS_EXPORT_FILE_PATH por la configuración real del servidor NFS.
Cree un manifiesto YAML denominado pvc-azurefilesnfs.yaml con un elemento PersistentVolumeClaim que utilice el elemento PersistentVolume. Por ejemplo:
Importante
El valor storageClassName debe seguir siendo una cadena vacía para que la notificación funcione.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: NFS_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 1Gi selector: matchLabels: type: nfs
Reemplace el valor de NFS_NAME por la configuración real del servidor NFS.
Solucionar problemas
Si no puede conectarse al servidor desde un clúster de AKS, puede que haya un problema en el directorio exportado o en su directorio primario, o bien que no tenga suficientes permisos para acceder a la máquina virtual del servidor NFS.
Compruebe que el directorio de exportación y su directorio primario tienen concedidos 777 permisos.
Para comprobar los permisos, ejecute el comando siguiente y los directorios deberían tener los permisos "drwxrwxrwx":
ls -l
Pasos siguientes
- Para consultar los procedimientos recomendados asociados, consulte Procedimientos recomendados para el almacenamiento y las copias de seguridad en Azure Kubernetes Service (AKS).
- Para más información sobre cómo configurar el servidor NFS o para ayudar a depurar problemas, consulte el siguiente tutorial de NFS de la comunidad de Ubuntu.
Azure Kubernetes Service