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 Blob Storage para conectarse mediante blobfuse o Network File System (NFS).
En este artículo se muestra cómo crear contenedores de Azure Blob Storage de forma dinámica y estática para su uso por varios pods en un clúster de Azure Kubernetes Service (AKS).
Prerrequisitos
El controlador CSI de Azure Blob Storage está habilitado en el clúster de AKS.
Una cuenta de almacenamiento habilitada para NFS v3 para poder montar un volumen persistente mediante el protocolo NFS. No se puede habilitar NFS v3 en una cuenta de almacenamiento existente. Para obtener más información, consulte Creación de una cuenta de NFS v3.
Para admitir una cuenta de Azure Data Lake Storage al usar el montaje de blobfuse, complete las siguientes tareas:
- Para crear una cuenta de Data Lake Storage mediante el controlador en el aprovisionamiento dinámico, especifique
isHnsEnabled: "true"en los parámetros de la clase de almacenamiento. - Para habilitar el acceso de blobfuse a una cuenta de Data Lake Storage en el aprovisionamiento estático, especifique la opción
--use-adls=truede montaje en el volumen persistente. - Si vas a habilitar una cuenta de almacenamiento con espacio de nombres jerárquico, se deben volver a montar los volúmenes persistentes existentes utilizando la opción de montaje
--use-adls=true.
- Para crear una cuenta de Data Lake Storage mediante el controlador en el aprovisionamiento dinámico, especifique
De forma predeterminada, la caché de blobfuse se encuentra en el
/mntdirectorio . Si la SKU de máquina virtual proporciona un disco temporal, el/mntdirectorio se monta en el disco temporal. Sin embargo, si la SKU de VM no proporciona un disco temporal, el directorio/mntse monta en el disco del sistema operativo; puede establecer la opción de montaje--tmp-path=para especificar un directorio de caché diferente.
Uso de clases de almacenamiento integradas para crear PV dinámicos con Azure Blob Storage
Se usa una clase de almacenamiento para definir cómo se crea un contenedor de Azure Blob Storage. En el grupo de recursos de nodo, se crea automáticamente una cuenta de almacenamiento para utilizarla con la clase de almacenamiento para guardar el contenedor de Azure Blob Storage. Cuando se usan controladores CSI de almacenamiento en AKS, hay dos clases StorageClasses integradas adicionales que usan los controladores CSI de Azure Blob Storage.
La directiva de recuperación de ambas clases de almacenamiento garantiza que el recurso compartido de Azure Blob Storage subyacente se elimine cuando se elimine el PV correspondiente. Las clases de almacenamiento también configuran el contenedor para que se pueda expandir de forma predeterminada, ya que el parámetro set allowVolumeExpansion se establece en true.
Nota:
No se admite la reducción de volúmenes persistentes.
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
- Premium_LRS: almacenamiento con redundancia local Premium
- Standard_ZRS: almacenamiento con redundancia de zona
- Premium_ZRS: almacenamiento con redundancia de zona prémium (ZRS)
- Standard_GRS: almacenamiento con redundancia geográfica estándar
- Standard_RAGRS: almacenamiento con redundancia geográfica con acceso de lectura estándar
Creación de clases de almacenamiento personalizadas para máquinas virtuales dinámicas con Azure Blob Storage
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. En esta sección, se proporcionan dos ejemplos: uno mediante el protocolo NFS y otro mediante blobfuse.
Ejemplo de clase de almacenamiento personalizado mediante el protocolo NFS
El manifiesto de este ejemplo monta un contenedor de Blob Storage mediante el protocolo NFS. Puede usarlo para agregar el tags parámetro .
Cree un archivo denominado
blob-nfs-sc.yamly pegue el siguiente manifiesto de ejemplo:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: blob-nfs provisioner: blob.csi.azure.com parameters: protocol: nfs tags: environment=Development volumeBindingMode: Immediate allowVolumeExpansion: trueCree la clase de almacenamiento mediante el
kubectl applycomando :kubectl apply -f blob-nfs-sc.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
storageclass.storage.k8s.io/blob-nfs created
Ejemplo de clase de almacenamiento personalizada mediante blobfuse
El manifiesto de este ejemplo usa blobfuse y monta un contenedor de Blob Storage. Puede usarlo para actualizar el skuName parámetro .
Cree un archivo denominado
blobfuse-sc.yamly pegue el siguiente manifiesto de ejemplo:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: blob-fuse provisioner: blob.csi.azure.com parameters: skuName: Standard_GRS # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true mountOptions: - -o allow_other - --file-cache-timeout-in-seconds=120 - --use-attr-cache=true - --cancel-list-on-mount-seconds=10 # prevent billing charges on mounting - -o attr_timeout=120 - -o entry_timeout=120 - -o negative_timeout=120 - --log-level=LOG_WARNING # LOG_WARNING, LOG_INFO, LOG_DEBUG - --cache-size-mb=1000 # Default will be 80% of available memory, eviction will happen beyond that.Cree la clase de almacenamiento mediante el
kubectl applycomando :kubectl apply -f blobfuse-sc.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
storageclass.storage.k8s.io/blob-fuse created
Parámetros de clase de almacenamiento para PVs dinámicos con Azure Blob Storage
Use los siguientes grupos de parámetros para definir una clase de almacenamiento personalizada para las notificaciones de volumen persistentes (PVC) con Azure Blob Storage:
-
Cuenta de almacenamiento:
skuName,location, ,resourceGroupsubscriptionID,storageAccount,accessTierallowSharedKeyAccessrequireInfraEncryptionnetworkEndpointTypeallowBlobPublicAccess,publicNetworkAccess, ,tagsy .matchTags -
Contenedor y punto de conexión:
protocol,containerName,containerNamePrefix,useDataPlaneAPIsoftDeleteBlobssoftDeleteContainersserverstorageEndpointSuffixy .enableBlobVersioning -
BlobFuse:
storeAccountKey,getLatestAccountKey,secretName,secretNamespace, yisHnsEnabled. -
NFS:
mountPermissionsyfsGroupChangePolicy. -
Red virtual:
vnetResourceGroup,vnetName,subnetNameyvnetLinkName.
Configuración de parámetros de cuenta de almacenamiento para PVs dinámicos con Azure Blob Storage
Use los parámetros siguientes para configurar la cuenta de almacenamiento de Azure para un PV aprovisionado dinámicamente:
| Nombre | Meaning | Valores disponibles | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
skuName |
Especifique un tipo de cuenta de almacenamiento de Azure (alias: storageAccountType). |
Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, , Standard_ZRS, Premium_ZRS |
No | Standard_LRS |
location |
Especifique una ubicación de Azure. | eastus |
No | Si está vacío, el controlador usa el mismo nombre de ubicación que el clúster actual. |
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. |
subscriptionID |
Especifique el identificador de suscripción de Azure donde se crea el directorio de Blob Storage. | Identificador de suscripción de Azure | No | Si no está vacío, se debe proporcionar resourceGroup. |
storageAccount |
Especifique un nombre de cuenta de almacenamiento de Azure. | storageAccountName | No | Cuando no se proporciona un nombre de cuenta de almacenamiento específico, el controlador busca una cuenta de almacenamiento adecuada que coincida con la configuración de la cuenta en el mismo grupo de recursos. Si no encuentra una cuenta de almacenamiento coincidente, crea una nueva. Sin embargo, si se especifica un nombre de cuenta de almacenamiento, dicha cuenta debe existir. |
networkEndpointType |
Especifique el tipo de punto de conexión de red para la cuenta de almacenamiento creada por el controlador. Si especifica privateEndpoint, el controlador crea un punto de conexión privado para la cuenta de almacenamiento. En otros casos, el controlador crea un punto de conexión de servicio para el protocolo NFS. |
"", privateEndpoint |
No |
"". Para un clúster de AKS, agregue el nombre del clúster de AKS al rol Colaborador en el grupo de recursos que hospeda la red virtual. |
accessTier |
Especifique el nivel de acceso de la cuenta de almacenamiento. |
Hot, , Cool, Premium |
No | Usa el nivel predeterminado para el tipo de cuenta de almacenamiento seleccionado. Las cuentas Premium solo Premiumadmiten . |
allowBlobPublicAccess |
Permitir o denegar el acceso público a todos los blobs o contenedores para una cuenta de almacenamiento creada por el controlador. |
true, false |
No | false |
allowSharedKeyAccess |
Permitir o denegar el acceso a claves compartidas para una cuenta de almacenamiento creada por el controlador. Este parámetro se aplica a los montajes NFS y a los montajes BlobFuse que usan la identidad administrada. |
true, false |
No | true |
requireInfraEncryption |
Requerir una capa secundaria de cifrado administrado por la plataforma para los datos en reposo en una cuenta de almacenamiento creada por el controlador. |
true, false |
No | false |
publicNetworkAccess |
Establezca la propiedad de acceso a la red pública para una cuenta de almacenamiento creada por el controlador. |
Enabled, , Disabled, SecuredByPerimeter |
No | Usa el valor predeterminado de Azure Storage. |
tags |
Cree etiquetas en una nueva cuenta de almacenamiento. | Formato de etiqueta: foo=aaa,bar=bbb |
No | "" |
matchTags |
Coincide con las etiquetas cuando el controlador busca una cuenta de almacenamiento adecuada. |
true, false |
No | false |
Configuración de parámetros de contenedor y punto de conexión para PVs dinámicos con Azure Blob Storage
Use los parámetros siguientes para configurar el contenedor, el protocolo de montaje, el punto de conexión de almacenamiento y las etiquetas para un PV aprovisionado dinámicamente:
| Nombre | Descripción | Valores disponibles | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
protocol |
Especifique el montaje blobFuse, BlobFuse2 o NFS v3. |
fuse, , fuse2, nfs |
No | fuse |
containerName |
Especifique el nombre del contenedor (directorio) existente. | container | No | Si está vacío, el controlador crea un nuevo nombre de contenedor, empezando por pvc-fuse para blobfuse o pvc-nfs para NFS v3. |
containerNamePrefix |
Especifique el prefijo de directorio de Azure Storage creado por el controlador. | Solo puede contener letras minúsculas, números y guiones y debe tener menos de 21 caracteres. | No | |
server |
Especifique el nombre de dominio de la cuenta de almacenamiento de Azure. | Nombre de dominio DNS de la cuenta de almacenamiento existente, por ejemplo <storage-account>.blob.core.windows.net. |
No | Si está vacío, el controlador usa el nombre de dominio DNS predeterminado <storage-account>.blob.core.windows.net u otra cuenta de almacenamiento en la nube soberana. |
storageEndpointSuffix |
Especifique el sufijo del punto de conexión de Azure Storage. | core.windows.net |
No | Si está vacío, el controlador usa el sufijo de punto de conexión de almacenamiento predeterminado según el entorno de nube. |
useDataPlaneAPI |
Use la API Azure Storage plano de datos para crear y eliminar contenedores. Esta opción puede evitar la limitación del proveedor de recursos de almacenamiento, pero se produce un error cuando el firewall de la cuenta de almacenamiento o las reglas de red virtual bloquean el acceso al plano de datos. |
true, false |
No | false |
softDeleteBlobs |
Habilite la eliminación temporal para blobs y especifique el período de retención en días. | Un período de retención, por ejemplo 7 |
No | Deshabilitado |
softDeleteContainers |
Habilite la eliminación temporal para contenedores y especifique el período de retención en días. | Un período de retención, por ejemplo 7 |
No | Deshabilitado |
enableBlobVersioning |
Habilite el control de versiones de blobs. No se puede habilitar el control de versiones cuando protocol es nfs o isHnsEnabled es true. |
true, false |
No | false |
Configuración de parámetros de BlobFuse para PVs dinámicos con Azure Blob Storage
Los parámetros siguientes solo se aplican cuando se usa BlobFuse para un PV aprovisionado dinámicamente:
| Nombre | Descripción | Valores disponibles | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
storeAccountKey |
Especifique la clave de cuenta de almacén en el secreto de Kubernetes. Nota: false significa que el controlador usa la identidad de kubelet para obtener la clave de cuenta. |
true,false |
No | true |
getLatestAccountKey |
Obtenga la clave de cuenta de almacenamiento más reciente en función de su hora de creación en lugar de usar la primera clave. |
true, false |
No | false |
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. |
default,kube-system, etc. |
No | Espacio de nombres de PVC |
isHnsEnabled |
Habilite Hierarchical namespace para una cuenta de Azure Data Lake Storage. |
true,false |
No | false |
Configuración de parámetros NFS para PVs dinámicos con Azure Blob Storage
El siguiente parámetro solo se aplica cuando se usa NFS para un PV aprovisionado dinámicamente:
| Nombre | Descripción | Valores disponibles | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
mountPermissions |
Especifique los permisos de carpeta montada. | El valor predeterminado es 0777. Si se establece en 0, el controlador no realizará chmod después del montaje. |
No | 0777 |
fsGroupChangePolicy |
Especifique cómo cambia el controlador la propiedad del volumen. El controlador omite securityContext.fsGroupChangePolicy la especificación del pod. |
OnRootMismatch, , Always, None |
No | OnRootMismatch |
Configuración de parámetros de red virtual para PVs dinámicos con Azure Blob Storage
Use los parámetros siguientes cuando el controlador configure el acceso a la red virtual para un PV aprovisionado dinámicamente:
| Nombre | Descripción | Valores disponibles | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
vnetResourceGroup |
Especifique el grupo de recursos que contiene la red virtual. | Nombre del grupo de recursos existente | No | Usa el vnetResourceGroup valor de la configuración de Azure nube. |
vnetName |
Especifique el nombre de la red virtual. | Nombre de red virtual existente | No | Usa el vnetName valor de la configuración de Azure nube. |
subnetName |
Especifique una o varias subredes de nodo de AKS existentes. Separe varios nombres de subred con comas. | Nombres de subred existentes | No | Actualiza todas las subredes de la red virtual del clúster. |
vnetLinkName |
Especifique el vínculo de red virtual asociado a la zona DNS privada. | Nombre de vínculo de red virtual existente o nuevo | No | <vnetName>-vnetlink |
Configuración de puntos de conexión privados para PVs dinámicos con Azure Blob Storage
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.blob.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 Azure Blob storage 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: blob-fuse
provisioner: blob.csi.azure.com
parameters:
skuName: Premium_LRS # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_ZRS
protocol: fuse2
networkEndpointType: privateEndpoint
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
- -o allow_other
- --file-cache-timeout-in-seconds=120
- --use-attr-cache=true
- --cancel-list-on-mount-seconds=10 # prevent billing charges on mounting
- -o attr_timeout=120
- -o entry_timeout=120
- -o negative_timeout=120
- --log-level=LOG_WARNING # LOG_WARNING, LOG_INFO, LOG_DEBUG
- --cache-size-mb=1000 # Default will be 80% of available memory, eviction will happen beyond that.
Creación de una PVC para el aprovisionamiento dinámico
Una PVC utiliza el objeto de clase de almacenamiento para aprovisionar dinámicamente un Azure Blob Storage. Puede usar el manifiesto YAML de ejemplo de esta sección para crear una PVC con un tamaño de 5 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
blob-nfs-pvc.yamly pegue el siguiente manifiesto YAML:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-blob-storage spec: accessModes: - ReadWriteMany storageClassName: azureblob-nfs-premium resources: requests: storage: 5GiCree el PVC mediante el
kubectl createcomando :kubectl create -f blob-nfs-pvc.yamlVea el estado del PVC con el
kubectl getcomando :kubectl get pvc azure-blob-storageLa salida debe ser similar al siguiente ejemplo, que muestra que la PVC está en estado
Bound:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azure-blob-storage Bound pvc-aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb 5Gi RWX azureblob-nfs-premium 92m
Montaje de un volumen de almacenamiento de blobs aprovisionado dinámicamente en un pod
El siguiente YAML crea un pod que usa la reclamación de volumen persistente azure-blob-storage para montar Azure Blob Storage en la ruta /mnt/blob.
Cree un archivo denominado
blob-nfs-pvy pegue el siguiente manifiesto de YAML. Asegúrese de que coincide conclaimNameel PVC que creó anteriormente (azure-blob-storage).kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/blob" name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: azure-blob-storageCree el pod mediante el
kubectl applycomando :kubectl apply -f blob-nfs-pv.yamlUna vez que el pod se esté ejecutando correctamente, cree un nuevo archivo denominado
test.txtcon el siguiente comando:kubectl exec mypod -- touch /mnt/blob/test.txtValide que el disco se monta correctamente mediante el siguiente comando para enumerar los archivos del directorio montado:
kubectl exec mypod -- ls /mnt/blobLa salida debe ser similar a la siguiente salida de ejemplo, que muestra el archivo
test.txtque creó en Azure Blob Storage montado:test.txt
Uso de StatefulSet para administrar el ciclo de vida de un volumen con Azure Blob Storage
Para que un volumen de almacenamiento persista para la carga de trabajo, puede usar StatefulSet. Este estado permite de forma más sencilla asignar los volúmenes existentes con los nuevos pods que reemplazan a los que tenían errores. En los ejemplos siguientes se muestra cómo configurar un StatefulSet para Blob Storage mediante el protocolo NFS o Blobfuse.
Nota:
Si va a usar el protocolo NFS, la identidad del plano de control del clúster de AKS (es decir, el nombre del clúster de AKS) debe añadirse al rol Colaborador en la red virtual y el grupo de seguridad de red.
Cree un archivo denominado
azure-blob-nfs-ss.yamly pegue el siguiente manifiesto YAML:apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-blob-nfs labels: app: nginx spec: serviceName: statefulset-blob-nfs replicas: 1 template: metadata: labels: app: nginx spec: nodeSelector: "kubernetes.io/os": linux containers: - name: statefulset-blob-nfs image: mcr.microsoft.com/azurelinux/base/nginx:1.25 volumeMounts: - name: persistent-storage mountPath: /mnt/blob updateStrategy: type: RollingUpdate selector: matchLabels: app: nginx volumeClaimTemplates: - metadata: name: persistent-storage spec: storageClassName: azureblob-nfs-premium accessModes: ["ReadWriteMany"] resources: requests: storage: 100GiCree el StatefulSet con el comando
kubectl create.kubectl create -f azure-blob-nfs-ss.yaml
Creación de un PV estático con Azure Blob Storage
En las secciones siguientes se proporcionan instrucciones para crear un PV estático con Azure Blob Storage. 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 volumen CSI para PVs estáticos con Azure Blob Storage
En la tabla siguiente se enumeran los parámetros que puede usar en el origen del volumen CSI para un PV estático con Azure Blob Storage:
| Nombre | Meaning | Valores disponibles | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
volumeHandle |
Especifique un valor que el controlador puede usar para identificar de forma única el contenedor de blobs de almacenamiento en el clúster. | Una manera recomendada de generar un valor único es combinar el nombre de la cuenta de almacenamiento único global y el nombre del contenedor: {account-name}_{container-name}.Nota: Los #, / caracteres están reservados para uso interno y no se pueden usar en un manejador de volumen. |
Sí | |
volumeAttributes.subscriptionID |
Especifique el identificador de suscripción Azure donde se encuentra la cuenta de almacenamiento. | Identificador de suscripción de Azure | No | Si no está vacío, se debe proporcionar volumeAttributes.resourceGroup. |
volumeAttributes.resourceGroup |
Especifique el nombre del 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.containerName |
Especifique el nombre del contenedor existente. | container | Sí | |
volumeAttributes.protocol |
Especifique el montaje blobFuse, BlobFuse2 o NFS v3. |
fuse, , fuse2, nfs |
No | fuse |
volumeAttributes.server |
Especifique la dirección del servidor de la cuenta de almacenamiento de Azure. | Dirección del servidor existente, por ejemplo <storage-account>.blob.core.windows.net |
No | Usa la dirección del servidor predeterminada para el entorno de nube actual. |
volumeAttributes.storageEndpointSuffix |
Especifique el sufijo Azure punto de conexión de almacenamiento. |
core.windows.neto el sufijo para otra nube de Azure |
No | Usa el sufijo predeterminado para el entorno de nube actual. |
| --- | Los parámetros siguientes solo son para blobfuse. | --- | --- | --- |
volumeAttributes.secretName |
Nombre secreto que almacena el nombre y la clave de la cuenta de almacenamiento (solo se aplica a SMB). | No | ||
volumeAttributes.secretNamespace |
Especifique el espacio de nombres del secreto para almacenar la clave de cuenta. | default |
No | Espacio de nombres de PVC |
volumeAttributes.getLatestAccountKey |
Obtenga la clave de cuenta de almacenamiento más reciente en función de su hora de creación en lugar de usar la primera clave. |
true, false |
No | false |
nodeStageSecretRef.name |
Especifique el nombre del secreto de Kubernetes que contiene credenciales para almacenar provisionalmente el volumen. | Nombre del secreto de Kubernetes existente. El secreto debe contener una de las claves siguientes: azurestorageaccountkey, azurestorageaccountsastoken, msisecreto azurestoragespnclientsecret. |
No | |
nodeStageSecretRef.namespace |
Especifique el espacio de nombres del secreto. | Espacio de nombres de Kubernetes | Sí | |
| --- | Los parámetros siguientes solo son para el protocolo NFS. | --- | --- | --- |
volumeAttributes.mountPermissions |
Especifique los permisos de carpeta montada. | 0777 |
No | |
volumeAttributes.fsGroupChangePolicy |
Especifique cómo cambia el controlador la propiedad del volumen. El controlador omite securityContext.fsGroupChangePolicy la especificación del pod. |
OnRootMismatch, , Always, None |
No | OnRootMismatch |
| --- |
Los parámetros siguientes solo son para la característica: blobfuse Autenticación de Identidad Administrada y Nombre Principal de Servicio |
--- | --- | --- |
volumeAttributes.AzureStorageAuthType |
Especifique el tipo de autenticación. |
Key, SAS, , MSI, SPN |
No | Key |
volumeAttributes.AzureStorageIdentityClientID |
Especifique el identificador de cliente de identidad. | No | ||
volumeAttributes.AzureStorageIdentityObjectID |
Especifique el identificador del objeto de identidad. Este parámetro está en desuso. | No | ||
volumeAttributes.AzureStorageIdentityResourceID |
Especifique el identificador de recurso de identidad. | No | ||
volumeAttributes.MSIEndpoint |
Especifique el punto de conexión MSI. | No | ||
volumeAttributes.AzureStorageSPNClientID |
Especifique el identificador de cliente del Principal de Servicio de Azure (SPN). | No | ||
volumeAttributes.AzureStorageSPNTenantID |
Especifique el identificador de inquilino de Azure SPN. | No | ||
volumeAttributes.AzureStorageAADEndpoint |
Especifique el punto de conexión de Microsoft Entra. | No | ||
| --- | Los parámetros siguientes solo son para la autenticación de identidad de carga de trabajo de blobfuse. | --- | --- | --- |
volumeAttributes.ClientID |
Especifique el identificador de cliente de la identidad administrada que se usa para la autenticación de identidad de carga de trabajo. | Identificador de cliente de identidad administrada | No | |
volumeAttributes.mountWithWorkloadIdentityToken |
Monte BlobFuse con un token de identidad de carga de trabajo. Esta funcionalidad está en versión preliminar. Especifique el valor como una cadena. |
"true", "false" |
No | "false" |
| --- | Los parámetros siguientes solo son para la característica: blobfuse lee la clave de cuenta o el token de SAS del almacén de claves. | --- | --- | --- |
volumeAttributes.keyVaultURL |
Especifique el nombre DNS de Azure Key Vault. | {vault-name}.vault.azure.net | No | |
volumeAttributes.keyVaultSecretName |
Especifique el nombre del secreto de Azure Key Vault. | Nombre del secreto de Azure Key Vault existente. | No | |
volumeAttributes.keyVaultSecretVersion |
Versión del secreto de Azure Key Vault. | Versión existente | No | Si está vacío, el controlador usa la versión actual. |
Crear un contenedor de almacenamiento de blobs
Al crear un recurso de Azure Blob Storage para su uso con AKS, puede crear el recurso en el grupo de recursos del nodo. Este enfoque permite que el clúster de AKS acceda y administre el recurso de Blob Storage.
Para obtener el nombre del grupo de recursos del nodo de su clúster de AKS, use el comando
az aks showcon el parámetro--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_eastusSi crea la cuenta de almacenamiento en el grupo de recursos del nodo, use el nombre del grupo de recursos de nodo devuelto en el paso anterior (por ejemplo,
MC_myResourceGroup_myAKSCluster_eastus). A continuación, siga los pasos descritos en Administración del almacenamiento de blobs para autorizar el acceso y crear un contenedor en esa cuenta de almacenamiento.
Montar volumen
En esta sección, montará el volumen persistente mediante el protocolo NFS o Blobfuse.
La cuenta de almacenamiento debe tener NFS v3 y el espacio de nombres jerárquico habilitado. El montaje de Blob Storage mediante el protocolo NFS v3 no se autentica mediante una clave de cuenta. La subred del nodo de AKS debe tener acceso de red a la cuenta de almacenamiento habilitada para NFS a través de una red virtual o un punto de conexión privado seleccionados. Asegúrese de que los grupos de seguridad de red permiten el tráfico NFS en los puertos 111 y 2048. Para obtener más información sobre cómo configurar el acceso NFS a la cuenta de almacenamiento, consulte Montaje de Blob Storage mediante el protocolo Network File System (NFS) 3.0.
En el ejemplo siguiente se muestra cómo montar un contenedor de Blob Storage como un volumen persistente mediante el protocolo NFS.
Cree un archivo denominado
pv-blob-nfs.yamly pegue el siguiente código YAML. Enspec.csi.volumeAttributes, actualiceresourceGroup,storageAccountycontainerName.Nota:
El valor de
volumeHandledebe ser un valor volumeID único para cada contenedor de Blob Storage idéntico en el clúster. El carácter#y/están reservados para uso interno y no se pueden usar.apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: blob.csi.azure.com name: pv-blob spec: capacity: storage: 1Pi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain # If set as "Delete" container would be removed after pvc deletion storageClassName: azureblob-nfs-premium csi: driver: blob.csi.azure.com # make sure volumeid is unique for every identical storage blob container in the cluster # character `#` and `/` are reserved for internal use and cannot be used in volumehandle volumeHandle: account-name_container-name volumeAttributes: resourceGroup: resourceGroupName storageAccount: storageAccountName containerName: containerName protocol: nfsNota:
Aunque el atributo de capacidad de la API de Kubernetes es obligatorio, el controlador CSI de Azure Blob Storage no usa este valor porque puede escribir datos de forma flexible hasta alcanzar el límite de capacidad de la cuenta de almacenamiento. El valor solo se usa para la coincidencia de tamaño entre PVs y PVC. En el ejemplo se usa un valor ficticio de
1Pi; este valor no establece la capacidad del contenedor de Blob Storage.Cree el PV mediante el comando
kubectl create:kubectl create -f pv-blob-nfs.yamlCree un archivo denominado
pvc-blob-nfs.yamly pegue el siguiente código YAML. EnvolumeName, actualice el valor para que coincida con el nombre del PV creado en el paso anterior.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-blob spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi volumeName: pv-blob storageClassName: azureblob-nfs-premiumCree el PVC mediante el
kubectl createcomando :kubectl create -f pvc-blob-nfs.yaml
Utiliza el volumen persistente
El siguiente código YAML crea un pod que usa el PV o PVC denominado pvc-blob creado anteriormente para montar Azure Blob Storage en la ruta /mnt/blob.
Cree un archivo denominado
nginx-pod-blob.yamly pegue el siguiente manifiesto YAML. Asegúrese de que coincideclaimNamecon el PVC creado anteriormente (pvc-blob).kind: Pod apiVersion: v1 metadata: name: nginx-blob spec: nodeSelector: "kubernetes.io/os": linux containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine name: nginx-blob volumeMounts: - name: blob01 mountPath: "/mnt/blob" readOnly: false volumes: - name: blob01 persistentVolumeClaim: claimName: pvc-blobCree el pod y monte el PVC usando el comando
kubectl create.kubectl create -f nginx-pod-blob.yamlCree una sesión de shell interactiva con el pod para comprobar que Blob Storage se monta correctamente mediante el siguiente
kubectl execcomando:kubectl exec -it nginx-blob -- df -hLa salida debe ser similar a la siguiente salida de ejemplo, que muestra que Blob Storage se monta en la ruta
/mnt/blob:Filesystem Size Used Avail Use% Mounted on ... blobfuse 14G 41M 13G 1% /mnt/blob ...