Creación manual y uso de un volumen con un recurso compartido de Azure Files en Azure Kubernetes Service (AKS)

Un volumen persistente representa un fragmento de almacenamiento aprovisionado para su uso con pods de Kubernetes. Puede usar un volumen persistente con uno o varios pods; también puede aprovisionarlo de manera dinámica o estática. Si varios pods necesitan acceso simultáneo al mismo volumen de almacenamiento, puede usar Azure Files para conectarse mediante el protocolo Bloque de mensajes del servidor (SMB). Este artículo muestra cómo crear dinámicamente un recurso compartido de archivos de Azure para que lo usen varios pods en un clúster de Azure Kubernetes Service (AKS).

En este artículo aprenderá a:

  • Trabaje con un volumen persistente dinámico (PV) mediante la instalación del controlador Container Storage Interface (CSI) y la creación dinámica de uno o varios recursos compartidos de archivos de Azure para asociarse a un pod.
  • Trabaje con un PV estático mediante la creación de uno o varios recursos compartidos de archivos de Azure, o use uno existente y conéctelo a un pod.

Para más información sobre los volúmenes de Kubernetes, consulte Opciones de almacenamiento para aplicaciones en AKS.

Antes de empezar

Aprovisionar un volumen dinámicamente

En esta sección, se proporcionan instrucciones para los administradores de clústeres que desean aprovisionar uno o varios volúmenes persistentes que incluyen detalles de uno o varios recursos compartidos en Azure Files. Una notificación de volumen persistente (PVC) usa el objeto de clase de almacenamiento para aprovisionar de forma dinámica un recurso compartido de archivos de Azure Files.

Parámetros de clase de almacenamiento para PersistentVolumes dinámicos

En la siguiente tabla se incluyen parámetros que puede usar para definir una clase de almacenamiento personalizada para PersistentVolumeClaim.

