Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Een permanent volume vertegenwoordigt een stukje opslag dat is ingericht voor gebruik met Kubernetes-pods. U kunt een permanent volume met een of veel pods gebruiken en het kan dynamisch of statisch worden ingericht. Als meerdere pods gelijktijdige toegang tot hetzelfde opslagvolume nodig hebben, kunt u Azure Files gebruiken om verbinding te maken met behulp van het SMB-protocol (Server Message Block). In dit artikel leest u hoe u dynamisch een Azure-bestandsshare maakt voor gebruik door meerdere pods in een AKS-cluster (Azure Kubernetes Service).
Dit artikel laat het volgende zien:
- Werk met een dynamisch persistent volume (PV) door eerst het CSI-stuurprogramma (Container Storage Interface) te installeren en vervolgens dynamisch een of meer Azure-bestandsshares te creëren om aan een pod te koppelen.
- Werk met een statische PV door een of meer Azure-bestandsshares te maken of gebruik een bestaande share en koppel deze aan een pod.
Zie Opslagopties voor toepassingen in AKS voor meer informatie over Kubernetes-volumes.
Voordat u begint
- U hebt een Azure-opslagaccount nodig.
- Zorg ervoor dat Azure CLI versie 2.0.59 of hoger is geïnstalleerd en geconfigureerd. Voer
az --version
uit om de versie te bekijken. Als u Azure CLI wilt installeren of upgraden, raadpleegt u Azure CLI installeren. - Wanneer u kiest tussen standard- en Premium-bestandsshares, is het belangrijk dat u het inrichtingsmodel en de vereisten begrijpt van het verwachte gebruikspatroon dat u wilt uitvoeren in Azure Files. Zie Een Azure Files-prestatielaag kiezen op basis van gebruikspatronen voor meer informatie.
Een volume dynamisch inrichten
Deze sectie bevat richtlijnen voor clusterbeheerders die een of meer permanente volumes willen inrichten met details van een of meer shares in Azure Files. Een permanente volumeclaim (PVC) maakt gebruik van het opslagklasseobject om een Azure Files-bestandsshare dynamisch in te richten.
Parameters van opslagklasse voor dynamische PersistentVolumes
De volgende tabel bevat parameters die u kunt gebruiken om een aangepaste opslagklasse te definiëren voor uw PersistentVolumeClaim.
Naam | Betekenis | Beschikbare waarde | Verplicht | Standaardwaarde |
---|---|---|---|---|
accounttoegangslaag | Toegangslaag voor opslagaccount | Standaardaccount kan kiezen Hot of Cool , en Premium-account kan alleen kiezen Premium . |
Nee | Leeg. Gebruik de standaardinstelling voor verschillende typen opslagaccounts. |
accountQuota | Hiermee beperkt u het quotum voor een account. U kunt een maximumquotum opgeven in GB (standaard 102400 GB). Als het account het opgegeven quotum overschrijdt, slaat het stuurprogramma het selecteren van het account over. | Nee | 102400 |
|
staBlobOpenbareToegangToe | Openbare toegang tot alle blobs of containers toestaan of weigeren voor het opslagaccount dat door de driver is gemaakt. |
true of false |
Nee | false |
verwijderingsbeleid voor bewaarbeleid uitschakelen | Geef op of DeleteRetentionPolicy moet worden uitgeschakeld voor het opslagaccount dat is gemaakt door het stuurprogramma. |
true of false |
Nee | false |
folderName | Geef de mapnaam op in de Azure-bestandsshare. | Bestaande mapnaam in Azure-bestandsshare. | Nee | Als de mapnaam niet bestaat in de bestandsshare, mislukt de koppeling. |
krijgLaatsteAccount | Hiermee bepaalt u of u de meest recente accountsleutel wilt ophalen op basis van de aanmaaktijd. Dit stuurprogramma krijgt standaard de eerste sleutel. |
true of false |
Nee | false |
locatie | Geef de Azure-regio van het Azure-opslagaccount op. | Bijvoorbeeld: eastus . |
Nee | Als leeg, gebruikt het stuurprogramma dezelfde locatienaam als het huidige AKS-cluster. |
matchTags | Koppel tags wanneer de bestuurder probeert een geschikte opslagaccount te vinden. |
true of false |
Nee | false |
netwerk-eindpunttype | Geef het type netwerkeindpunt op voor het opslagaccount dat door het stuurprogramma is gemaakt. Als privateEndpoint dit is opgegeven, wordt er een privé-eindpunt gemaakt voor het opslagaccount. In andere gevallen wordt standaard een service-eindpunt gemaakt. |
"",privateEndpoint |
Nee | "" |
protocol | Geef het protocol voor bestandsshares op. |
smb , nfs |
Nee | smb |
requireInfraEncryption | Geef op of de service een secundaire versleutelingslaag toepast met door het platform beheerde sleutels voor data-at-rest voor het opslagaccount dat door het stuurprogramma is gemaakt. |
true of false |
Nee | false |
resourcegroep | Geef de resourcegroep voor de Azure-schijven op. | Naam van bestaande resourcegroep | Nee | Als dit leeg is, gebruikt het stuurprogramma dezelfde resourcegroepnaam als het huidige AKS-cluster. |
selecteerWillekeurigOvereenkomendeAccount | Bepaalt of een overeenkomend account willekeurig moet worden geselecteerd. Standaard selecteert het stuurprogramma altijd het eerste overeenkomende account in alfabetische volgorde (Opmerking: dit stuurprogramma maakt gebruik van de zoekcache voor accounts, wat resulteert in ongelijke verdeling van het maken van bestanden in meerdere accounts). |
true of false |
Nee | false |
bedieningscomputer | Geef het serveradres van het Azure-opslagaccount op. | Bestaand serveradres, bijvoorbeeld accountname.privatelink.file.core.windows.net . |
Nee | Als het stuurprogramma leeg is, gebruikt het stuurprogramma het standaardadres accountname.file.core.windows.net of een ander soevereine cloudaccountadres. |
shareAccessTier | Toegangslaag voor bestandsshare | Account voor algemeen gebruik v2 kan kiezen tussen TransactionOptimized (standaard), Hot en Cool . Premium-opslagaccounttype alleen voor bestandsshares. |
Nee | Leeg. Gebruik de standaardinstelling voor verschillende typen opslagaccounts. |
deelnaam | Geef de naam van de Azure-bestandsshare op. | Naam van bestaande of nieuwe Azure-bestandsshare. | Nee | Als dit leeg is, genereert het stuurprogramma een Azure-bestandssharenaam. |
delenNaamVoorvoegsel | Geef het voorvoegsel voor de naam van de Azure-bestandsshare op dat door het stuurprogramma is gemaakt. | De naam van de share mag alleen kleine letters, cijfers, afbreekstreepjes en lengte bevatten, mag uit minder dan 21 tekens bestaan. | Nee | |
SKU-naam | Azure Files-opslagaccounttype (alias: storageAccountType ) |
Standard_LRS , Standard_ZRS , Standard_GRS , Standard_RAGRS , Standard_RAGZRS , Premium_LRS , Premium_ZRS |
Nee | Standard_LRS De minimale bestandsgrootte voor het Premium-accounttype is 100 GB. Het ZRS-accounttype wordt ondersteund in beperkte regio's. NFS-bestandsshare ondersteunt alleen het Premium-accounttype. |
opslagaccount | Geef een Azure Storage-accountnaam op. | naam van opslagaccount | -Nee | Wanneer er geen specifieke opslagaccountnaam is opgegeven, zoekt het stuurprogramma naar een geschikt opslagaccount dat overeenkomt met de accountinstellingen binnen dezelfde resourcegroep. Als er geen overeenkomend opslagaccount wordt gevonden, wordt er een nieuw opslagaccount gemaakt. Als er echter een naam voor een opslagaccount is opgegeven, moet het opslagaccount al bestaan. |
storageEndpointSuffix | Geef het achtervoegsel van het Azure-opslageindpunt op. |
core.windows.net , core.chinacloudapi.cn , enz. |
Nee | Als het stuurprogramma leeg is, wordt het standaardachtervoegsel voor het opslageindpunt gebruikt volgens de cloudomgeving. Bijvoorbeeld: core.windows.net . |
etiketten | Tags worden gemaakt in een nieuw opslagaccount. | Tag-indeling: 'foo=aaa,bar=bbb' | Nee | "" |
--- | De volgende parameters zijn alleen voor het SMB-protocol | --- | --- | |
abonnementID | Geef de Azure-abonnements-id op waarin de Azure-bestandsshare wordt gemaakt. | Azure-abonnements-id | Nee | Indien niet leeg, resourceGroup moet worden opgegeven. |
winkelAccountSleutel | Geef op of de accountsleutel moet worden opgeslagen in een Kubernetes-geheim. |
true of false false betekent dat het stuurprogramma de kubelet identity gebruikt om de account key op te halen. |
Nee | true |
geheimeNaam | Geef de geheime naam op om de accountsleutel op te slaan. | Nee | ||
secretNamespace | Geef de naamruimte van het geheim op om de accountsleutel op te slaan. Notitie: Als secretNamespace niet is opgegeven, wordt het geheim aangemaakt in dezelfde naamruimte als de pod. |
default ,kube-system , enz. |
Nee | PVC-naamruimte, bijvoorbeeld csi.storage.k8s.io/pvc/namespace |
useDataPlaneAPI | Geef op of de GEGEVENSVLAK-API moet worden gebruikt voor het maken/verwijderen/verkleinen van bestandsshares, waardoor het probleem met de beperking van de SRP-API kan worden opgelost omdat de gegevensvlak-API bijna geen limiet heeft, terwijl deze mislukt wanneer er firewall- of Vnet-instellingen in het opslagaccount zijn. |
true of false |
Nee | false |
--- | De volgende parameters zijn alleen voor het NFS-protocol | --- | --- | |
mountPermissions | Machtigingen voor gekoppelde mappen. De standaardwaarde is 0777 . Als 0 is ingesteld, voert het stuurprogramma chmod niet uit na het koppelen. |
0777 |
Nee | |
rootSquashType | Geef het gedrag van root-squashing op voor de gedeelde map. De standaardwaarde is NoRootSquash |
AllSquash , , NoRootSquash RootSquash |
Nee | |
--- | De volgende parameters zijn alleen bedoeld voor de VNet-instelling. Bijvoorbeeld NFS, privé-eindpunt | --- | --- | |
fsGroupChangePolicy | Geeft aan hoe het stuurprogramma het eigendom van het volume wijzigt. Pod securityContext.fsGroupChangePolicy wordt genegeerd. |
OnRootMismatch (standaard), Always , None |
Nee | OnRootMismatch |
subnetNaam | Subnetnaam | Bestaande subnetnaam van het agentknooppunt. | Nee | Als het stuurprogramma leeg is, wordt de waarde gebruikt in het configuratiebestand van de subnetName Azure-cloud. |
vnetName | Naam van virtueel netwerk | Naam van bestaand virtueel netwerk. | Nee | als het stuurprogramma leeg is, worden alle subnetten onder het virtuele clusternetwerk bijgewerkt. |
vnetResourceGroup | Geef de VNet-resourcegroep op waarin het virtuele netwerk is gedefinieerd. | Naam van bestaande resourcegroep. | Nee | Als het stuurprogramma leeg is, wordt de waarde gebruikt in het configuratiebestand van de vnetResourceGroup Azure-cloud. |
1 Als het opslagaccount door het stuurprogramma wordt gemaakt, hoeft u alleen de parameter in de opslagklasse op te geven networkEndpointType: privateEndpoint
. Het CSI-stuurprogramma maakt het privé-eindpunt en de privé-DNS-zone (genaamd privatelink.file.core.windows.net
) samen met de account. Als u uw eigen opslagaccount gebruikt, moet u het privé-eindpunt voor het opslagaccount maken. Als u Azure Files-opslag in een geïsoleerd netwerkcluster gebruikt, moet u een aangepaste opslagklasse maken met networkEndpointType: privateEndpoint. U kunt het onderstaande voorbeeld volgen ter referentie.
---
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
Een opslagklasse maken
In opslagklassen wordt gedefinieerd hoe u een Azure-bestandsshare maakt. Er wordt automatisch een opslagaccount gemaakt in de knooppuntresourcegroep voor gebruik met de opslagklasse voor het opslaan van de Azure Files-bestandsshare. Kies voor de volgende Azure Storage-redundantie-SKU'sskuName
:
-
Standard_LRS
: Standaard lokaal redundante opslag (LRS) -
Standard_GRS
: Standaard geografisch redundante opslag (GRS) -
Standard_ZRS
: Standaard zone-redundante opslag (ZRS) -
Standard_RAGRS
: Standaard geografisch redundante opslag met leestoegang (RA-GRS) -
Premium_LRS
: Premium lokaal redundante opslag (LRS) -
Premium_ZRS
: Premium zone redundante opslag (ZRS)
Notitie
De minimale Premium-bestandsshare is 100 GB.
Zie Kubernetes Storage-klassen voor meer informatie over Kubernetes-opslagklassen voor Azure Files.
Maak een bestand met de naam
azure-file-sc.yaml
en kopieer dit in het volgende voorbeeldmanifest. Zie de sectiemountOptions
voor meer informatie.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
Maak de opslagklasse met behulp van de
kubectl apply
opdracht.kubectl apply -f azure-file-sc.yaml
Een permanente volumeclaim maken
Een permanente volumeclaim (PVC) maakt gebruik van het opslagklasseobject om een Azure-bestandsshare dynamisch in te richten. U kunt de volgende YAML gebruiken om een permanente volumeclaim van 100 GB te maken met ReadWriteMany-toegang . Zie Kubernetes permanent volume voor meer informatie over toegangsmodi.
Maak een bestand met de naam
azure-file-pvc.yaml
en kopieer dit in de volgende YAML. Zorg ervoor dat destorageClassName
opslagklasse overeenkomt met de opslagklasse die u in de vorige stap hebt gemaakt.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-azurefile spec: accessModes: - ReadWriteMany storageClassName: my-azurefile resources: requests: storage: 100Gi
Notitie
Als u de
Premium_LRS
SKU voor uw opslagklasse gebruikt, moet de minimumwaarde zijnstorage
100Gi
.Maak de permanente volumeclaim met behulp van de
kubectl apply
opdracht.kubectl apply -f azure-file-pvc.yaml
Zodra het voltooien is, wordt de bestandsshare gemaakt. Er wordt ook een Kubernetes-geheim gemaakt dat verbindingsgegevens en referenties bevat. U kunt de
kubectl get
opdracht gebruiken om de status van het PVC weer te geven:kubectl get pvc my-azurefile
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-azurefile Bound pvc-8436e62e-a0d9-11e5-8521-5a8664dc0477 100Gi RWX my-azurefile 5m
Het permanente volume gebruiken
De volgende YAML maakt een pod die gebruikmaakt van de persistent volume claim my-azurefile om de Azure Files-bestandsshare op het pad /mnt/azure te koppelen. Geef voor Windows Server-containers een mountPath
op met de Windows-padconventie, zoals 'D:'.
Maak een bestand met de naam
azure-pvc-files.yaml
en kopieer het in de volgende YAML. Zorg ervoor dat declaimName
overeenkomt met de PVC die u in de vorige stap hebt gemaakt.kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: /mnt/azure name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: my-azurefile
Maak de pod met behulp van de
kubectl apply
opdracht.kubectl apply -f azure-pvc-files.yaml
U hebt nu een draaiende pod met uw Azure Files-bestandsshare die is aangekoppeld aan de map /mnt/azure. Deze configuratie kan worden weergegeven bij het inspecteren van uw pod met behulp van de
kubectl describe
opdracht. In de volgende samengevatte voorbeelduitvoer ziet u het volume dat in de container is gemonteerd.Containers: mypod: Container ID: docker://053bc9c0df72232d755aa040bfba8b533fa696b123876108dec400e364d2523e Image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine Image ID: docker-pullable://nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424 State: Running Started: Fri, 01 Mar 2019 23:56:16 +0000 Ready: True Mounts: /mnt/azure from volume (rw) /var/run/secrets/kubernetes.io/serviceaccount from default-token-8rv4z (ro) [...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: my-azurefile ReadOnly: false [...]
Koppelingsopties
De standaardwaarde voor fileMode
en dirMode
is 0777 voor Kubernetes-versies 1.13.0 en hoger. Als u het permanente volume dynamisch maakt met een opslagklasse, kunt u koppelopties opgeven voor het opslagklasseobject. Zie Koppelingsopties voor meer informatie. In het volgende voorbeeld wordt 0777 ingesteld:
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
Notitie
De locatie voor het configureren van koppelopties (mountOptions) is afhankelijk van of u dynamische of statische permanente volumes inricht. Als u een volume dynamisch inricht met een opslagklasse, geeft u de koppelingsopties op voor het opslagklasseobject (soort: StorageClass). Als u een volume statisch inricht, geeft u de koppelingsopties op voor het object PersistentVolume (soort: PersistentVolume). Als u de bestandsshare koppelt als een inlinevolume, geeft u de koppelingsopties op voor het Pod-object (soort: Pod).
Azure-tags gebruiken
Zie Azure-tags gebruiken in Azure Kubernetes Service (AKS) voor meer informatie over het gebruik van Azure-tags.
Statisch een volume inrichten
Deze sectie bevat richtlijnen voor clusterbeheerders die een of meer permanente volumes willen maken die details bevatten van een bestaande Azure Files-share voor gebruik met een workload.
Statische inrichtingsparameters voor PersistentVolume
De volgende tabel bevat parameters die u kunt gebruiken om een PersistentVolume te definiëren.
Naam | Betekenis | Beschikbare waarde | Verplicht | Standaardwaarde |
---|---|---|---|---|
volumeAttributes.resourceGroup | Geef een Azure-resourcegroepnaam op. | myResourceGroup (mijnHulpbronnenGroep) | Nee | Als dit leeg is, gebruikt het stuurprogramma dezelfde resourcegroepnaam als het huidige cluster. |
volume-attributen.opslagaccount | Geef een bestaande azure-opslagaccountnaam op. | naam van opslagaccount | Ja | |
volume-attributen.deelnaam | Geef een Azure-bestandssharenaam op. | bestandsdelingsnaam | Ja | |
volumeAttributes.folderName | Geef een mapnaam op in de Azure-bestandsshare. | folderName | Nee | Als de mapnaam niet in de bestandsshare bestaat, mislukt de koppeling. |
volume-attributen.protocol | Geef het protocol voor bestandsshares op. |
smb , nfs |
Nee | smb |
volumeAttributes.server | Serveradres voor Azure-opslagaccount opgeven | Bestaand serveradres, bijvoorbeeld accountname.privatelink.file.core.windows.net . |
Nee | Als het stuurprogramma leeg is, gebruikt het stuurprogramma het standaardadres accountname.file.core.windows.net of een ander soevereine cloudaccountadres. |
--- | De volgende parameters zijn alleen voor het SMB-protocol | --- | --- | --- |
volumeAttributes.secretName | Geef een geheime naam op waarin de naam en sleutel van het opslagaccount worden opgeslagen. | Nee | ||
volumeAttributes.secretNamespace | Geef een geheime naamruimte op. |
default ,kube-system , enz. |
Nee | PVC-naamruimte (csi.storage.k8s.io/pvc/namespace ) |
nodeStageSecretRef.name | Geef een geheime naam op waarin de naam en sleutel van het opslagaccount worden opgeslagen. | Bestaande geheime naam. | Nee | Als er niets is ingevuld, gebruikt de driver de kubelet-identiteit om de accountsleutel op te halen. |
nodeStageSecretRef.namespace | Geef een geheime naamruimte op. | Kubernetes-naamruimte | Nee | |
--- | De volgende parameters zijn alleen voor het NFS-protocol | --- | --- | --- |
volumeAttriburen.fsGroepsVeranderingsbeleid | Geeft aan hoe het besturingssysteem het eigendom van een volume wijzigt. Pod securityContext.fsGroupChangePolicy wordt genegeerd. |
OnRootMismatch (standaard), Always , None |
Nee | OnRootMismatch |
volume-attributen.koppelbevoegdheden | Geef gekoppelde mapmachtigingen op. De standaardwaarde is 0777 |
Nee |
Een Azure-bestandsshare maken
Voordat u een Azure Files-bestandsshare als Kubernetes-volume kunt gebruiken, moet u een Azure Storage-account en de bestandsshare maken.
Haal de naam van de resourcegroep op met behulp van de
az aks show
opdracht met de--query nodeResourceGroup
parameter.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
MC_myResourceGroup_myAKSCluster_eastus
Maak een opslagaccount met behulp van de
az storage account create
opdracht met de--sku
parameter. Met de volgende opdracht maakt u een opslagaccount met behulp van deStandard_LRS
SKU. Zorg ervoor dat u de volgende tijdelijke aanduidingen vervangt:-
myAKSStorageAccount
met de naam van het opslagaccount -
nodeResourceGroupName
met de naam van de resourcegroep waarin de AKS-clusterknooppunten worden gehost -
location
met de naam van de regio waarin u de resource wilt maken. Dit moet dezelfde regio zijn als de AKS-clusterknooppunten.
az storage account create -n myAKSStorageAccount -g nodeResourceGroupName -l location --sku Standard_LRS
-
Exporteer de verbindingsreeks als een omgevingsvariabele met behulp van de volgende opdracht, die u gebruikt om de bestandsshare te maken.
export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)
Maak de bestandsshare met behulp van de
az storage share create
opdracht. Zorg ervoor dat ushareName
vervangt door de share naam.az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
Exporteer de sleutel van het opslagaccount als een omgevingsvariabele met behulp van de volgende opdracht.
STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
Echo de naam en sleutel van het opslagaccount met behulp van de volgende opdracht. Kopieer deze informatie, omdat u deze waarden nodig hebt bij het maken van het Kubernetes-volume.
echo Storage account key: $STORAGE_KEY
Een Kubernetes-geheim maken
Kubernetes heeft referenties nodig voor toegang tot de bestandsshare die in de vorige stap is gemaakt. Deze referenties worden opgeslagen in een Kubernetes-geheim, waarnaar wordt verwezen wanneer u een Kubernetes-pod maakt.
Maak het geheim met behulp van de
kubectl create secret
opdracht. In het volgende voorbeeld wordt een geheim gemaakt met de naam azure-secret en wordt de azurestorageaccountname en azurestorageaccountkey uit de vorige stap ingevuld. Als u een bestaand Azure-opslagaccount wilt gebruiken, geeft u de accountnaam en -sleutel op.kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
Bestandsdeling koppelen als een persistent volume
Maak een nieuw bestand met de naam
azurefiles-pv.yaml
en kopieer de volgende inhoud hierin. Ondercsi
, werkresourceGroup
,volumeHandle
, enshareName
bij. Voor koppelopties is de standaardwaardefileMode
dirMode
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 locks
Maak het permanente volume met behulp van de
kubectl create
opdracht.kubectl create -f azurefiles-pv.yaml
Maak een nieuw bestand met de naam azurefiles-mount-options-pvc.yaml en kopieer de volgende inhoud.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi volumeName: azurefile resources: requests: storage: 5Gi
Maak de PersistentVolumeClaim met behulp van de
kubectl apply
opdracht.kubectl apply -f azurefiles-mount-options-pvc.yaml
Controleer of uw PersistentVolumeClaim is gemaakt en gebonden aan het PersistentVolume met behulp van de
kubectl get
opdracht.kubectl get pvc azurefile
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azurefile Bound azurefile 5Gi RWX azurefile 5s
Werk de containerspecificatie bij om te verwijzen naar uw PersistentVolumeClaim en uw pod in het YAML-bestand. Voorbeeld:
... volumes: - name: azure persistentVolumeClaim: claimName: azurefile
Een podspecificatie kan niet worden bijgewerkt, dus verwijder de pod met behulp van de
kubectl delete
opdracht en maak deze opnieuw met behulp van dekubectl apply
opdracht.kubectl delete pod mypod kubectl apply -f azure-files-pod.yaml
Bestandsdeling koppelen als een inline-volume
Notitie
Om prestatieproblemen te voorkomen, raden we u aan een permanent volume te gebruiken in plaats van een inline volume wanneer meerdere pods toegang hebben tot dezelfde bestandsshare. Inlinevolume heeft alleen toegang tot geheimen in dezelfde naamruimte als de pod. Als u een andere geheime naamruimte wilt opgeven, gebruikt u een permanent volume.
Als u de Azure Files-bestandsshare wilt koppelen aan uw pod, configureert u het volume in de containerspecificatie.
Maak een nieuw bestand met de naam
azure-files-pod.yaml
en kopieer de volgende inhoud hierin. Als u de naam van de bestandsshare of de naam van het geheim hebt gewijzigd, werkt u deshareName
ensecretName
bij. U kunt ook hetmountPath
pad, waarin de bestandsshare in de pod is gekoppeld, bijwerken. Geef voor Windows Server-containers eenmountPath
op met de Windows-padconventie, zoals 'D:'.apiVersion: v1 kind: Pod metadata: name: mypod spec: nodeSelector: kubernetes.io/os: linux containers: - image: 'mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine' name: mypod resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: azure mountPath: /mnt/azure readOnly: false volumes: - name: azure csi: driver: file.csi.azure.com volumeAttributes: secretName: azure-secret # required shareName: aksshare # required mountOptions: 'dir_mode=0777,file_mode=0777,cache=strict,actimeo=30,nosharesock,nobrl' # optional
Maak de pod met behulp van de
kubectl apply
opdracht.kubectl apply -f azure-files-pod.yaml
U hebt nu een actieve pod met een Azure Files-bestandsshare die is gekoppeld aan /mnt/azure. U kunt controleren of de share succesvol is gekoppeld met behulp van de
kubectl describe
opdracht.kubectl describe pod mypod
Beste praktijken
Als u de beste ervaring met Azure Files wilt hebben, volgt u deze aanbevolen procedures:
- De locatie voor het configureren van koppelopties (mountOptions) is afhankelijk van of u dynamische of statische permanente volumes inricht. Als u een volume dynamisch inricht met een opslagklasse, geeft u de koppelingsopties op voor het opslagklasseobject (soort: StorageClass). Als u een volume statisch inricht, geeft u de koppelingsopties op voor het object PersistentVolume (soort: PersistentVolume). Als u de bestandsshare koppelt als een inlinevolume, geeft u de koppelingsopties op voor het Pod-object (soort: Pod).
- We raden FIO aan bij het uitvoeren van benchmarkingtests. Voor meer informatie, zie hulpprogramma's en tests voor benchmarking.
SMB-shares
Aanbevolen koppelingsopties voor SMB-shares zijn beschikbaar in het volgende voorbeeld van de opslagklasse:
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
Als u Premium-bestandsshares (SSD) gebruikt en uw workload veel metagegevens bevat, moet u zich inschrijven om de functie voor het opslaan van metagegevens te gebruiken om de prestaties te verbeteren.
Zie Prestaties verbeteren voor SMB Azure-bestandsshares voor meer informatie.
NFS-delen
Aanbevolen mount-opties voor NFS-shares zijn beschikbaar in de volgende voorbeelden van opslagklassen:
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
Verhoog de leesvoorloopgrootte om de leesdoorvoer te verbeteren.
Hoewel Azure Files ondersteuning biedt voor het instellen van nconnect tot de maximale stand van 16, raden we u aan om de mountopties te configureren met de optimale instelling nconnect=4. Momenteel zijn er geen voordelen meer dan vier kanalen voor de Azure Files-implementatie van nconnect.
Zie Prestaties verbeteren voor NFS Azure-bestandsshares voor meer informatie.
Volgende stappen
Zie CSI-stuurprogrammaparameters voor Azure Files.
Zie Best practices voor opslag en back-ups in AKS voor de bijbehorende aanbevolen procedures.
Azure Kubernetes Service