Almacenamiento NFS externo en AKS Edge Essentials
Las soluciones de almacenamiento persistente le permiten almacenar datos de aplicación externos al pod que ejecuta la aplicación y le permiten mantener los datos de la aplicación, incluso si se produce un error en el pod de la aplicación. Es posible usar el aprovisionador de rutas de acceso local para el almacenamiento local; sin embargo, el almacenamiento depende de la disponibilidad del nodo. También es posible desacoplar la disponibilidad del almacenamiento del ciclo de vida del nodo mediante proveedores de almacenamiento externos.
En este artículo se describe cómo configurar un proveedor NFS e implementar un contenedor de ejemplo con un PV conectado a NFS en el clúster de AKS Edge Essentials.
Para obtener más información sobre el complemento NFS, consulte nfs-subdir-external-provisioner.
Paso 1: obtener información de conexión para el servidor NFS
Asegúrese de que el servidor NFS sea accesible desde el clúster de AKS Edge Essentials y obtenga la información que necesita para conectarse a él. La información debe incluir el nombre de host del servidor NFS y la ruta de acceso del recurso compartido exportado. Si el servidor NFS tiene mecanismos de autenticación, asegúrese de obtener esa información también.
Paso 2: descargar recursos
Obtenga las plantillas de recursos. Para configurar el aprovisionamiento, descargue un conjunto de archivos de plantilla YAML, edítelos para agregar la información de conexión del servidor NFS y, a continuación, aplique cada archivo de implementación.
Nota
El ejemplo de NFS usado se basa en el código de ejemplo nfs-subdir-external-provisioner y se ajusta para la máquina virtual de AKS Edge Essentials.
Descargue el código fuente más reciente .zip desde el repositorio de GitHub de AKS-Edge Essentials.
Extraiga el tgz en una carpeta deseada.
Abra una sesión de PowerShell como administrador.
Cambie al directorio de ejemplo de NFS: AKS-Edge : ejemplos->> almacenamiento -> NFS.
Con el
dir
comando , compruebe que la carpeta NFS tiene los siguientes archivos:Directory: C:\Users\AKS-Edge\samples\storage\nfs Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 1/25/2023 10:43 AM 345 class.yaml -a---- 1/25/2023 1:14 PM 979 deployment.yaml -a---- 1/25/2023 1:16 PM 371 pod.yaml -a---- 1/25/2023 1:17 PM 218 pvc.yaml -a---- 1/9/2023 10:19 AM 1900 rbac.yaml
Paso 3: configuración de la autorización
Un clúster de AKS Edge Essentials tiene habilitado el RBAC predeterminado, por lo que no es necesario configurar ningún otro RBAC. Sin embargo, si se encuentra en un espacio de nombres o proyecto distinto del predeterminado, edite rbac.yaml antes de implementar la plantilla. En una ventana de PowerShell con privilegios elevados, ejecute el siguiente cmdlet:
kubectl create -f .\rbac.yaml
Paso 4: configurar el aprovisionamiento externo del subdirectorio NFS
A continuación, edite el archivo de implementación del aprovisionamiento de NFS para agregar información de conexión para el servidor NFS. Edite deploy/deployment.yaml y reemplace los valores siguientes:
Reemplace el nombre
VALUE
de host del servidor enname: NFS_SERVER
.Reemplace el nombre
server
de host del servidor envolumes
->nfs
.Reemplace el nombre
VALUE
de host del servidor enname: NFS_PATH
.Reemplace el nombre
path
de host del servidor envolumes
->nfs
.Abra una ventana de PowerShell como administrador.
Cree una carpeta que se usará para volúmenes persistentes dentro del nodo:
Invoke-AksEdgeNodeCommand -NodeType Linux -command "sudo mkdir /var/persistentVolumes"
Sugerencia
La guía actual usa la carpeta /var/persistenVolumes . Si desea cambiar la carpeta, cree otra carpeta de montaje y establezca los permisos adecuados. Además, actualice el archivo deployment.yaml con el nuevo directorio.
Implemente los archivos YAML necesarios:
kubectl create -f .\class.yaml kubectl create -f .\deployment.yaml kubectl create -f .\pvc.yaml kubectl create -f .\pod.yaml
Paso 5: comprobación de los recursos creados
Si todo se ejecuta y se adjunta correctamente, debería ver algo similar al siguiente. En primer lugar, debería ver que el PV se ha creado con kubectl get pv
:
PS C:\WINDOWS\system32> kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-72dd0e5a-1064-424d-b534-d414b6693aaa 1Mi RWX Delete Bound default/test-claim nfs-client 20s
A continuación, la PVC se ha enlazado mediante kubectl get pvc
:
PS C:\WINDOWS\system32> kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nfs-pvc Bound pvc-72dd0e5a-1064-424d-b534-d414b6693aaa 1Mi RWX nfs-client 25s
Por último, debería ver la prueba de volumen y el nfs-client-provisioner mediante kubectl get pods
:
PS C:\WINDOWS\system32> kubectl get pods
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-696845f854-wz5cp 1/1 Running 0 2m
volume-test 1/1 Running 0 2m
Paso 6: probar el almacenamiento persistente
Una prueba final es asegurarse de que el almacenamiento es persistente en la unidad conectada a NFS.
Empiece por escribir algo en el pod. En una ventana de PowerShell con privilegios elevados, ejecute el siguiente cmdlet:
kubectl exec volume-test -- sh -c "echo Hello AKS Edge! > /data/Test-NFS.txt"
Ahora, vaya a la unidad compartida NFS y busque un archivo denominado Test-NFS.txt. Abra el archivo y debería ver una línea que dice "Hello AKS Edge!"
Por último, elimine el pod para simular un error en un pod o incluso una implementación que se va a quitar mediante el siguiente cmdlet:
kubectl delete -f .\pod.yaml
Compruebe que el pod se ha quitado y, a continuación, vuelva a implementar el pod de prueba por volumen :
kubectl apply -f .\pod.yaml
Por último, lea el contenido del archivo que se escribió anteriormente. Si todo se ejecutó correctamente, debería ver el mensaje "Hello AKS Edge!":
kubectl exec volume-test -- sh -c "cat /data/Test-NFS.txt"
Paso 7: limpieza de la implementación
Una vez que haya terminado con el almacenamiento NFS, vaya a PowerShell y limpie el área de trabajo mediante la ejecución del siguiente script:
kubectl delete -f .\pod.yaml
kubectl delete -f .\pvc.yaml
kubectl delete -f .\deployment.yaml
kubectl delete -f .\class.yaml