Nombre Significado Valor disponible Mandatory Default value
accountAccessTier Nivel de acceso para la cuenta de almacenamiento La cuenta estándar puede elegir Hot o Cool, y la cuenta Premium solo puede elegir Premium. No Vacía. Use la configuración predeterminada para los diferentes tipos de cuenta de almacenamiento.
accountQuota Limita la cuota de una cuenta. Puede especificar una cuota máxima en GB (102400 GB de forma predeterminada). Si la cuenta supera la cuota especificada, el controlador omite la selección de la cuenta. No 102400
allowBlobPublicAccess Permitir o denegar el acceso público a todos los blobs o contenedores para la cuenta de almacenamiento creada por el controlador. true o false No false
disableDeleteRetentionPolicy Especifique si deshabilita DeleteRetentionPolicy para la cuenta de almacenamiento creada por el controlador. true o false No false
enableLargeFileShares Especifique si se va a usar una cuenta de almacenamiento con recursos compartidos de archivos grandes habilitados o no. Si esta marca se establece en true y no existe una cuenta de almacenamiento con recursos compartidos de archivos grandes habilitados, se creará una. Esta marca se debe usar con la SKU Estándar, ya que las cuentas de almacenamiento creadas con la SKU Premium tienen la opción largeFileShares habilitada de forma predeterminada. true o false No false
folderName Especifique el nombre de carpeta en el recurso compartido de archivos de Azure. Nombre de carpeta existente en el recurso compartido de archivos de Azure. No Si el nombre de carpeta no existe en el recurso compartido de archivos, se produce un error en el montaje.
getLatestAccount Determina si se obtiene la clave de cuenta más reciente en función de la hora de creación. Este controlador obtiene la primera clave de forma predeterminada. true o false No false
ubicación Especifique la región de Azure de la cuenta de almacenamiento de Azure. Por ejemplo, eastus. No Si está vacío, el controlador usa el mismo nombre de ubicación que el clúster de AKS actual.
matchTags Coincidencia de etiquetas cuando el controlador intenta encontrar una cuenta de almacenamiento adecuada. true o false No false
networkEndpointType Especifique el tipo de punto de conexión de red para la cuenta de almacenamiento creada por el controlador. Si se especifica privateEndpoint, se crea un punto de conexión privado para la cuenta de almacenamiento. En otros casos, se crea un punto de conexión de servicio de forma predeterminada. "",privateEndpoint No ""
protocol Especifique el protocolo de recurso compartido de archivos. smb, nfs No smb
requireInfraEncryption Especifique si el servicio aplica o no una capa secundaria de cifrado con claves administradas por la plataforma para los datos en reposo para la cuenta de almacenamiento creada por el controlador. true o false No false
resourceGroup Especifique el grupo de recursos para los discos de Azure. Nombre del grupo de recursos existente No Si está vacío, el controlador usa el mismo nombre de grupo de recursos que el clúster de AKS actual.
selectRandomMatchingAccount Determina si se va a seleccionar aleatoriamente una cuenta coincidente. De manera predeterminada, el controlador siempre selecciona la primera cuenta coincidente en orden alfabético (Nota: Este controlador usa la caché de búsqueda de cuentas, lo que da lugar a una distribución desigual de la creación de archivos en varias cuentas). true o false No false
server Especifique la dirección del servidor de la cuenta de almacenamiento de Azure. Dirección del servidor existente, por ejemplo accountname.privatelink.file.core.windows.net. No Si está vacío, el controlador usa el accountname.file.core.windows.net predeterminado u otra dirección de la cuenta en la nube soberana.
shareAccessTier Nivel de acceso para el recurso compartido de archivos La cuenta de uso general v2 puede elegir entre TransactionOptimized (valor predeterminado), Hot y Cool. Tipo de cuenta de almacenamiento Prémium solo para recursos compartidos de archivos. No Vacía. Use la configuración predeterminada para los diferentes tipos de cuenta de almacenamiento.
shareName Especifique el nombre del recurso compartido de archivos de Azure. Nombre de recurso compartido de archivos de Azure existente o nuevo. No Si está vacío, el controlador genera un nombre de recurso compartido de archivos de Azure.
shareNamePrefix Especifique el prefijo de nombre del recurso compartido de archivos de Azure creado por el controlador. El nombre del recurso compartido solo puede contener letras minúsculas, números, guiones y la longitud debe ser inferior a 21 caracteres. No
skuName Tipo de cuenta de almacenamiento de Azure Files (alias: storageAccountType) Standard_LRS, Standard_ZRS, Standard_GRS, Standard_RAGRS, Standard_RAGZRS,Premium_LRS, Premium_ZRS No StandardSSD_LRS
El tamaño mínimo del recurso compartido de archivos para el tipo de cuenta Premium es de 100 GB.
El tipo de cuenta ZRS se admite en regiones limitadas.
El recurso compartido de archivos NFS solo admite el tipo de cuenta Premium.
StorageAccount Especifique un nombre de cuenta de almacenamiento de Azure. storageAccountName No- Cuando no se proporcione un nombre de cuenta de almacenamiento específico, el controlador buscará una cuenta de almacenamiento adecuada que coincida con la configuración de la cuenta que se encuentre en el mismo grupo de recursos. Si no encuentra una cuenta de almacenamiento coincidente, la creará. Sin embargo, si se especifica un nombre de cuenta de almacenamiento, dicha cuenta debe existir.
storageEndpointSuffix Especifique el sufijo del punto de conexión de Azure Storage. core.windows.net, core.chinacloudapi.cn, etc. No Si está vacío, el controlador usa el sufijo de punto de conexión de almacenamiento predeterminado según el entorno de nube. Por ejemplo, core.windows.net.
etiquetas Las etiquetas se crean en una nueva cuenta de almacenamiento. Formato de etiqueta: 'foo=aaa,bar=bbb' No ""
--- Los parámetros siguientes solo son para el protocolo SMB --- ---
subscriptionID Especifique el identificador de suscripción de Azure donde se crea el recurso compartido de archivos de Azure. Identificador de suscripción de Azure No Si no está vacío, se debe proporcionar resourceGroup.
storeAccountKey Especifique si quiere almacenar la clave de cuenta en el secreto de Kubernetes. true o false
false significa que el controlador usa la identidad de kubelet para obtener la clave de cuenta.
No true
secretName Especifique el nombre del secreto para almacenar la clave de cuenta. No
secretNamespace Especifique el espacio de nombres del secreto para almacenar la clave de cuenta.

