Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Se più pod richiedono l'accesso simultaneo allo stesso volume di archiviazione, è possibile usare l'archiviazione BLOB di Azure per connettersi usando blobfuse o Network File System (NFS).
Questo articolo illustra come creare in modo dinamico e statico contenitori di archiviazione BLOB di Azure per l'uso da parte di più pod in un cluster del servizio Azure Kubernetes.
Prerequisiti
Il driver CSI dell'archiviazione BLOB di Azure abilitato nel cluster del servizio Azure Kubernetes.
Un account di archiviazione abilitato per NFS v3 in modo da poter montare un volume permanente usando il protocollo NFS. Non è possibile abilitare NFS v3 in un account di archiviazione esistente. Per altre informazioni, vedere Creare un account NFS v3.
Per supportare un account Azure Data Lake Storage quando si usa il montaggio blobfuse, completare le attività seguenti:
- Per creare un account Data Lake Storage usando il driver nel provisioning dinamico, specificare
isHnsEnabled: "true"nei parametri della classe di archiviazione. - Per abilitare l'accesso blobfuse a un account Data Lake Storage nel provisioning statico, specificare l'opzione
--use-adls=truedi montaggio nel volume permanente. - Se si intende abilitare un account di archiviazione con spazio dei nomi gerarchico, i volumi permanenti esistenti devono essere rimontati con l'opzione
--use-adls=truedi montaggio.
- Per creare un account Data Lake Storage usando il driver nel provisioning dinamico, specificare
Per impostazione predefinita, la cache blobfuse si trova nella
/mntdirectory . Se lo SKU della macchina virtuale fornisce un disco temporaneo, la/mntdirectory viene montata sul disco temporaneo. Tuttavia, se lo SKU della macchina virtuale non fornisce un disco temporaneo, la/mntdirectory viene montata sul disco del sistema operativo, è possibile impostare--tmp-path=l'opzione di montaggio per specificare una directory cache diversa.
Usare classi di archiviazione predefinite per creare PV dinamici con l'archiviazione BLOB di Azure
Per definire la modalità di creazione di un contenitore di Archiviazione BLOB di Azure, viene utilizzata una classe di archiviazione. Nel gruppo di risorse nodo viene creato automaticamente un account di archiviazione da usare insieme alla classe di archiviazione per includere il contenitore di Archiviazione BLOB di Azure. Quando si usano i driver CSI di archiviazione nel servizio Azure Kubernetes, ci sono altre due StorageClasses predefinite usano il driver CSI dell'archiviazione BLOB di Azure.
I criteri di recupero in entrambe le classi di archiviazione garantiscono che l'istanza di Archiviazione BLOB di Azure sottostante venga eliminata quando viene eliminato il rispettivo volume persistente. Le classi di archiviazione configurano anche il contenitore per essere espandibili per impostazione predefinita, perché il parametro set allowVolumeExpansion è impostato su true.
Annotazioni
La compattazione dei volumi permanenti non è supportata.
È possibile selezionare uno degli SKU di ridondanza dell'archiviazione di Azure seguenti per il parametro skuname nella definizione della classe di archiviazione:
- Standard_LRS: Archiviazione Standard con ridondanza locale
- Premium_LRS: Archiviazione con ridondanza locale Premium
- Standard_ZRS: archiviazione con ridondanza della zona standard
- Premium_ZRS: archiviazione con ridondanza locale premium
- Standard_GRS: Archiviazione con ridondanza geografica standard
- Standard_RAGRS: archiviazione con ridondanza geografica e accesso in lettura Standard
Creare classi di archiviazione personalizzate per volumi persistenti dinamici con l'archiviazione BLOB di Azure
Le classi di archiviazione predefinite sono adatte per la maggior parte degli scenari. In alcuni casi, potrebbe essere necessario personalizzare la propria classe di archiviazione con i propri parametri. In questa sezione vengono forniti due esempi: uno che usa il protocollo NFS e uno con blobfuse.
Esempio di classe di archiviazione personalizzata con il protocollo NFS
Il manifesto in questo esempio monta un contenitore di archiviazione BLOB usando il protocollo NFS. È possibile usarlo per aggiungere il tags parametro .
Creare un file denominato
blob-nfs-sc.yamle incollarlo nel manifesto di esempio seguente: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: trueCreare la classe di archiviazione usando il
kubectl applycomando :kubectl apply -f blob-nfs-sc.yamlL'output dovrebbe essere simile all'output di esempio seguente:
storageclass.storage.k8s.io/blob-nfs created
Esempio di classe di archiviazione personalizzata con blobfuse
Il manifesto in questo esempio usa blobfuse e monta un contenitore di archiviazione BLOB. È possibile usarlo per aggiornare il skuName parametro .
Creare un file denominato
blobfuse-sc.yamle incollarlo nel manifesto di esempio seguente: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.Creare la classe di archiviazione usando il
kubectl applycomando :kubectl apply -f blobfuse-sc.yamlL'output dovrebbe essere simile all'output di esempio seguente:
storageclass.storage.k8s.io/blob-fuse created
Parametri della classe di archiviazione per i volumi persistenti dinamici con l'archiviazione BLOB di Azure
Usare i gruppi di parametri seguenti per definire una classe di archiviazione personalizzata per le attestazioni del volume permanente con Azure'archiviazione BLOB:
-
Account di archiviazione:
skuName,resourceGrouplocation,subscriptionID,storageAccount,networkEndpointType,accessTier,allowSharedKeyAccessallowBlobPublicAccesspublicNetworkAccessrequireInfraEncryptiontagse .matchTags -
Contenitore ed endpoint:
protocol,containerName,containerNamePrefixserver,storageEndpointSuffix,useDataPlaneAPI,softDeleteBlobs, ,softDeleteContainerseenableBlobVersioning. -
BlobFuse:
storeAccountKey,getLatestAccountKey,secretNamesecretNamespace, eisHnsEnabled. -
NFS:
mountPermissionsefsGroupChangePolicy. -
Rete virtuale:
vnetResourceGroup,vnetName,subnetNameevnetLinkName.
Configurare i parametri dell'account di archiviazione per i TELEVISORi dinamici con archiviazione BLOB Azure
Usare i parametri seguenti per configurare l'account di archiviazione Azure per un pv con provisioning dinamico:
| Nome | Meaning | Valori disponibili | Obbligatorio | Valore predefinito |
|---|---|---|---|---|
skuName |
Specificare un tipo di account di archiviazione di Azure (alias: storageAccountType). |
Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRSPremium_ZRS |
NO | Standard_LRS |
location |
Specificare una posizione di Azure. | eastus |
NO | Se vuota, il driver usa lo stesso nome di posizione del cluster corrente. |
resourceGroup |
Specificare un nome del gruppo di risorse di Azure. | myResourceGroup | NO | Se vuoto, il driver usa lo stesso nome del gruppo di risorse del cluster corrente. |
subscriptionID |
Specificare l'ID sottoscrizione di Azure in cui viene creata la directory di archiviazione BLOB. | ID sottoscrizione di Azure | NO | Se non è vuoto, è necessario specificare resourceGroup. |
storageAccount |
Specificare un nome di account di archiviazione di Azure. | storageAccountName | NO | Quando non viene specificato un nome di account di archiviazione specifico, il driver cerca un account di archiviazione appropriato che corrisponda alle impostazioni dell'account all'interno dello stesso gruppo di risorse. Se non riesce a trovare un account di archiviazione corrispondente, ne crea uno nuovo. Tuttavia, se viene specificato un nome di account di archiviazione, tale account di archiviazione deve essere già presente. |
networkEndpointType |
Consente di specificare il tipo di endpoint di rete per l'account di archiviazione creato dal driver. Se si specifica privateEndpoint, il driver crea un endpoint privato per l'account di archiviazione. Per altri casi, il driver crea un endpoint di servizio per il protocollo NFS. |
"", privateEndpoint |
NO |
"". Per un cluster del servizio Azure Kubernetes, aggiungere il nome del cluster del servizio Azure Kubernetes al ruolo Collaboratore nel gruppo di risorse che ospita la rete virtuale. |
accessTier |
Specificare il livello di accesso per l'account di archiviazione. |
Hot, Cool, Premium |
NO | Usa il livello predefinito per il tipo di account di archiviazione selezionato. Gli account Premium supportano solo Premium. |
allowBlobPublicAccess |
Consentire o impedire l'accesso pubblico a tutti i BLOB o contenitori per un account di archiviazione creato dal driver. |
true, false |
NO | false |
allowSharedKeyAccess |
Consentire o impedire l'accesso con chiave condivisa per un account di archiviazione creato dal driver. Questo parametro si applica ai montaggi NFS e ai montaggi BlobFuse che usano l'identità gestita. |
true, false |
NO | true |
requireInfraEncryption |
Richiedere un livello secondario di crittografia gestita dalla piattaforma per i dati inattivi in un account di archiviazione creato dal driver. |
true, false |
NO | false |
publicNetworkAccess |
Impostare la proprietà di accesso alla rete pubblica per un account di archiviazione creato dal driver. |
Enabled, Disabled, SecuredByPerimeter |
NO | Usa l'impostazione predefinita Archiviazione di Azure. |
tags |
Creare tag in un nuovo account di archiviazione. | Formato tag: foo=aaa,bar=bbb |
NO | "" |
matchTags |
Trovare tag di corrispondenza quando il driver cerca un account di archiviazione appropriato. |
true, false |
NO | false |
Configurare i parametri del contenitore e dell'endpoint per i TELEVISORi dinamici con archiviazione BLOB Azure
Usare i parametri seguenti per configurare il contenitore, il protocollo di montaggio, l'endpoint di archiviazione e i tag per un pv con provisioning dinamico:
| Nome | Descrizione | Valori disponibili | Obbligatorio | Valore predefinito |
|---|---|---|---|---|
protocol |
Specificare il montaggio BlobFuse, BlobFuse2 o NFS v3. |
fuse, fuse2, nfs |
NO | fuse |
containerName |
Specificare il nome del contenitore esistente (directory). | container | NO | Se vuoto, il driver crea un nuovo nome di contenitore, a partire da pvc-fuse per blobfuse o pvc-nfs per NFS v3. |
containerNamePrefix |
Specificare il prefisso della directory di archiviazione di Azure creato dal driver. | Può contenere solo lettere minuscole, numeri e trattini e deve contenere meno di 21 caratteri. | NO | |
server |
Specificare il nome di dominio dell'account di archiviazione di Azure. | Nome di dominio DNS dell'account di archiviazione esistente, ad esempio <storage-account>.blob.core.windows.net. |
NO | Se vuoto, il driver utilizza il nome di dominio DNS predefinito <storage-account>.blob.core.windows.net o dell'account di archiviazione cloud sovrano. |
storageEndpointSuffix |
Consente di specificare il suffisso dell'endpoint di archiviazione di Azure. | core.windows.net |
NO | Se vuoto, il driver usa il suffisso dell'endpoint di archiviazione predefinito in base all'ambiente cloud. |
useDataPlaneAPI |
Usare l'API del piano dati Archiviazione di Azure per creare ed eliminare contenitori. Questa opzione può evitare la limitazione della limitazione del provider di risorse di archiviazione ma non riesce quando il firewall dell'account di archiviazione o le regole della rete virtuale bloccano l'accesso al piano dati. |
true, false |
NO | false |
softDeleteBlobs |
Abilitare l'eliminazione temporanea per i BLOB e specificare il periodo di conservazione in giorni. | Un periodo di conservazione, ad esempio 7 |
NO | Disattivato |
softDeleteContainers |
Abilitare l'eliminazione temporanea per i contenitori e specificare il periodo di conservazione in giorni. | Un periodo di conservazione, ad esempio 7 |
NO | Disattivato |
enableBlobVersioning |
Abilitare il controllo delle versioni dei BLOB. Non è possibile abilitare il controllo delle versioni quando protocol è nfs o isHnsEnabled è true. |
true, false |
NO | false |
Configurare i parametri BlobFuse per i TELEVISORi dinamici con archiviazione BLOB Azure
I parametri seguenti si applicano solo quando si usa BlobFuse per un pv con provisioning dinamico:
| Nome | Descrizione | Valori disponibili | Obbligatorio | Valore predefinito |
|---|---|---|---|---|
storeAccountKey |
Specificare la chiave dell'account di archiviazione per il segreto Kubernetes. Nota: false significa che il driver usa l'identità kubelet per ottenere la chiave dell'account. |
true,false |
NO | true |
getLatestAccountKey |
Ottenere la chiave dell'account di archiviazione più recente in base al tempo di creazione anziché usare la prima chiave. |
true, false |
NO | false |
secretName |
Consente di specificare il nome del segreto per archiviare la chiave dell'account. | NO | ||
secretNamespace |
Consente di specificare lo spazio dei nomi del segreto per archiviare la chiave dell'account. |
default,kube-system, e così via. |
NO | Spazio dei nomi PVC |
isHnsEnabled |
Abilitare Hierarchical namespace per un account Azure Data Lake Storage. |
true,false |
NO | false |
Configurare i parametri NFS per i TELEVISORi dinamici con archiviazione BLOB Azure
Il parametro seguente si applica solo quando si usa NFS per un pv con provisioning dinamico:
| Nome | Descrizione | Valori disponibili | Obbligatorio | Valore predefinito |
|---|---|---|---|---|
mountPermissions |
Consente di specificare le autorizzazioni per le cartelle montate. | Il valore predefinito è 0777. Se impostato su 0, il driver non eseguirà chmod dopo il montaggio. |
NO | 0777 |
fsGroupChangePolicy |
Specificare il modo in cui il driver cambia la proprietà del volume. Il driver ignora securityContext.fsGroupChangePolicy nella specifica del pod. |
OnRootMismatch, Always, None |
NO | OnRootMismatch |
Configurare i parametri di rete virtuale per i TELEVISORi dinamici con archiviazione BLOB di Azure
Usare i parametri seguenti quando il driver configura l'accesso alla rete virtuale per un pv con provisioning dinamico:
| Nome | Descrizione | Valori disponibili | Obbligatorio | Valore predefinito |
|---|---|---|---|---|
vnetResourceGroup |
Specificare il gruppo di risorse che contiene la rete virtuale. | Nome del gruppo di risorse esistente | NO | Usa il vnetResourceGroup valore nella configurazione cloud Azure. |
vnetName |
Specificare il nome della rete virtuale. | Nome della rete virtuale esistente | NO | Usa il vnetName valore nella configurazione cloud Azure. |
subnetName |
Specificare una o più subnet del nodo del servizio Azure Kubernetes esistenti. Separare più nomi di subnet con virgole. | Nomi di subnet esistenti | NO | Aggiorna tutte le subnet nella rete virtuale del cluster. |
vnetLinkName |
Specificare il collegamento di rete virtuale associato alla zona DNS privata. | Nome del collegamento di rete virtuale esistente o nuovo | NO | <vnetName>-vnetlink |
Configurare gli endpoint privati per i TELEVISORi dinamici con archiviazione BLOB di Azure
Annotazioni
Se l'account di archiviazione viene creato dal driver, è sufficiente specificare networkEndpointType: privateEndpoint il parametro nella classe di archiviazione. Il driver CSI crea l'endpoint privato e la zona DNS privata (denominata privatelink.blob.core.windows.net) insieme all'account. Se si usa un account di archiviazione personalizzato, è necessario creare l'endpoint privato per l'account di archiviazione. Se si usa l'archiviazione BLOB di Azure in un cluster isolato di rete, è necessario creare una classe di archiviazione personalizzata con "networkEndpointType: privateEndpoint". È possibile usare il manifesto di esempio seguente come riferimento:
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.
Creare un PVC per il provisioning dinamico
Un PVC utilizza l'oggetto classe di archiviazione per effettuare il provisioning dinamico di un Azure Blob Storage. È possibile usare il manifesto YAML di esempio in questa sezione per creare un PVC di dimensioni pari a 5 GB con accesso ReadWriteMany . Per altre informazioni sulle modalità di accesso, vedere Kubernetes PV access modes.
Creare un file denominato
blob-nfs-pvc.yamle incollarlo nel manifesto YAML seguente:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-blob-storage spec: accessModes: - ReadWriteMany storageClassName: azureblob-nfs-premium resources: requests: storage: 5GiCreare il PVC usando il
kubectl createcomando :kubectl create -f blob-nfs-pvc.yamlVisualizzare lo stato del PVC con il
kubectl getcomando :kubectl get pvc azure-blob-storageL'output dovrebbe essere simile all'output di esempio seguente, che mostra che l'attestazione di volume persistente si trova in uno stato
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
Montare un volume di archiviazione BLOB con provisioning dinamico in un pod
Il seguente YAML crea un pod che utilizza la dichiarazione di volume persistente azure-blob-storage per montare lo storage BLOB di Azure nel percorso /mnt/blob.
Creare un file denominato
blob-nfs-pve incollare il manifesto YAML seguente. Assicurarsi che corrispondaclaimNameal PVC creato in precedenza (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-storageCreare il pod usando il
kubectl applycomando :kubectl apply -f blob-nfs-pv.yamlDopo aver eseguito correttamente il pod, creare un nuovo file denominato
test.txtusando il comando seguente:kubectl exec mypod -- touch /mnt/blob/test.txtVerificare che il disco sia montato correttamente usando il comando seguente per elencare i file nella directory montata:
kubectl exec mypod -- ls /mnt/blobL'output dovrebbe essere simile all'output di esempio seguente, che mostra il file
test.txtcreato nell'archiviazione BLOB di Azure montata:test.txt
Usare un oggetto StatefulSet per gestire il ciclo di vita di un volume con l'archiviazione BLOB di Azure
Per rendere persistente un volume di archiviazione per il carico di lavoro, è possibile usare un oggetto StatefulSet. Questa configurazione semplifica l'assegnazione dei volumi esistenti ai nuovi pod che sostituiscono quelli che hanno smesso di funzionare. Gli esempi seguenti illustrano come configurare un oggetto StatefulSet per l'archiviazione BLOB usando il protocollo NFS o Blobfuse.
Annotazioni
Se usi il protocollo NFS, l'identità del piano di controllo (control plane) del tuo cluster AKS (il nome del tuo cluster AKS) deve essere aggiunta al ruolo Collaboratore nella rete virtuale e nel gruppo di sicurezza di rete.
Creare un file denominato
azure-blob-nfs-ss.yamle incollarlo nel manifesto YAML seguente: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: 100GiCreare statefulSet usando il
kubectl createcomando :kubectl create -f azure-blob-nfs-ss.yaml
Creare un PV statico con l'archiviazione Blob di Azure
Le sezioni seguenti forniscono istruzioni per la creazione di un pv statico con l'archiviazione BLOB di Azure. Un pv statico è un volume permanente creato manualmente da un amministratore. Questo volume persistente è disponibile per l'uso da parte dei pod nel cluster. Per usare un PV statico, si crea un PVC che fa riferimento al PV e quindi si crea un pod che fa riferimento al PVC.
Parametri del volume CSI per i TELEVISORi statici con archiviazione BLOB Azure
La tabella seguente elenca i parametri che è possibile usare nell'origine del volume CSI per un pv statico con archiviazione BLOB Azure:
| Nome | Meaning | Valori disponibili | Obbligatorio | Valore predefinito |
|---|---|---|---|---|
volumeHandle |
Specificare un valore che il driver può usare per identificare in modo univoco il contenitore BLOB di archiviazione nel cluster. | Un modo consigliato per produrre un valore univoco consiste nel combinare il nome dell'account di archiviazione univoco globale e il nome del contenitore: {account-name}_{container-name}.Nota: i caratteri #, / sono riservati per l'uso interno e non possono essere usati in un handle di volume. |
Sì | |
volumeAttributes.subscriptionID |
Specificare l'ID sottoscrizione Azure in cui si trova l'account di archiviazione. | ID sottoscrizione di Azure | NO | Se non è vuoto, è necessario specificare volumeAttributes.resourceGroup. |
volumeAttributes.resourceGroup |
Specificare il nome del gruppo di risorse di Azure. | myResourceGroup | NO | Se vuoto, il driver usa lo stesso nome del gruppo di risorse del cluster corrente. |
volumeAttributes.storageAccount |
Consente di specificare il nome di un account di archiviazione di Azure esistente. | storageAccountName | Sì | |
volumeAttributes.containerName |
Specificare il nome del contenitore esistente. | container | Sì | |
volumeAttributes.protocol |
Specificare il montaggio BlobFuse, BlobFuse2 o NFS v3. |
fuse, fuse2, nfs |
NO | fuse |
volumeAttributes.server |
Specificare l'indirizzo del server dell'account di archiviazione di Azure. | Indirizzo del server esistente, ad esempio <storage-account>.blob.core.windows.net |
NO | Usa l'indirizzo del server predefinito per l'ambiente cloud corrente. |
volumeAttributes.storageEndpointSuffix |
Specificare il suffisso dell'endpoint di archiviazione Azure. |
core.windows.neto il suffisso per un altro cloud Azure |
NO | Usa il suffisso predefinito per l'ambiente cloud corrente. |
| --- | I parametri seguenti sono solo per blobfuse | --- | --- | --- |
volumeAttributes.secretName |
Nome segreto che archivia il nome e la chiave dell'account di archiviazione (si applica solo per SMB). | NO | ||
volumeAttributes.secretNamespace |
Specificare lo spazio dei nomi del segreto per archiviare la chiave dell'account. | default |
NO | Spazio dei nomi PVC |
volumeAttributes.getLatestAccountKey |
Ottenere la chiave dell'account di archiviazione più recente in base al tempo di creazione anziché usare la prima chiave. |
true, false |
NO | false |
nodeStageSecretRef.name |
Specificare il nome del segreto Kubernetes che contiene le credenziali per la gestione temporanea del volume. | Nome del segreto Kubernetes esistente. Il segreto deve contenere una delle chiavi seguenti: azurestorageaccountkey, azurestorageaccountsastoken, msisecreto azurestoragespnclientsecret. |
NO | |
nodeStageSecretRef.namespace |
Specifica lo spazio dei nomi del segreto. | Spazio dei nomi Kubernetes | Sì | |
| --- | I parametri seguenti sono solo per il protocollo NFS | --- | --- | --- |
volumeAttributes.mountPermissions |
Consente di specificare le autorizzazioni per le cartelle montate. | 0777 |
NO | |
volumeAttributes.fsGroupChangePolicy |
Specificare il modo in cui il driver cambia la proprietà del volume. Il driver ignora securityContext.fsGroupChangePolicy nella specifica del pod. |
OnRootMismatch, Always, None |
NO | OnRootMismatch |
| --- |
I parametri seguenti sono solo per la funzionalità: blobfuse Autenticazione dell'identità gestita e del nome principale del servizio |
--- | --- | --- |
volumeAttributes.AzureStorageAuthType |
Specificare il tipo di autenticazione. |
Key, SAS, MSISPN |
NO | Key |
volumeAttributes.AzureStorageIdentityClientID |
Specificare l'ID client dell'identità. | NO | ||
volumeAttributes.AzureStorageIdentityObjectID |
Specificare l'ID oggetto Identity. Questo parametro è deprecato. | NO | ||
volumeAttributes.AzureStorageIdentityResourceID |
Specificare l'ID della risorsa di identità. | NO | ||
volumeAttributes.MSIEndpoint |
Specificare l'endpoint MSI. | NO | ||
volumeAttributes.AzureStorageSPNClientID |
Specificare l'ID client spn (Service Principal Name) di Azure. | NO | ||
volumeAttributes.AzureStorageSPNTenantID |
Specificare l'ID tenant SPN di Azure. | NO | ||
volumeAttributes.AzureStorageAADEndpoint |
Specificare l'endpoint Microsoft Entra. | NO | ||
| --- | I parametri seguenti sono solo per l'autenticazione dell'identità del carico di lavoro blobfuse | --- | --- | --- |
volumeAttributes.ClientID |
Specificare l'ID client dell'identità gestita usata per l'autenticazione dell'identità del carico di lavoro. | ID client dell'identità gestita | NO | |
volumeAttributes.mountWithWorkloadIdentityToken |
Montare BlobFuse con un token di identità del carico di lavoro. Questa funzionalità è disponibile in anteprima. Specificare il valore come stringa. |
"true", "false" |
NO | "false" |
| --- | I parametri seguenti sono validi per le funzionalità: chiave dell'account in lettura blobfuse o token di firma di accesso condiviso da Key Vault | --- | --- | --- |
volumeAttributes.keyVaultURL |
Specificare il nome DNS di Azure Key Vault. | {vault-name}.vault.azure.net | NO | |
volumeAttributes.keyVaultSecretName |
Specificare il nome del segreto di Azure Key Vault. | Nome del segreto di Azure Key Vault esistente. | NO | |
volumeAttributes.keyVaultSecretVersion |
Versione del segreto di Azure Key Vault. | Versione esistente | NO | Se vuoto, il driver usa la versione corrente. |
Creare un contenitore di archiviazione BLOB
Quando si crea una risorsa di Archiviazione BLOB di Azure da usare con Azure Kubernetes Service (AKS), è possibile creare la risorsa nel gruppo di risorse del nodo. Questo approccio consente al cluster AKS di accedere e gestire la risorsa di archiviazione BLOB.
Ottieni il nome del gruppo di risorse del nodo del tuo cluster AKS usando il comando
az aks showcon il parametro--query nodeResourceGroup.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsvL'output del comando è simile all'esempio seguente:
MC_myResourceGroup_myAKSCluster_eastusSe si crea l'account di archiviazione nel gruppo di risorse del nodo, usare il nome del gruppo di risorse del nodo restituito nel passaggio precedente, ad esempio
MC_myResourceGroup_myAKSCluster_eastus. Seguire quindi la procedura descritta in Gestire l'archiviazione BLOB per autorizzare l'accesso e creare un contenitore in tale account di archiviazione.
Montare il volume
In questa sezione si monta il volume permanente usando il protocollo NFS o Blobfuse.
L'account di archiviazione deve avere lo spazio dei nomi NFS v3 e gerarchico abilitato. Il montaggio dell'archiviazione BLOB tramite il protocollo NFS v3 non esegue l'autenticazione usando una chiave dell'account. La subnet del nodo del servizio Azure Kubernetes deve avere accesso di rete all'account di archiviazione abilitato per NFS tramite una rete virtuale o un endpoint privato selezionato. Assicurarsi che i gruppi di sicurezza di rete consentano il traffico NFS sulle porte 111 e 2048. Per altre informazioni su come configurare l'accesso NFS all'account di archiviazione, vedere Montare gestione rete virtuale di Azure usando il protocollo NFS (Network File System) 3.0.
L'esempio seguente illustra come montare un contenitore di archiviazione BLOB come volume permanente usando il protocollo NFS.
Creare un file denominato
pv-blob-nfs.yamle incollare il codice YAML seguente. Inspec.csi.volumeAttributes, aggiornareresourceGroup,storageAccountecontainerName.Annotazioni
volumeHandleil valore deve essere un volumeID univoco per ogni contenitore BLOB di archiviazione identico nel cluster. Il carattere#e/sono riservati per l'uso interno e non possono essere usati.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: nfsAnnotazioni
Anche se l'attributo di capacità dell'API Kubernetes è obbligatorio, il driver CSI dell'archiviazione BLOB Azure non usa questo valore perché è possibile scrivere in modo flessibile i dati fino a raggiungere il limite di capacità dell'account di archiviazione. Il valore viene usato solo per la corrispondenza delle dimensioni tra I VV e i PVC. Nell'esempio viene usato un valore fittizio di
1Pi. Questo valore non imposta la capacità del contenitore di archiviazione BLOB.Creare il PV usando il comando
kubectl create.kubectl create -f pv-blob-nfs.yamlCreare un file denominato
pvc-blob-nfs.yamle incollare il codice YAML seguente. InvolumeNameaggiornare il valore in modo che corrisponda al nome del pv creato nel passaggio precedente.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-blob spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi volumeName: pv-blob storageClassName: azureblob-nfs-premiumCreare il PVC usando il
kubectl createcomando :kubectl create -f pvc-blob-nfs.yaml
Usare il volume permanente
Il codice YAML seguente crea un pod che usa il volume persistente o l'attestazione di volume persistente denominata pvc-blob creata in precedenza per montare l'archiviazione BLOB di Azure nel percorso /mnt/blob.
Creare un file denominato
nginx-pod-blob.yamle incollarlo nel manifesto YAML seguente. Assicurarsi che corrispondaclaimNameal PVC creato in precedenza (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-blobCreare il pod e montare il PVC usando il
kubectl createcomando :kubectl create -f nginx-pod-blob.yamlCreare una sessione interattiva della shell con il pod per verificare che l'archiviazione BLOB sia montata correttamente usando il comando
kubectl execseguente:kubectl exec -it nginx-blob -- df -hL'output dovrebbe essere simile all'output di esempio seguente, che mostra che l'archiviazione BLOB è montata nel percorso
/mnt/blob.Filesystem Size Used Avail Use% Mounted on ... blobfuse 14G 41M 13G 1% /mnt/blob ...