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 los siguientes componentes y configuración para admitir esta configuración:
- Un clúster de AKS existente Si necesita un clúster de AKS, consulte el inicio rápido de AKS mediante la CLI de Azure, Azure PowerShell o Azure Portal.
- 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. Sin embargo, 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 conectar el servidor NFS al de AKS clúster 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 archivo 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 archivo 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 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.