Nota:
Si secretNamespace no se especifica, el secreto se crea en el mismo espacio de nombres que el pod.
default,kube-system, etc. No Espacio de nombres PVC, por ejemplo csi.storage.k8s.io/pvc/namespace
useDataPlaneAPI Especifique si se va a usar la API del plano de datos para crear, eliminar o cambiar el tamaño del recurso compartido de archivos, lo que podría resolver el problema de limitación de la API de SRP, ya que la API del plano de datos casi no tiene ningún límite. No obstante, se producirá un error cuando exista una configuración de firewall o red virtual en la cuenta de almacenamiento. true o false No false
--- Los parámetros siguientes solo son para el protocolo NFS --- ---
mountPermissions Permisos de carpeta montada. El valor predeterminado es 0777. Si se establece en 0, el controlador no realiza chmod después del montaje 0777 No
rootSquashType Especifique el comportamiento de root squashing en el recurso compartido. El valor predeterminado es NoRootSquash. AllSquash, NoRootSquash, RootSquash No
--- Los parámetros siguientes solo son para la configuración de red virtual. Por ejemplo, NFS, punto de conexión privado --- ---
fsGroupChangePolicy Indica cómo el controlador cambia la propiedad del volumen. Se omite el pod securityContext.fsGroupChangePolicy. OnRootMismatch (predeterminado), Always, None No OnRootMismatch
subnetName Nombre de subred Nombre de subred existente del nodo del agente. No Si está vacío, el controlador usa el valor subnetName en el archivo de configuración de la nube de Azure.
vnetName Nombre de la red virtual Nombre de la red virtual existente. No Si está vacío, el controlador usa el valor vnetName en el archivo de configuración de la nube de Azure.
vnetResourceGroup Especifique el grupo de recursos de red virtual donde se define la red virtual. Nombre del grupo de recursos existente. No Si está vacío, el controlador usa el valor vnetResourceGroup en el archivo de configuración de la nube de Azure.

Creación de una clase de almacenamiento

Las clases de almacenamiento definen cómo crear un recurso compartido de archivos de Azure. En el grupo de recursos node, se crea automáticamente una cuenta de almacenamiento para utilizarla con la clase de almacenamiento donde van a guardarse los recursos compartidos de archivos de Azure Files. Seleccione uno de los siguientes SKU de redundancia de Azure Storage para skuName:

  • Standard_LRS: almacenamiento con redundancia local estándar (LRS)
  • Standard_GRS: almacenamiento con redundancia geográfica estándar (GRS)
  • Standard_ZRS: almacenamiento con redundancia de zona (ZRS)
  • Standard_RAGRS: almacenamiento con redundancia geográfica con acceso de lectura (RA-GRS) estándar
  • Premium_LRS: almacenamiento con redundancia local (LRS) Premium
  • Premium_ZRS: almacenamiento con redundancia de zona (ZRS) Premium

Nota:

El recurso compartido de archivos premium mínimo es de 100 GB.

Para más información sobre las clases de almacenamiento de Kubernetes para Azure Files, consulte las clases de almacenamiento de Kubernetes.

  1. Cree un archivo denominado azure-file-sc.yaml y cópielo en el ejemplo siguiente de manifiesto. Para más información sobre mountOptions, consulte la sección Opciones de montaje.

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: my-azurefile
    provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
    allowVolumeExpansion: true
    mountOptions:
     - dir_mode=0777
     - file_mode=0777
     - uid=0
     - gid=0
     - mfsymlinks
     - cache=strict
     - actimeo=30
     - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
    parameters:
      skuName: Premium_LRS
    
  2. Cree la clase de almacenamiento con el comando kubectl apply.

    kubectl apply -f azure-file-sc.yaml
    

Creación de una notificación de volumen persistente

