Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Si varios pods necesitan acceso simultáneo al mismo volumen de almacenamiento, puede usar Azure Files para conectarse mediante el bloque de mensajes del servidor (SMB) o el protocolo NFS. En este artículo se muestra cómo crear de forma dinámica y estática un recurso compartido de Azure Files para su uso por varios pods en un clúster de Azure Kubernetes Service (AKS) mediante Azure Files.
Nota:
El controlador CSI de Azure File solo permite el montaje de recursos compartidos de archivos SMB mediante la autenticación basada en claves (NTLM v2) y, por lo tanto, no admite el perfil de seguridad máximo de la configuración del recurso compartido de archivos de Azure. Por otro lado, el montaje de comparticiones de archivos NFS no requiere autenticación basada en claves.
Nota:
Se recomienda utilizar el software FIO al ejecutar pruebas comparativas. Para obtener más información, consulte herramientas y pruebas de evaluación comparativa.
Prerrequisitos
- La CLI de Azure, versión 2.0.59 o posterior, instalada y configurada. Busque la versión con el comando
az --version. Para la instalación o la actualización, consulte Instalación de la CLI de Azure. - El controlador CSI de Azure Files está habilitado en el clúster de AKS.
- Una cuenta de Almacenamiento de Azure.
- Al elegir entre recursos compartidos de archivos Estándar y Premium, es importante que comprenda el modelo de aprovisionamiento y los requisitos del patrón de uso esperado que planea ejecutar en Azure Files. Para más información, consulte Elección de un nivel de rendimiento de Azure Files en función de los patrones de uso.
Uso de clases de almacenamiento integradas para crear PVs dinámicos con Azure Files
Las clases de almacenamiento se usan para definir cómo se crea dinámicamente una unidad de almacenamiento con un volumen persistente. 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. Cuando se usan controladores CSI en AKS, hay dos componentes adicionales integrados StorageClasses que usan los controladores de almacenamiento CSI de Azure Files (las otras clases de almacenamiento CSI se crean con el clúster junto con las clases de almacenamiento predeterminadas en árbol):
-
azurefile-csi: utiliza Azure Standard Storage para crear un recurso compartido de archivos de Azure. -
azurefile-csi-premium: utiliza Azure Premium Storage para crear un recurso compartido de archivos de Azure.
La política de recuperación en ambas clases de almacenamiento garantiza que el recurso compartido de archivos subyacente de Azure Files se elimine cuando se elimine el Volumen Persistente (PV) correspondiente. Las clases de almacenamiento también configuran los recursos compartidos de archivos para que se puedan expandir; solo es necesario editar la notificación de volumen persistente (PVC) con el nuevo tamaño.
Puede seleccionar una de las siguientes SKU de redundancia de almacenamiento de Azure para el parámetro skuname en la definición de clase de almacenamiento:
- Standard_LRS: almacenamiento con redundancia local estándar
- Standard_GRS: almacenamiento con redundancia geográfica estándar
- Standard_ZRS: almacenamiento con redundancia de zona estándar
- Standard_RAGRS: almacenamiento con redundancia geográfica con acceso de lectura estándar
- Standard_RAGZRS: almacenamiento estándar con redundancia de zona geográfica y acceso de lectura
- Premium_LRS: almacenamiento con redundancia local Premium
- Premium_ZRS: almacenamiento con redundancia de zona Premium
Nota:
Azure Files es compatible con recursos compartidos de Azure Premium. La capacidad mínima de los recursos compartidos de archivos es de 100 GiB. Se recomienda usar recursos compartidos de archivos Premium de Azure en lugar de recursos compartidos de archivos estándar, ya que los recursos compartidos de archivos Premium ofrecen un mayor rendimiento y compatibilidad con discos de baja latencia para cargas de trabajo con uso intensivo de E/S.
Creación de clases de almacenamiento personalizadas para máquinas virtuales dinámicas con Azure Files
Las clases de almacenamiento predeterminadas son adecuadas para la mayoría de los escenarios. En algunos casos, es posible que quiera tener su propia clase de almacenamiento personalizada con sus propios parámetros. Por ejemplo, es posible que desee configurar mountOptions del recurso compartido de archivos.
Cree un archivo denominado
Azure-file-sc.yamly pegue el siguiente manifiesto de ejemplo:kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: my-azurefile provisioner: file.csi.azure.com reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true mountOptions: - dir_mode=0640 - file_mode=0640 - uid=0 - gid=0 - mfsymlinks - cache=strict # https://linux.die.net/man/8/mount.cifs - nosharesock parameters: skuName: Standard_LRSCree la clase de almacenamiento mediante el
kubectl applycomando :kubectl apply -f azure-file-sc.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
storageclass.storage.k8s.io/my-azurefile created
Parámetros de clase de almacenamiento para PVs dinámicos con Azure Files
En la tabla siguiente se incluyen parámetros que puede usar para definir una clase de almacenamiento personalizada para las solicitudes de volumen persistente (PVC) con Azure Files.
| Nombre | Meaning | Valores disponibles | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
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 |
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 |
location |
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, StandardV2_LRS, StandardV2_ZRS, StandardV2_GRS, StandardV2_GZRS, PremiumV2_LRS, PremiumV2_ZRS |
No | Standard_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. Los nombres de SKU V2 estándar son para el modelo v2 aprovisionado de Azure Files. |
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. |
tags |
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 red virtual | Nombre de la red virtual existente. | No | Si está vacío, el controlador actualizará todas las subredes de la red virtual del clúster. |
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. |
Nota:
Si el controlador crea la cuenta de almacenamiento, solo tiene que especificar el networkEndpointType: privateEndpoint parámetro en la clase de almacenamiento. El controlador CSI crea el punto de conexión privado y la zona DNS privada (denominada privatelink.file.core.windows.NET) junto con la cuenta. Si trae su propia cuenta de almacenamiento, debe crear el punto de conexión privado para la cuenta de almacenamiento. Si usa el almacenamiento de Azure Files en un clúster aislado de red, debe crear una clase de almacenamiento personalizada con "networkEndpointType: privateEndpoint". Puede usar el siguiente manifiesto de ejemplo como referencia:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
skuName: Premium_LRS # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
networkEndpointType: privateEndpoint
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- dir_mode=0777 # modify this permission if you want to enhance the security
- file_mode=0777
- mfsymlinks
- cache=strict # https://linux.die.net/man/8/mount.cifs
- nosharesock # reduce probability of reconnect race
- actimeo=30 # reduce latency for metadata-heavy workload
- nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
Crear un PVC con Azure Files
Una PVC utiliza el objeto de clase de almacenamiento para aprovisionar dinámicamente una compartición de archivos en Azure. Puede usar el manifiesto YAML de ejemplo de esta sección para crear una PVC con un tamaño de 100 GB y acceso ReadWriteMany. Para más información sobre los modos de acceso, consulte Modos de acceso PV de Kubernetes.
Cree un archivo denominado
Azure-file-pvc.yamly pegue el siguiente código YAML. Asegúrese de questorageClassNamecoincide con el nombre de la clase de almacenamiento existente.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-azurefile spec: accessModes: - ReadWriteMany storageClassName: my-azurefile resources: requests: storage: 100GiNota:
Si usa el SKU
Premium_LRSpara la clase de almacenamiento, el valor mínimo destoragedebe ser100Gi.Cree el PVC mediante el comando
kubectl apply.kubectl apply -f azure-file-pvc.yamlVea el estado de la PVC mediante el comando
kubectl get:kubectl get pvc my-azurefileLa salida debe ser similar al ejemplo de salida siguiente, que muestra que la PVC está en un estado
Boundy que un PV se creó dinámicamente para satisfacer la solicitud.NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-azurefile Bound pvc-aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb 100Gi RWX my-azurefile 5m
Uso de una PVC con Azure Files en un pod
El manifiesto YAML de ejemplo de esta sección crea un pod que usa la PVC my-Azurefile para montar el recurso compartido de archivos de Azure Files en la ruta /mnt/Azure. Para los contenedores de Windows Server, especifique un elemento mountPath con la convención de ruta de acceso de Windows, como "D:" .
Cree un archivo denominado
Azure-pvc-files.yamly pegue el siguiente código YAML. Asegúrese de queclaimNamecoincida con el nombre de su PVC existente.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-azurefileCree el pod mediante el comando
kubectl apply.kubectl apply -f azure-pvc-files.yamlVea el estado del pod mediante el
kubectl describecomando :kubectl describe pod mypodLa salida debe ser similar al siguiente ejemplo, que muestra que el pod se está ejecutando y que el volumen se monta en la ruta correcta.
Containers: mypod: Container ID: docker://BB22CC33DD44EE55FF66AA77BB88CC99DD00EE11 Image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine Image ID: docker-pullable://nginx@sha256:AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00 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 para Azure Files
La ubicación para configurar las opciones de montaje (mountOptions) depende de si está aprovisionando volúmenes persistentes dinámicos o estáticos:
- Si va a aprovisionar dinámicamente un volumen con una clase de almacenamiento, especifique las opciones de montaje en el objeto de clase de almacenamiento (tipo: StorageClass).
- Si está aprovisionando estáticamente un volumen, especifique las opciones de montaje en el objeto PV (tipo: PersistentVolume).
- Si va a montar el recurso compartido de archivos como un volumen insertado, especifique las opciones de montaje en el objeto Pod (tipo: Pod).
Para obtener más información, vea Opciones de montaje.
El valor predeterminado de fileMode y dirMode es 0777 para las versiones 1.13.0 y posteriores de Kubernetes. 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
Opciones de montaje recomendadas para recursos compartidos SMB
Las opciones de montaje recomendadas para recursos compartidos SMB se proporcionan en el siguiente ejemplo de clase de almacenamiento:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
skuName: Premium_LRS # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- dir_mode=0777 # modify this permission if you want to enhance the security
- file_mode=0777 # modify this permission if you want to enhance the security
- mfsymlinks # support symbolic links
- cache=strict # https://linux.die.net/man/8/mount.cifs
- nosharesock # reduces probability of reconnect race
- actimeo=30 # reduces latency for metadata-heavy workload
- nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
Si está utilizando comparticiones de archivos Premium (SSD) y su carga de trabajo tiene muchos metadatos, debe registrarse para usar la característica de almacenamiento en caché de metadatos para mejorar el rendimiento.
Para más información, consulte cómo mejorar el rendimiento de los recursos compartidos de archivos de Azure SMB.
Opciones de montaje recomendadas para recursos compartidos NFS
Las opciones de montaje recomendadas para recursos compartidos NFS se proporcionan en el siguiente ejemplo de clase de almacenamiento:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi-nfs
provisioner: file.csi.azure.com
parameters:
protocol: nfs
skuName: Premium_LRS # available values: Premium_LRS, Premium_ZRS
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
- nconnect=4 # improves performance by enabling multiple connections to share
- noresvport # improves availability
- actimeo=30 # reduces latency for metadata-heavy workloads
Aumente el tamaño de prelectura para mejorar el rendimiento de lectura.
Aunque Azure Files admite la configuración de nconnect hasta el valor máximo de 16, se recomienda configurar las opciones de montaje con el valor óptimo de nconnect=4. Actualmente, no se obtienen beneficios que superen cuatro canales en la implementación de nconnect de Azure Files.
Creación de una instantánea de volumen a partir de una PVC con Azure Files
El controlador de CSI para Azure Files admite la creación de instantáneas de volúmenes persistentes y los recursos compartidos de archivo subyacentes.
Cree una clase de instantánea de volumen con el comando
kubectl apply:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshotclass-azurefile.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azurefile-vsc createdCree una instantánea de volumen a partir de la PVC dinámica que creó anteriormente en este tutorial mediante el comando
kubectl apply:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshot-azurefile.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
volumesnapshot.snapshot.storage.k8s.io/azurefile-volume-snapshot createdVea el estado de la instantánea de volumen con el comando
kubectl describe.kubectl describe volumesnapshot azurefile-volume-snapshotLa salida debe ser similar a la siguiente salida de ejemplo, que muestra que la instantánea de volumen no está lista para usarse porque el controlador sigue creando la instantánea del recurso compartido de archivos de Azure subyacente:
Name: azurefile-volume-snapshot Namespace: default Labels: <none> Annotations: API Version: snapshot.storage.k8s.io/v1beta1 Kind: VolumeSnapshot Metadata: Creation Timestamp: 2020-08-27T22:37:41Z Finalizers: snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection snapshot.storage.kubernetes.io/volumesnapshot-bound-protection Generation: 1 Resource Version: 955091 Self Link: /apis/snapshot.storage.k8s.io/v1beta1/namespaces/default/volumesnapshots/azurefile-volume-snapshot UID: 00aa00aa-bb11-cc22-dd33-44ee44ee44ee Spec: Source: Persistent Volume Claim Name: pvc-azurefile Volume Snapshot Class Name: csi-azurefile-vsc Status: Bound Volume Snapshot Content Name: snapcontent-00aa00aa-bb11-cc22-dd33-44ee44ee44ee Ready To Use: false Events: <none>
Cambio de tamaño de un volumen persistente con Azure Files
Nota:
Actualmente no se admite la reducción de volúmenes persistentes. Al intentar aplicar revisiones a un PVC existente con un tamaño menor que el actual, se producirá el siguiente mensaje de error:
The persistentVolumeClaim "pvc-azurefile" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.
Puede solicitar un volumen mayor para una PVC editando el objeto de la PVC para especificar un tamaño mayor. Este cambio desencadena la expansión del volumen subyacente que respalda el PV. Nunca se crea un PV para satisfacer la notificación, sino que se cambia el tamaño de un volumen existente.
En AKS, la clase de almacenamiento integrada managed-csi ya admite la expansión, por lo que puede utilizar el PVC dinámico que creó anteriormente en este tutorial. La PVC solicitó un recurso compartido de archivos de 100 GiB.
Compruebe el tamaño actual de la PVC y el sistema de archivos dentro del pod mediante el comando
kubectl execpara ejecutar el comandodf -hdentro del pod:kubectl exec -it nginx-azurefile -- df -h /mnt/azurefileLa salida debe ser similar a la siguiente salida de ejemplo, que muestra que el sistema de archivos tiene un tamaño de 100 GB:
Filesystem Size Used Avail Use% Mounted on //a123b4c567de89fghi01jk2.file.core.windows.net/pvc-00aa00aa-bb11-cc22-dd33-44ee44ee44ee 100G 128K 100G 1% /mnt/azurefileExpanda la PVC aumentando el campo
spec.resources.requests.storagemediante el comandokubectl patch. En este ejemplo, aumentamos la compartición de archivos a 200 GiB.kubectl patch pvc pvc-azurefile --type merge --patch '{"spec": {"resources": {"requests": {"storage": "200Gi"}}}}'La salida debe ser similar al siguiente ejemplo de salida, que muestra que el PVC se ha parcheado correctamente.
persistentvolumeclaim/pvc-azurefile patchedCompruebe que la PVC se ha cambiado correctamente de tamaño y que el nuevo tamaño se refleja en el pod mediante los comandos
kubectl get pvcydf -hdentro del pod.kubectl get pvc pvc-azurefileLa salida debe ser similar al siguiente ejemplo, que muestra que el PVC sigue en el estado
Boundy que la capacidad se actualizó a 200 GiB.NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azurefile Bound pvc-00aa00aa-bb11-cc22-dd33-44ee44ee44ee 200Gi RWX azurefile-csi 64mCompruebe el nuevo tamaño del sistema de archivos dentro del pod mediante el
kubectl execcomando para ejecutar eldf -hcomando dentro del pod:kubectl exec -it nginx-azurefile -- df -h /mnt/azurefileLa salida debe ser similar a la siguiente salida de ejemplo, que muestra que el sistema de archivos tiene ahora un tamaño de 200 GB:
Filesystem Size Used Avail Use% Mounted on //a123b4c567de89fghi01jk2.file.core.windows.net/pvc-bbbbbbbb-1111-2222-3333-cccccccccccc 200G 128K 200G 1% /mnt/azurefile
Uso de un volumen persistente con almacenamiento privado de Azure Files (punto de conexión privado)
Si los recursos de Azure Files están protegidos con un punto de conexión privado, tendrá que crear una clase de almacenamiento. Asegúrese de que ha configurado la configuración de DNS para resolver la dirección IP del punto de conexión privado en el FQDN de la cadena de conexión. Al crear la clase de almacenamiento mediante el controlador CSI de Azure Files, debe especificar el parámetro networkEndpointType con el valor privateEndpoint y proporcionar los parámetros siguientes:
-
resourceGroup: grupo de recursos donde se implementa la cuenta de almacenamiento. -
storageAccount: nombre de la cuenta de almacenamiento. -
server: FQDN del punto de conexión privado de la cuenta de almacenamiento.
Cree un archivo denominado
private-Azure-file-sc.yamly pegue el siguiente manifiesto. Asegúrese de reemplazar los marcadores de posición de<resourceGroup>y<storageAccountName>.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: private-azurefile-csi provisioner: file.csi.azure.com allowVolumeExpansion: true parameters: resourceGroup: <resourceGroup> storageAccount: <storageAccountName> server: <storageAccountName>.file.core.windows.net reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: - dir_mode=0777 - file_mode=0777 - uid=0 - gid=0 - mfsymlinks - cache=strict # https://linux.die.net/man/8/mount.cifs - nosharesock # reduce probability of reconnect race - actimeo=30 # reduce latency for metadata-heavy workloadCree la clase de almacenamiento mediante el
kubectl applycomando :kubectl apply -f private-azure-file-sc.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
storageclass.storage.k8s.io/private-azurefile-csi createdCree un archivo denominado
private-pvc.yamly pegue el siguiente manifiesto. Asegúrese de questorageClassNamecoincide con el nombre de la clase de almacenamiento existente.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: private-azurefile-pvc spec: accessModes: - ReadWriteMany storageClassName: private-azurefile-csi resources: requests: storage: 100GiCree el PVC mediante el comando
kubectl apply.kubectl apply -f private-pvc.yaml
Uso de Azure Files con contenedores de Windows
El controlador de CSI para Azure Files también admite nodos y contenedores de Windows. Para usar contenedores Windows, siga el inicio rápido sobre contenedores Windows para agregar un grupo de nodos con Windows. Después de tener un grupo de nodos de Windows, puede usar las clases de almacenamiento integradas como azurefile-csi o crear una personalizada. El StatefulSet basado en Windows de ejemplo de esta sección guarda las marcas de tiempo en un archivo data.txt cada segundo, que se monta en un recurso compartido de archivos de Azure mediante el controlador CSI de Azure Files.
Cree el conjunto con estado mediante el
kubectl applycomando :kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/windows/statefulset.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
statefulset.apps/busybox-azurefile createdVerifique que las marcas de tiempo se están escribiendo en el recurso compartido de archivos utilizando los siguientes comandos
kubectl execpara ejecutar el comandocatdentro del pod:kubectl exec -it busybox-azurefile-0 -- cat c:\\mnt\\azurefile\\data.txt # on Linux/MacOS Bash kubectl exec -it busybox-azurefile-0 -- cat c:\mnt\azurefile\data.txt # on Windows Powershell/CMDLa salida debería parecerse al siguiente ejemplo, que muestra que las marcas de tiempo se están escribiendo en la carpeta compartida cada segundo:
2020-08-27 22:11:01Z 2020-08-27 22:11:02Z 2020-08-27 22:11:04Z (...)
Uso del protocolo NFS con Azure Files
Azure Files admite el protocolo NFS v4.1. La compatibilidad con la versión 4.1 de NFS para Azure Files proporciona un sistema de archivos NFS totalmente administrado como un servicio basado en una plataforma de almacenamiento resistente distribuida de alta disponibilidad y alta durabilidad.
Esta opción está optimizada para cargas de trabajo de acceso aleatorio con actualizaciones de datos en contexto y proporciona compatibilidad completa con el sistema de archivos POSIX. En esta sección se muestra cómo usar recursos compartidos de archivos NFS con el controlador CSI de Azure Files en un clúster de AKS.
Requisitos previos para usar recursos compartidos NFS con Azure Files
- La identidad del plano de control del clúster de AKS (es decir, el nombre del clúster de AKS) se agrega al rol Colaborador en la red virtual y NetworkSecurityGroup.
- Se deben agregar la identidad de servicio administrada o la entidad de servicio del clúster de AKS al rol de Colaborador en la cuenta de almacenamiento.
Nota:
Puede usar un punto de conexión privado, en lugar de permitir el acceso a la red virtual seleccionada.
Optimización de las opciones de tamaño de lectura y escritura
En esta sección se proporciona información sobre cómo abordar el ajuste del rendimiento NFS con el controlador CSI de Azure Files con las opciones rsize y wsize. Las rsize opciones y wsize establecen el tamaño máximo de transferencia de una operación NFS. Si rsize o wsize no se especifican en el montaje, el cliente y el servidor negocian el mayor tamaño que admiten ambos. Actualmente, las distribuciones modernas de Azure Files y Linux admiten tamaños de lectura y escritura de hasta 1048 576 bytes (1 MiB).
El rendimiento óptimo se basa en una comunicación eficaz entre cliente y servidor. Aumentar o reducir los valores de tamaño de las opciones de lectura y escritura de mount puede mejorar el rendimiento de NFS. El tamaño predeterminado de los paquetes de lectura y escritura transferidos entre el cliente y el servidor es de 8 KB para NFS versión 2 y 32 KB para NFS versión 3 y 4. Estos valores predeterminados pueden ser demasiado grandes o demasiado pequeños. Reducir el rsize y el wsize podría mejorar el rendimiento de NFS en una red congestionada mediante el envío de paquetes más pequeños para cada respuesta de lectura NFS y solicitud de escritura. Sin embargo, esto puede aumentar el número de paquetes necesarios para enviar datos a través de la red, lo que aumenta el tráfico total de red y el uso de CPU en el cliente y el servidor.
Es importante que realice pruebas para encontrar un rsize y un wsize que mantengan una transferencia de paquetes eficaz, no reduzcan el rendimiento ni aumenten la latencia.
El manifiesto de ejemplo siguiente configura la mountOptions sección de una clase de almacenamiento en un máximo rsize y wsize de 256 KiB:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
protocol: nfs
mountOptions:
- nconnect=4
- noresvport
- actimeo=30
- rsize=262144
- wsize=262144
Para obtener una lista de mountOptions compatibles, consulte Opciones de montaje de NFS.
Creación de una clase de almacenamiento de recursos compartidos de archivos NFS
Nota:
vers, minorversion, sec están configurados por el controlador CSI de archivo de Azure. No se permite especificar un valor en el manifiesto para estas propiedades.
Cree un archivo denominado
nfs-sc.yamly pegue el siguiente manifiesto. Asegúrese de especificarprotocol: nfsen la sección de parámetros y ajustemountOptionssegún sea necesario para la carga de trabajo.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azurefile-csi-nfs provisioner: file.csi.azure.com allowVolumeExpansion: true parameters: protocol: nfs mountOptions: - nconnect=4 - noresvport - actimeo=30Después de editar y guardar el archivo, cree la clase de almacenamiento mediante el
kubectl applycomando .kubectl apply -f nfs-sc.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
storageclass.storage.k8s.io/azurefile-csi-nfs created
Creación de un StatefulSet con un recurso compartido de archivos respaldado por NFS
Cree un archivo denominado
nfs-ss.yamly pegue el siguiente manifiesto. Esta configuración guarda las marcas de tiempo en un archivodata.txt.apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-azurefile labels: app: nginx spec: podManagementPolicy: Parallel # default is OrderedReady serviceName: statefulset-azurefile replicas: 1 template: metadata: labels: app: nginx spec: nodeSelector: "kubernetes.io/os": linux containers: - name: statefulset-azurefile image: mcr.microsoft.com/oss/nginx/nginx:1.19.5 command: - "/bin/bash" - "-c" - set -euo pipefail; while true; do echo $(date) >> /mnt/azurefile/outfile; sleep 1; done volumeMounts: - name: persistent-storage mountPath: /mnt/azurefile updateStrategy: type: RollingUpdate selector: matchLabels: app: nginx volumeClaimTemplates: - metadata: name: persistent-storage spec: storageClassName: azurefile-csi-nfs accessModes: ["ReadWriteMany"] resources: requests: storage: 100GiCree el conjunto con estado mediante el
kubectl applycomando .kubectl apply -f nfs-ss.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
statefulset.apps/statefulset-azurefile createdValide el contenido del volumen usando el siguiente comando
kubectl execpara ejecutar el comandodf -hdentro del pod:kubectl exec -it statefulset-azurefile-0 -- df -hLa salida debe parecerse al siguiente ejemplo, que muestra que el recurso compartido de archivos NFS se monta en la ruta correcta con el tamaño correcto.
Filesystem Size Used Avail Use% Mounted on ... /dev/sda1 29G 11G 19G 37% /etc/hosts accountname.file.core.windows.net:/accountname/pvc-cccccccc-2222-3333-4444-dddddddddddd 100G 0 100G 0% /mnt/azurefile ...Dado que el recurso compartido de archivos NFS está en una cuenta de almacenamiento Premium, el tamaño mínimo del recurso compartido de archivos es de 100 GiB. Si crea una PVC con un tamaño de almacenamiento pequeño, puede que reciba un error similar al siguiente: No se pudo crear el recurso compartido de archivos… tamaño (5)….
Cifrado en tránsito (EiT) para recursos compartidos de archivos NFS (versión preliminar)
Nota:
La característica EiT ya está disponible en versión preliminar a partir de la versión 1.33 de AKS. Tenga en cuenta que actualmente no se admiten los nodos Ubuntu 20.04, Azure Linux, arm64 y Windows.
La característica es compatible con las siguientes distribuciones de Linux en estas regiones admitidas.
El cifrado en tránsito (EiT) garantiza que todas las lecturas y escrituras en los recursos compartidos de archivos NFS dentro de la red virtual estén cifradas, lo que proporciona una capa adicional de seguridad.
Al establecer encryptInTransit: "true" en los parámetros de clase de almacenamiento, puede habilitar el cifrado de datos en tránsito para recursos compartidos de archivos de Azure NFS. Por ejemplo:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
protocol: nfs
encryptInTransit: "true"
mountOptions:
- nconnect=4
- noresvport
- actimeo=30
Uso de la identidad administrada para acceder al almacenamiento de Azure Files (versión preliminar)
Azure Files ahora admite la autenticación basada en identidad administrada para el acceso SMB. Esto permite que las aplicaciones accedan de forma segura a Azure Files sin almacenar ni administrar credenciales.
Nota:
La compatibilidad con identidades administradas para Azure Files en AKS está disponible en versión preliminar a partir de la versión 1.34 de AKS en los nodos de Linux.
Requisitos previos para usar la identidad administrada para acceder al almacenamiento de Azure Files
- Asegúrese de que la identidad de Kubelet asignada por el usuario tenga el rol
Storage File Data SMB MI Adminen la cuenta de almacenamiento.- Si usa su propia cuenta de almacenamiento, debe asignar un rol
Storage File Data SMB MI Admina la identidad de Kubelet asignada por el usuario en esa cuenta de almacenamiento. - Si el controlador CSI crea la cuenta de almacenamiento, conceda
Storage File Data SMB MI Adminel rol al grupo de recursos donde reside la cuenta de almacenamiento. - Si simplemente utiliza la identidad de Kubelet predeterminada integrada asignada por el usuario, ya tiene el rol necesario
Storage File Data SMB MI Adminen el grupo de recursos de nodo administrado.
- Si usa su propia cuenta de almacenamiento, debe asignar un rol
Habilitación de la identidad administrada para PVs dinámicos con Azure Files
Para habilitar la identidad administrada para volúmenes aprovisionados dinámicamente, debe crear una nueva clase de almacenamiento con mountWithManagedIdentity: "true" e implementar el conjunto con estado mediante esta clase de almacenamiento.
El manifiesto de ejemplo siguiente configura una clase de almacenamiento para usar la identidad administrada para acceder a Azure Files:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi
provisioner: file.csi.azure.com
parameters:
resourceGroup: EXISTING_RESOURCE_GROUP_NAME # optional, node resource group by default if it's not provided
storageAccount: EXISTING_STORAGE_ACCOUNT_NAME # optional, a new account will be created if it's not provided
mountWithManagedIdentity: "true"
# optional, clientID of the managed identity, kubelet identity would be used by default if it's not provided
clientID: "xxxxx-xxxx-xxx-xxx-xxxxxxx"
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
- dir_mode=0777 # modify this permission if you want to enhance the security
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict # https://linux.die.net/man/8/mount.cifs
- nosharesock # reduce probability of reconnect race
- actimeo=30 # reduce latency for metadata-heavy workload
- nobrl # disable sending byte range lock requests to the server
Habilitación de la identidad administrada para PV estáticos con Azure Files
Para habilitar la identidad administrada para volúmenes estáticos, debe crear un PV con mountWithManagedIdentity: "true" y montar el PV en el pod de su aplicación.
El manifiesto de ejemplo siguiente configura un PV para usar la identidad administrada para acceder a Azure Files:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-azurefile
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: azurefile-csi
mountOptions:
- dir_mode=0777 # modify this permission if you want to enhance the security
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict # https://linux.die.net/man/8/mount.cifs
- nosharesock # reduce probability of reconnect race
- actimeo=30 # reduce latency for metadata-heavy workload
- nobrl # disable sending byte range lock requests to the server
csi:
driver: file.csi.azure.com
# make sure volumeHandle is unique for every identical share in the cluster
volumeHandle: "{resource-group-name}#{account-name}#{file-share-name}"
volumeAttributes:
resourceGroup: EXISTING_RESOURCE_GROUP_NAME # optional, node resource group by default if it's not provided
storageAccount: EXISTING_STORAGE_ACCOUNT_NAME # optional, a new account will be created if it's not provided
shareName: EXISTING_FILE_SHARE_NAME
mountWithManagedIdentity: "true"
# optional, clientID of the managed identity, kubelet identity would be used by default if it's empty
clientID: "xxxxx-xxxx-xxx-xxx-xxxxxxx"
Creación de un PV estático con Azure Files
En las secciones siguientes se proporcionan instrucciones para crear un PV estático con Azure Files. Un PV estático es un volumen persistente que un administrador crea manualmente. Este PV está disponible para su uso por parte de los pods del clúster. Para usar un PV estático, cree un PVC que haga referencia al PV y, a continuación, cree un pod que haga referencia al PVC.
Parámetros de clase de almacenamiento para PVs estáticos con Azure Files
En la tabla siguiente se incluyen parámetros que puede usar para definir una clase de almacenamiento personalizada para los PVC estáticos con Azure Files:
| Nombre | Meaning | Valores disponibles | Obligatorio | 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 | Sí | |
volumeAttributes.shareName |
Especifique un nombre de recurso compartido de archivos. | fileShareName | Sí | |
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.
Obtenga el nombre del grupo de recursos de nodos del clúster de AKS utilizando el comando con el parámetro
az aks show--query nodeResourceGroup.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsvLa salida del comando es similar al ejemplo siguiente:
MC_myResourceGroup_myAKSCluster_eastusCree una cuenta de almacenamiento mediante el comando
az storage account createcon el parámetro--sku. El siguiente comando crea una cuenta de almacenamiento con el SKUStandard_LRS. Asegúrese de reemplazar los siguientes marcadores de posición:-
myAKSStorageAccountcon el nombre de la cuenta de almacenamiento -
nodeResourceGroupNamecon el nombre del grupo de recursos en el que se hospedan los nodos del clúster de AKS -
locationcon 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 --name myAKSStorageAccount --resource-group nodeResourceGroupName --location location --sku Standard_LRS-
Exporte la cadena de conexión como una variable de entorno, que usará para compartir archivos, mediante el comando [
az storage account show-connection-string][az-storage-account-show-connection-string]. Asegúrese de reemplazarstorageAccountNameyresourceGroupNamepor el nombre de la cuenta de almacenamiento y el nombre del grupo de recursos.export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string --name storageAccountName --resource-group resourceGroupName -o tsv)Nota:
Las cadenas de conexión deben protegerse mediante la rotación de claves o el almacenamiento en una instancia de Azure Key Vault. Para obtener más información sobre las cadenas de conexión, consulte Configuración de cadenas de conexión de Azure Storage y Administración de claves de acceso de la cuenta de almacenamiento. Para entornos de producción, Microsoft recomienda usar la autenticación Microsoft Entra ID. Para más información, consulte Autorización del acceso a datos en Azure Storage.
Cree el recurso compartido de archivos mediante la ejecución del comando
az storage share create. Asegúrese de reemplazarshareNamepor el nombre del recurso compartido.az storage share create --name shareName --connection-string $AZURE_STORAGE_CONNECTION_STRINGExporte la clave de la cuenta de almacenamiento como una variable de entorno mediante el comando [
az storage account keys list][az-storage-account-keys-list]. Asegúrese de reemplazarstorageAccountNameyresourceGroupNamepor el nombre de la cuenta de almacenamiento y el nombre del grupo de recursos.STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)Imprima el nombre y la clave de la cuenta de almacenamiento mediante el siguiente comando. Anote la clave de la cuenta de almacenamiento, que se usa para crear un secreto de Kubernetes en el paso siguiente.
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.
Cree el secreto mediante el comando
kubectl create secret. En el ejemplo siguiente se crea un secreto denominado Azure-secret y se rellena Azurestorageaccountname y Azurestorageaccountkey del 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
Cree un archivo llamado
azurefiles-pv.yamly copie en él el siguiente contenido. Encsi, actualiceresourceGroup,volumeHandleyshareName. Para las opciones de montaje, el valor predeterminado defileModeydirModees 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: 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 locksCree el PV mediante el
kubectl createcomando .kubectl create -f azurefiles-pv.yamlCree un nuevo archivo denominado azurefiles-mount-options-pvc.yaml y pegue el contenido siguiente. Asegúrese de que
storageClassNamecoincide con el nombre de la clase de almacenamiento existente y quevolumeNamecoincide con el nombre del PV que creó en el paso anterior.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi volumeName: azurefile resources: requests: storage: 5GiCree el PVC mediante el comando
kubectl apply.kubectl apply -f azurefiles-mount-options-pvc.yamlCompruebe que la PVC se ha creado y enlazado al PV mediante el comando
kubectl get.kubectl get pvc azurefileLa salida debe ser similar a la siguiente salida de ejemplo, que muestra que el PVC está en un
Boundestado y está enlazado al PV denominado azurefile:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azurefile Bound azurefile 5Gi RWX azurefile 5sActualice la especificación de contenedor para que haga referencia a la PVC y al pod en el archivo YAML. Por ejemplo:
... volumes: - name: azure persistentVolumeClaim: claimName: azurefileNo se puede actualizar una especificación de pod. Debe eliminar el pod mediante el comando
kubectl deletey volver a crearlo mediante el comandokubectl 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.
Cree un archivo llamado
Azure-files-pod.yamly copie en él el siguiente contenido. Si ha cambiado el nombre del recurso compartido de Azure Files o el nombre del secreto, actualice los valoresshareNameysecretName. Puede actualizar el valor demountPath, 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 elementomountPathcon 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' # optionalCree el pod mediante el comando
kubectl apply.kubectl apply -f azure-files-pod.yamlVea el estado del pod mediante el
kubectl describecomando :kubectl describe pod mypod