Una notificación de volumen persistente (PVC) usa el objeto de clase de almacenamiento para aprovisionar de forma dinámica un recurso compartido de archivos de Azure. Puede usar el siguiente código de YAML para crear una notificación de volumen persistente con un tamaño de 100 GB y con acceso ReadWriteMany. Para más información sobre los modos de acceso, consultevolumen persistente de Kubernetes.

  1. Cree un archivo denominado azure-file-pvc.yaml y cópielo en el siguiente código YAML. Asegúrese de que storageClassName coincide con la clase de almacenamiento que ha creado en el paso anterior.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: my-azurefile
      resources:
        requests:
          storage: 100Gi
    

    Nota

    Si usa el SKU Premium_LRS para la clase de almacenamiento, el valor mínimo de storage debe ser 100Gi.

  2. Cree la notificación del volumen persistente con el comando kubectl apply.

    kubectl apply -f azure-file-pvc.yaml
    

    Después de completarse, se creará el recurso compartido de archivos. También se crea un secreto de Kubernetes que incluye las credenciales y la información de conexión. Puede usar el comando kubectl get para ver el estado de la PVC:

    kubectl get pvc my-azurefile
    

    La salida del comando es similar al ejemplo siguiente:

    NAME           STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
    my-azurefile   Bound     pvc-8436e62e-a0d9-11e5-8521-5a8664dc0477   100Gi       RWX            my-azurefile      5m
    

Uso del volumen persistente

El siguiente código de YAML crea un pod que utiliza la notificación de volumen persistente my-azurefile para montar el recurso compartido de archivos de Azure Files en la ruta de acceso /mnt/azure. Para los contenedores de Windows Server, especifique un elemento mountPath con la convención de ruta de acceso de Windows, como "D:" .

  1. Cree un archivo denominado azure-pvc-files.yaml y cópielo en el siguiente código YAML. Asegúrese de que claimName coincide con la clase PVC creada en el paso anterior.

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - mountPath: /mnt/azure
              name: volume
              readOnly: false
      volumes:
       - name: volume
         persistentVolumeClaim:
           claimName: my-azurefile
    
  2. Cree el pod mediante el comando kubectl apply.

    kubectl apply -f azure-pvc-files.yaml
    

    Ahora tiene un pod en ejecución con el recurso compartido de archivos de Azure Files montado en el directorio /mnt/azure. Esta configuración se puede ver al inspeccionar el pod mediante el comando kubectl describe. La siguiente salida de ejemplo condensada muestra el volumen montado en el contenedor.

    Containers:
      mypod:
        Container ID:   docker://053bc9c0df72232d755aa040bfba8b533fa696b123876108dec400e364d2523e
        Image:          mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        Image ID:       docker-pullable://nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
        State:          Running
          Started:      Fri, 01 Mar 2019 23:56:16 +0000
        Ready:          True
        Mounts:
          /mnt/azure from volume (rw)
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-8rv4z (ro)
    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  my-azurefile
        ReadOnly:   false
    [...]
    

Opciones de montaje

El valor predeterminado de fileMode y dirMode es 0777 para Kubernetes 1.13.0 y versiones posteriores. Si crea dinámicamente el volumen persistente con una clase de almacenamiento, puede especificar las opciones de montaje en el objeto de la clase de almacenamiento. Para más información, consulte Opciones de montaje. En el ejemplo siguiente se establece 0777:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: my-azurefile
provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
allowVolumeExpansion: true
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict
  - actimeo=30
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
parameters:
  skuName: Premium_LRS

Uso de etiquetas de Azure

Para obtener más información sobre el uso de etiquetas de Azure, consulte Uso de etiquetas de Azure en Azure Kubernetes Service (AKS).

Aprovisionar un volumen estáticamente

En esta sección se proporcionan instrucciones para los administradores de clústeres que desean crear uno o varios volúmenes persistentes que incluyan detalles de un recurso compartido de Azure Files existente para usarlo con una carga de trabajo.

Parámetros de aprovisionamiento estáticos para PersistentVolume

En la siguiente tabla se incluyen parámetros que se pueden usar para definir PersistentVolume.

Nombre Significado Valor disponible Mandatory Valor predeterminado
volumeAttributes.resourceGroup Especifique un nombre de grupo de recursos de Azure. myResourceGroup No Si está vacío, el controlador usa el mismo nombre de grupo de recursos que el clúster actual.
volumeAttributes.storageAccount Especifique un nombre de la cuenta de almacenamiento de Azure existente. storageAccountName Yes
volumeAttributes.shareName Especifique un nombre de recurso compartido de archivos. fileShareName
volumeAttributes.folderName Especifique un nombre de carpeta en el recurso compartido de archivos de Azure. folderName No Si el nombre de carpeta no existe en el recurso compartido de archivos, se producirá un error en el montaje.
volumeAttributes.protocol Especifique el protocolo de recurso compartido de archivos. smb, nfs No smb
volumeAttributes.server Especificación de la dirección del servidor de la cuenta de almacenamiento de Azure Dirección del servidor existente, por ejemplo accountname.privatelink.file.core.windows.net. No Si está vacío, el controlador usa el accountname.file.core.windows.net predeterminado u otra dirección de la cuenta en la nube soberana.
--- Los parámetros siguientes solo son para el protocolo SMB --- --- ---
volumeAttributes.secretName Especifique un nombre secreto que almacene el nombre y la clave de la cuenta de almacenamiento. No
volumeAttributes.secretNamespace Especifique un espacio de nombres secreto. default,kube-system, etc. No Espacio de nombres PVC (csi.storage.k8s.io/pvc/namespace)
nodeStageSecretRef.name Especifique un nombre secreto que almacene el nombre y la clave de la cuenta de almacenamiento. Nombre secreto existente. No Si está vacío, el controlador usa la identidad de kubelet para obtener la clave de cuenta.
nodeStageSecretRef.namespace Especifique un espacio de nombres secreto. Espacio de nombres de Kubernetes No
--- Los parámetros siguientes solo son para el protocolo NFS --- --- ---
volumeAttributes.fsGroupChangePolicy Indica cómo cambia el controlador la propiedad de un volumen. Se omite el pod securityContext.fsGroupChangePolicy. OnRootMismatch (predeterminado), Always, None No OnRootMismatch
volumeAttributes.mountPermissions Especifique los permisos de carpeta montada. El valor predeterminado es 0777. No

Creación de un recurso compartido de archivos de Azure

Para poder utilizar un recurso compartido de archivos de Azure Files como volumen de Kubernetes, es preciso crear una cuenta de Azure Storage y el recurso compartido de archivos.

  1. Obtenga el nombre del grupo de recursos mediante el comando az aks show con el parámetro --query nodeResourceGroup.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

    La salida del comando es similar al ejemplo siguiente:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Cree una cuenta de almacenamiento mediante el comando az storage account create con el parámetro --sku. El siguiente comando crea una cuenta de almacenamiento con el SKU Standard_LRS. Asegúrese de reemplazar los siguientes marcadores de posición:

    • myAKSStorageAccount con el nombre de la cuenta de almacenamiento
    • nodeResourceGroupName con el nombre del grupo de recursos en el que se hospedan los nodos del clúster de AKS
    • location con el nombre de la región en la que se va a crear el recurso. Debe ser la misma región que los nodos del clúster de AKS.
    az storage account create -n myAKSStorageAccount -g nodeResourceGroupName -l location --sku Standard_LRS
    
  3. Exporte la cadena de conexión como una variable de entorno mediante el siguiente comando, que se usa para crear el recurso compartido de archivos.

    export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)
    
  4. Cree el recurso compartido de archivos mediante la ejecución del comando az storage share create. Asegúrese de reemplazar shareName por el nombre del recurso compartido.

    az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
    
  5. Con el uso del siguiente comando, exporte la clave de la cuenta de almacenamiento como una variable de entorno.

    STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
    
  6. Imprima el nombre y la clave de la cuenta de almacenamiento mediante el siguiente comando. Copie esta información, ya que necesita estos valores al crear el volumen de Kubernetes.

    echo Storage account key: $STORAGE_KEY
    

Creación de un secreto de Kubernetes

Kubernetes necesita credenciales para acceder al recurso compartido de archivos creado en el paso anterior. Estas credenciales se almacenan en un secreto de Kubernetes, al que se hace referencia al crear un pod de Kubernetes.

  1. Cree el secreto mediante el comando kubectl create secret. En el ejemplo siguiente se crea un secreto denominado azure-secret y rellena los valores de azurestorageaccountname y azurestorageaccountkey en el paso anterior. Para usar una cuenta de almacenamiento de Azure existente, proporcione su nombre y su clave.

    kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
    

Montaje de un recurso compartido de archivos como volumen persistente

  1. Cree un archivo llamado azurefiles-pv.yaml y copie en él el siguiente contenido. En csi, actualice resourceGroup, volumeHandley shareName. En el caso de las opciones de montaje, el valor predeterminado de fileMode y dirMode es 0777.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: file.csi.azure.com
      name: azurefile
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: azurefile-csi
      csi:
        driver: file.csi.azure.com
        volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}"  # make sure this volumeid is unique for every identical share in the cluster
        volumeAttributes:
          resourceGroup: resourceGroupName  # optional, only set this when storage account is not in the same resource group as node
          shareName: aksshare
        nodeStageSecretRef:
          name: azure-secret
          namespace: default
      mountOptions:
        - dir_mode=0777
        - file_mode=0777
        - uid=0
        - gid=0
        - mfsymlinks
        - cache=strict
        - nosharesock
        - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
    
  2. Cree la notificación del volumen persistente con el comando kubectl create.

    kubectl create -f azurefiles-pv.yaml
    
  3. Cree un nuevo archivo denominado azurefiles-mount-options-pvc.yaml y copie el siguiente contenido.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile-csi
      volumeName: azurefile
      resources:
        requests:
          storage: 5Gi
    
  4. Con el comando kubectl apply, cree PersistentVolumeClaim.

    kubectl apply -f azurefiles-mount-options-pvc.yaml
    
  5. Compruebe que PersistentVolumeClaim se haya creado y enlazado al objeto PersistentVolume mediante el comando kubectl get.

    kubectl get pvc azurefile
    

    La salida del comando es similar al ejemplo siguiente:

    NAME        STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    azurefile   Bound    azurefile   5Gi        RWX            azurefile      5s
    
  6. Actualice la especificación del contenedor para hacer referencia al objeto PersistentVolumeClaim y al pod en el archivo YAML. Por ejemplo:

    ...
      volumes:
      - name: azure
        persistentVolumeClaim:
          claimName: azurefile
    
  7. No se puede actualizar una especificación de pod. Debe eliminar el pod mediante el comando kubectl delete y volver a crearlo mediante el comando kubectl apply.

    kubectl delete pod mypod
    
    kubectl apply -f azure-files-pod.yaml
    

Montaje de un recurso compartido de archivos como volumen insertado

Nota:

Para evitar problemas de rendimiento, se recomienda usar un volumen persistente en lugar de un volumen insertado cuando numerosos pods accedan al mismo recurso compartido de archivos. El volumen insertado solo puede acceder a secretos en el mismo espacio de nombres que el pod. Para especificar un espacio de nombres secreto diferente, use un volumen persistente.

Para montar el recurso compartido de archivos de Azure Files en el pod, configure el volumen en las especificaciones del contenedor.

  1. Cree un archivo llamado azure-files-pod.yaml y copie en él el siguiente contenido. Si ha cambiado el nombre del recurso compartido de Azure Files o el nombre del secreto, actualice los valores shareName y secretName. Puede actualizar el valor de mountPath, que es la ruta de acceso en la que se monta el recurso compartido de Azure Files en el pod. Para los contenedores de Windows Server, especifique un elemento mountPath con la convención de ruta de acceso de Windows, como "D:" .
apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  nodeSelector:
    kubernetes.io/os: linux
  containers:
    - image: 'mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine'
      name: mypod
      resources:
        requests:
          cpu: 100m
          memory: 128Mi
        limits:
          cpu: 250m
          memory: 256Mi
      volumeMounts:
        - name: azure
          mountPath: /mnt/azure
          readOnly: false
  volumes:
    - name: azure
      csi:
        driver: file.csi.azure.com
        volumeAttributes:
          secretName: azure-secret  # required
          shareName: aksshare  # required
          mountOptions: 'dir_mode=0777,file_mode=0777,cache=strict,actimeo=30,nosharesock,nobrl'  # optional
  1. Cree el pod mediante el comando kubectl apply.

    kubectl apply -f azure-files-pod.yaml
    

    Ahora tiene un pod en ejecución con un recurso compartido de archivos de Azure Files montado en /mnt/azure. Puede comprobar que el recurso compartido se ha montado correctamente mediante el comando kubectl describe.

    kubectl describe pod mypod
    

Pasos siguientes

Para ver los parámetros del controlador CSI de Azure Files, consulte los parámetros del controlador CSI.

Para consultar los procedimientos recomendados asociados, consulte Procedimientos recomendados para el almacenamiento y las copias de seguridad en Azure Kubernetes Service (AKS).