Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wolumin trwały reprezentuje element magazynu, który został aprowizowany do użycia z zasobnikami Kubernetes. Można używać woluminu trwałego z jednym lub wieloma zasobnikami, który może być przydzielany dynamicznie lub statycznie. Jeśli wiele podów potrzebuje współbieżnego dostępu do tego samego woluminu magazynu, możesz użyć usługi Azure Files do połączenia, korzystając z protokołu SMB (Server Message Block). W tym artykule przedstawiono, jak dynamicznie utworzyć udostępniany zasób plikowy Azure do wykorzystania przez wiele podów w klastrze usługi Azure Kubernetes Service (AKS).
W tym artykule pokazano, jak wykonać następujące działania:
- Współpracuj z dynamicznym woluminem trwałym (PV), instalując sterownik interfejsu magazynu kontenerów (CSI) i dynamicznie tworząc co najmniej jeden udział plików platformy Azure w celu dołączenia do zasobnika.
- Pracuj ze statycznym serwerem pv, tworząc co najmniej jeden udział plików platformy Azure lub używając istniejącego i dołączając go do zasobnika.
Więcej informacji na temat woluminów Kubernetes można znaleźć w artykule Opcje magazynu dla aplikacji w usłudze AKS.
Zanim rozpoczniesz
- Potrzebujesz konta usługi Azure Storage.
- Upewnij się, że masz zainstalowany i skonfigurowany interfejs wiersza polecenia platformy Azure w wersji 2.0.59 lub nowszej. Uruchom
az --version
, aby znaleźć wersję. Jeśli musisz zainstalować lub uaktualnić, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure. - Podczas wybierania między udziałami plików w warstwie Standardowa i Premium, ważne jest, aby zrozumieć model udostępniania i wymagania oczekiwanego wzorca użycia, jaki planujesz zastosować w usłudze Azure Files. Aby uzyskać więcej informacji, zobacz Wybieranie warstwy wydajności usługi Azure Files na podstawie wzorców użycia.
Dynamicznie przydzielić wolumin
Ta sekcja zawiera wskazówki dla administratorów klastra, którzy chcą aprowizować co najmniej jeden wolumin trwały zawierający szczegóły co najmniej jednego udziału w usłudze Azure Files. Definicja trwałego woluminu (PVC) używa obiektu klasy magazynu do dynamicznego tworzenia udziału plików Azure Files.
Parametry klasy magazynu dla dynamicznych Trwałych Wolumenów
Poniższa tabela zawiera parametry, których można użyć do zdefiniowania niestandardowej klasy pamięci masowej dla elementu PersistentVolumeClaim.
Nazwa | Znaczenie | Dostępna wartość | Obowiązkowy | Wartość domyślna |
---|---|---|---|---|
Poziom dostępu konta | Warstwa dostępu dla konta magazynowego | Konto standardowe może wybrać Hot lub Cool , a konto Premium może wybrać tylko pozycję Premium . |
Nie. | Pusty. Użyj ustawienia domyślnego dla różnych typów kont przechowywania. |
accountQuota | Ogranicza limit przydziału dla konta. Możesz określić maksymalny limit przydziału w GB (domyślnie 102400 GB). Jeśli konto przekroczy określony limit przydziału, sterownik pomija wybranie konta. | Nie. | 102400 |
|
zezwólNaPublicznyDostępDoBlobów | Zezwól lub odmów publicznego dostępu do wszystkich obiektów blob lub kontenerów dla konta magazynowego utworzonego przez sterownik. |
true lub false |
Nie. | false |
wyłącz politykę retencji usuwania | Określ, czy należy wyłączyć zasadę DeleteRetentionPolicy dla konta pamięci masowej utworzonego przez sterownik. |
true lub false |
Nie. | false |
nazwaFolderu | Określ nazwę folderu w udziale plików platformy Azure. | Istniejąca nazwa folderu w udziale plików platformy Azure. | Nie. | Jeśli nazwa folderu nie istnieje w udziale plików, instalacja zakończy się niepowodzeniem. |
zdobądźNajnowszeKonto | Określa, czy pobrać najnowszy klucz konta na podstawie czasu utworzenia. Ten sterownik domyślnie pobiera pierwszy klucz. |
true lub false |
Nie. | false |
lokalizacja | Określ region świadczenia usługi Azure Storage. | Na przykład eastus . |
Nie. | Jeśli jest pusty, sterownik używa tej samej nazwy lokalizacji co bieżący klaster usługi AKS. |
matchTags | Dopasuj tagi, gdy sterownik próbuje znaleźć odpowiednie konto magazynu. |
true lub false |
Nie. | false |
typ punktu końcowego sieci | Określ typ punktu końcowego sieci dla konta magazynu utworzonego przez sterownik. Jeśli privateEndpoint zostanie określony, dla konta przechowywania utworzony zostanie prywatny punkt końcowy. W innych przypadkach punkt końcowy usługi jest tworzony domyślnie. |
"",privateEndpoint |
Nie. | "" |
protokół | Określ protokół udostępniania plików. |
smb , nfs |
Nie. | smb |
requireInfraEncryption | Określ, czy usługa stosuje dodatkową warstwę szyfrowania z kluczami zarządzanymi przez platformę dla danych magazynowanych na koncie magazynu, które zostało utworzone przez sterownik. |
true lub false |
Nie. | false |
resourceGroup | Określ grupę zasobów dla dysków platformy Azure. | Nazwa istniejącej grupy zasobów | Nie. | Jeśli jest pusty, sterownik używa tej samej nazwy grupy zasobów co bieżący klaster usługi AKS. |
wybierzLosowePasująceKonto | Określa, czy losowo wybrać zgodne konto. Domyślnie sterownik zawsze wybiera pierwsze zgodne konto w kolejności alfabetycznej (Uwaga: ten sterownik używa pamięci podręcznej wyszukiwania kont, co powoduje nierównomierną dystrybucję tworzenia plików na wielu kontach). |
true lub false |
Nie. | false |
serwer | Określ adres serwera konta usługi Azure Storage. | Istniejący adres serwera, na przykład accountname.privatelink.file.core.windows.net . |
Nie. | Jeśli jest pusty, sterownik używa domyślnego accountname.file.core.windows.net lub innego adresu konta suwerennej chmury. |
poziom_dostępu_share | Warstwa dostępu dla udostępniania plików | Konto ogólnego przeznaczenia w wersji 2 może wybierać między TransactionOptimized (ustawieniem domyślnym), Hot i Cool . Typ konta przechowywania premium tylko dla udziałów plikowych. |
Nie. | Pusty. Użyj ustawienia domyślnego dla różnych typów kont przechowywania. |
NazwaUdostępnienia | Określ nazwę udziału plików w usłudze Azure. | Istniejąca lub nowa nazwa udziału plików Azure. | Nie. | Jeśli jest pusty, sterownik generuje nazwę udziału plików platformy Azure. |
shareNamePrefix | Określ prefiks nazwy udziału plików w Azure, który został utworzony przez sterownik. | Nazwa udziału może zawierać tylko małe litery, cyfry, łączniki i długość powinna być mniejsza niż 21 znaków. | Nie. | |
Nazwa SKU | Typ konta magazynu usługi Azure Files (alias: storageAccountType ) |
Standard_LRS , Standard_ZRS Standard_GRS , Standard_RAGRS , Standard_RAGZRS Premium_LRS Premium_ZRS |
Nie. | Standard_LRS Minimalny rozmiar udziału plików dla typu konta Premium wynosi 100 GB. Typ konta ZRS jest obsługiwany tylko w niektórych regionach. Udział plików NFS obsługuje tylko typ konta Premium. |
konto magazynu | Określ nazwę konta usługi Azure Storage. | storageAccountName | -Nie | Jeśli określona nazwa konta magazynu nie zostanie podana, sterownik wyszuka odpowiednie konto magazynu zgodne z ustawieniami konta w tej samej grupie zasobów. Jeśli nie uda się znaleźć pasującego konta magazynowego, zostanie utworzone nowe. Jeśli jednak zostanie określona nazwa konta magazynu, konto magazynu musi już istnieć. |
storageEndpointSuffix | Określ sufiks punktu końcowego usługi Azure Storage. |
core.windows.net , core.chinacloudapi.cn , itp. |
Nie. | Jeśli jest pusty, sterownik używa domyślnego sufiksu punktu końcowego przechowywania zgodnie ze środowiskiem chmury. Na przykład core.windows.net . |
Etykiety | Tagi są tworzone na nowym koncie magazynu. | Format tagu: "foo=aaa,bar=bbb" | Nie. | "" |
--- | Następujące parametry dotyczą tylko protokołu SMB | --- | --- | |
identyfikator subskrypcji | Określ identyfikator subskrypcji platformy Azure, w którym jest tworzony udział plików platformy Azure. | Identyfikator subskrypcji Azure | Nie. | Jeśli nie jest pusty, resourceGroup należy podać. |
kluczKontaSklepu | Określ, czy klucz konta ma być przechowywany w tajnych danych Kubernetes. |
true lub false false oznacza, że sterownik używa tożsamości kubeleta do uzyskania klucza konta. |
Nie. | true |
nazwaTajna | Określ nazwę sekretu do przechowywania klucza konta. | Nie. | ||
secretNamespace | Określ nazwę przestrzeni sekretnych do przechowywania klucza konta. Uwaga: Jeśli secretNamespace nie zostanie określony, tajemnica zostanie utworzona w tej samej przestrzeni nazw co zasobnik. |
default ,kube-system itp. |
Nie. | Przestrzeń nazw PVC, na przykład csi.storage.k8s.io/pvc/namespace |
useDataPlaneAPI | Określ, czy używać interfejsu API płaszczyzny danych do tworzenia/usuwania/zmiany rozmiaru udziału plików, co może rozwiązać problem z ograniczaniem przepływności interfejsu API protokołu SRP, ponieważ interfejs API płaszczyzny danych nie ma prawie żadnego limitu, podczas gdy w przypadku ustawienia zapory lub sieci wirtualnej na koncie magazynu zakończy się niepowodzeniem. |
true lub false |
Nie. | false |
--- | Następujące parametry dotyczą tylko protokołu NFS | --- | --- | |
uprawnienia montowania | Zainstalowane uprawnienia folderu. Wartość domyślna to 0777 . Jeśli ustawiono wartość 0 , sterownik nie wykonuje operacji chmod po montażu |
0777 |
Nie. | |
rootSquashType | Określ zachowanie root squashing dla udziału. Wartość domyślna to NoRootSquash |
AllSquash , , NoRootSquash RootSquash |
Nie. | |
--- | Następujące parametry dotyczą tylko ustawień sieci wirtualnej. Na przykład NFS, prywatny punkt końcowy | --- | --- | |
Polityka zmiany grupy fs | Wskazuje, jak sterownik zmienia własność woluminu. Zasobnik securityContext.fsGroupChangePolicy jest ignorowany. |
OnRootMismatch (ustawienie domyślne), Always , None |
Nie. | OnRootMismatch |
nazwa podsieci | Nazwa podsieci | Istniejąca nazwa podsieci węzła agenta. | Nie. | Jeśli jest pusty, sterownik używa wartości subnetName w pliku konfiguracji chmury platformy Azure. |
vnetName | Nazwa sieci wirtualnej | Istniejąca nazwa sieci wirtualnej. | Nie. | jeśli jest pusty, sterownik zaktualizuje wszystkie podsieci w sieci wirtualnej klastra. |
vnetResourceGroup | Określ grupę zasobów sieci wirtualnej, w której zdefiniowano sieć wirtualną. | Istniejąca nazwa grupy zasobów. | Nie. | Jeśli jest pusty, sterownik używa wartości vnetResourceGroup w pliku konfiguracji chmury platformy Azure. |
1 Jeśli konto storage jest tworzone przez sterownik, wystarczy określić parametr networkEndpointType: privateEndpoint
w klasie storage. Sterownik CSI tworzy prywatny punkt końcowy i prywatną strefę DNS (o nazwie privatelink.file.core.windows.net
) wraz z kontem. Jeśli używasz własnego konta magazynu, musisz utworzyć prywatny punkt końcowy dla konta magazynu. Jeśli używasz magazynu usługi Azure Files w izolowanym klastrze sieciowym, musisz utworzyć niestandardową klasę magazynu z parametrem "networkEndpointType: privateEndpoint". Możesz kierować się poniższym przykładem jako odniesieniem.
---
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
Utwórz klasę magazynu
Klasy pamięci definiują sposób tworzenia udziału plików Azure. Konto magazynu jest tworzone automatycznie w grupie zasobów węzła do użycia z klasą magazynu do przechowywania udziału plików usługi Azure Files. Wybierz jedną z następujących opcji nadmiarowości magazynowania w Azure dla programu :
-
Standard_LRS
: Standardowy magazyn lokalnie nadmiarowy (LRS) -
Standard_GRS
: Standardowe przechowywanie georedundantne (GRS) -
Standard_ZRS
: Strefowa nadmiarowość magazynu Standard (ZRS) -
Standard_RAGRS
: Geograficznie nadmiarowa pamięć masowa z dostępem do odczytu w stopniu standardowym (RA-GRS) -
Premium_LRS
: Magazyn lokalnie nadmiarowy w warstwie Premium (LRS) -
Premium_ZRS
: Magazyn strefowo nadmiarowy w warstwie Premium (ZRS)
Uwaga / Notatka
Minimalny udział plików w warstwie Premium wynosi 100 GB.
Aby uzyskać więcej informacji na temat klas magazynu kubernetes dla usługi Azure Files, zobacz Klasy magazynu Kubernetes.
Utwórz plik o nazwie
azure-file-sc.yaml
i skopiuj w poniższym przykładowym manifeście. Aby uzyskać więcej informacji na tematmountOptions
, zobacz sekcję Opcje montowania.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
Utwórz klasę magazynu przy użyciu polecenia
kubectl apply
.kubectl apply -f azure-file-sc.yaml
Tworzenie żądania trwałego woluminu
Żądanie trwałego wolumenu (PVC) używa obiektu klasy magazynu do dynamicznego tworzenia udziału plików platformy Azure. Poniższy kod YAML umożliwia utworzenie trwałego oświadczenia woluminu o rozmiarze 100 GB z dostępem ReadWriteMany . Aby uzyskać więcej informacji na temat trybów dostępu, zobacz Kubernetes trwały wolumin.
Utwórz plik o nazwie
azure-file-pvc.yaml
i skopiuj go w następującym języku YAML. Upewnij się, żestorageClassName
odpowiada klasie magazynu utworzonej w poprzednim kroku.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-azurefile spec: accessModes: - ReadWriteMany storageClassName: my-azurefile resources: requests: storage: 100Gi
Uwaga / Notatka
Jeśli używasz
Premium_LRS
SKU dla klasy przechowywania, minimalną wartościąstorage
powinna być100Gi
.Utwórz żądanie utworzenia trwałego woluminu za pomocą polecenia
kubectl apply
.kubectl apply -f azure-file-pvc.yaml
Po zakończeniu zostanie utworzone udostępnianie plików. Zostanie również utworzony sekret Kubernetes, który zawiera informacje o połączeniu i poświadczenia. Możesz użyć
kubectl get
polecenia , aby wyświetlić stan PCV:kubectl get pvc my-azurefile
Dane wyjściowe polecenia przypominają następujący przykład:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-azurefile Bound pvc-8436e62e-a0d9-11e5-8521-5a8664dc0477 100Gi RWX my-azurefile 5m
Korzystanie z woluminu trwałego
Poniższy kod YAML tworzy zasobnik, który używa trwałego żądania przydzielenia woluminu my-azurefile do zamontowania udziału plików usługi Azure Files w ścieżce /mnt/azure. W przypadku kontenerów systemu Windows Server określ mountPath
, używając konwencji ścieżki Windows, takiej jak "D:".
Utwórz plik o nazwie
azure-pvc-files.yaml
i skopiuj go w następującym pliku YAML. Upewnij się, że elementclaimName
odpowiada elementowi PVC utworzonemu w poprzednim kroku.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
Utwórz pod przy użyciu polecenia
kubectl apply
.kubectl apply -f azure-pvc-files.yaml
Masz teraz uruchomiony zasobnik z udziałem plików usługi Azure Files zainstalowanym w katalogu /mnt/azure . Tę konfigurację można zobaczyć podczas inspekcji zasobnika przy użyciu polecenia
kubectl describe
. Następujące skrócone przykładowe dane wyjściowe pokazują wolumin zainstalowany w kontenerze.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 [...]
Opcje montowania
Wartość domyślna elementu fileMode
i dirMode
to 0777 dla platformy Kubernetes w wersji 1.13.0 lub nowszej. Jeśli dynamicznie tworzysz wolumin trwały za pomocą klasy magazynu, możesz określić opcje instalacji w obiekcie klasy magazynu. Aby uzyskać więcej informacji, zobacz Opcje instalacji. W poniższym przykładzie ustawiono wartość 0777:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: my-azurefile
provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
allowVolumeExpansion: true
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict
- actimeo=30
- nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
parameters:
skuName: Premium_LRS
Uwaga / Notatka
Lokalizacja konfigurowania opcji instalacji (mountOptions) zależy od tego, czy aprowizujesz dynamiczne lub statyczne woluminy trwałe. Jeśli dynamicznie aprowizujesz wolumin za pomocą klasy pamięci masowej, określ opcje montowania w obiekcie klasy pamięci masowej (rodzaj: StorageClass). Jeśli statycznie przydzielasz wolumin, określ opcje montowania w obiekcie PersistentVolume (rodzaj: PersistentVolume). Jeśli instalujesz udział plików jako wolumin wbudowany, określ opcje instalacji w obiekcie Zasobnik (rodzaj: Zasobnik).
Korzystanie z tagów platformy Azure
Aby uzyskać więcej informacji na temat używania tagów platformy Azure, zobacz Używanie tagów platformy Azure w usłudze Azure Kubernetes Service (AKS).
Statyczne przydzielenie woluminu
Ta sekcja zawiera wskazówki dla administratorów klastra, którzy chcą utworzyć co najmniej jeden wolumin trwały zawierający szczegóły istniejącego udziału usługi Azure Files do użycia z obciążeniem.
Statyczne parametry przydzielenia dla PersistentVolume
Poniższa tabela zawiera parametry, których można użyć do zdefiniowania elementu PersistentVolume.
Nazwa | Znaczenie | Dostępna wartość | Obowiązkowy | Wartość domyślna |
---|---|---|---|---|
volumeAttributes.resourceGroup | Określ nazwę grupy zasobów platformy Azure. | GrupaZasobówMoja | Nie. | Jeśli jest pusty, sterownik używa tej samej nazwy grupy zasobów co bieżący klaster. |
volumeAttributes.storageAccount | Określ istniejącą nazwę konta usługi Azure Storage. | storageAccountName | Tak | |
volumeAttributes.shareName | Określ nazwę udostępniania plików Azure. | nazwaUdostępnianiaPlików | Tak | |
volumeAttributes.folderName | Określ nazwę folderu w udziale plików platformy Azure. | nazwaFolderu | Nie. | Jeśli nazwa folderu nie istnieje w udziale plików, instalacja zakończy się niepowodzeniem. |
volumeAttributes.protocol | Określ protokół udostępniania plików. |
smb , nfs |
Nie. | smb |
volumeAttributes.server | Określanie adresu serwera konta usługi Azure Storage | Istniejący adres serwera, na przykład accountname.privatelink.file.core.windows.net . |
Nie. | Jeśli jest pusty, sterownik używa domyślnego accountname.file.core.windows.net lub innego adresu konta suwerennej chmury. |
--- | Następujące parametry dotyczą tylko protokołu SMB | --- | --- | --- |
volumeAttributes.secretName | Określ nazwę sekretu, który zawiera nazwę i klucz konta magazynu. | Nie. | ||
volumeAttributes.secretNamespace | Określ przestrzeń nazw tajnych. |
default ,kube-system itp. |
Nie. | Przestrzeń nazw PVC (csi.storage.k8s.io/pvc/namespace ) |
nodeStageSecretRef.name | Określ nazwę sekretu, który zawiera nazwę i klucz konta magazynu. | Istniejąca nazwa tajna. | Nie. | Jeśli pole jest puste, sterownik używa tożsamości kubeleta do uzyskania klucza konta. |
nodeStageSecretRef.namespace | Określ przestrzeń nazw tajnych. | Przestrzeń nazw platformy Kubernetes | Nie. | |
--- | Następujące parametry dotyczą tylko protokołu NFS | --- | --- | --- |
volumeAttributes.fsGroupChangePolicy | Wskazuje, w jaki sposób sterownik zmienia właściciela wolumenu. Zasobnik securityContext.fsGroupChangePolicy jest ignorowany. |
OnRootMismatch (ustawienie domyślne), Always , None |
Nie. | OnRootMismatch |
atrybutyWoluminu.uprawnieniaMontowania | Określ uprawnienia do zamontowanego folderu. Wartość domyślna to 0777 |
Nie. |
Utwórz udział plików Azure
Aby można było użyć udziału plików usługi Azure Files jako woluminu Kubernetes, musisz utworzyć konto usługi Azure Storage i udział plików.
Pobierz nazwę grupy zasobów przy użyciu polecenia
az aks show
z parametrem--query nodeResourceGroup
.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
Dane wyjściowe polecenia przypominają następujący przykład:
MC_myResourceGroup_myAKSCluster_eastus
Utwórz konto magazynu za pomocą polecenia
az storage account create
z parametrem--sku
. Następujące polecenie tworzy konto magazynowe przy użyciuStandard_LRS
klasy SKU. Upewnij się, że zastąpisz następujące elementy zastępcze:-
myAKSStorageAccount
z nazwą konta magazynowego -
nodeResourceGroupName
z nazwą grupy zasobów, w której znajdują się węzły klastra usługi AKS -
location
z nazwą regionu, w którym ma zostać utworzony zasób. Powinien on być tym samym regionem co węzły klastra usługi AKS.
az storage account create -n myAKSStorageAccount -g nodeResourceGroupName -l location --sku Standard_LRS
-
Wyeksportuj łańcuch połączenia jako zmienną środowiskową przy użyciu następującego polecenia, jakiego użyjesz do utworzenia udziału plików.
export AZURE_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string -n storageAccountName -g resourceGroupName -o tsv)
Utwórz udział plików za pomocą polecenia
az storage share create
. Pamiętaj, aby zastąpićshareName
nazwą udziału.az storage share create -n shareName --connection-string $AZURE_STORAGE_CONNECTION_STRING
Wyeksportuj klucz konta magazynu jako zmienną środowiskową przy użyciu następującego polecenia.
STORAGE_KEY=$(az storage account keys list --resource-group nodeResourceGroupName --account-name myAKSStorageAccount --query "[0].value" -o tsv)
Wyświetl nazwę i klucz konta przechowywania przy użyciu następującego polecenia. Skopiuj te informacje, ponieważ te wartości są potrzebne podczas tworzenia woluminu Kubernetes.
echo Storage account key: $STORAGE_KEY
Utwórz sekret Kubernetes
Kubernetes potrzebuje poświadczeń, aby uzyskać dostęp do zasobu plikowego utworzonego w poprzednim kroku. Te poświadczenia są przechowywane w sekrecie Kubernetes, do którego odwołujemy się podczas tworzenia poda Kubernetes.
Utwórz tajemnicę za pomocą polecenia
kubectl create secret
. Poniższy przykład tworzy tajny o nazwie azure-secret i wypełnia azurestorageaccountname i azurestorageaccountkey z poprzedniego kroku. Aby użyć istniejącego konta usługi Azure Storage, podaj nazwę konta i klucz.kubectl create secret generic azure-secret --from-literal=azurestorageaccountname=myAKSStorageAccount --from-literal=azurestorageaccountkey=$STORAGE_KEY
Montowanie udziału plików jako woluminu trwałego
Utwórz nowy plik o nazwie
azurefiles-pv.yaml
i skopiuj do poniższej zawartości. W obszarzecsi
, zaktualizujresourceGroup
,volumeHandle
, ishareName
. W przypadku opcji montowania wartością domyślną dlafileMode
idirMode
jest 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
Utwórz wolumin trwały przy użyciu
kubectl create
polecenia .kubectl create -f azurefiles-pv.yaml
Utwórz nowy plik o nazwie azurefiles-mount-options-pvc.yaml i skopiuj następującą zawartość.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi volumeName: azurefile resources: requests: storage: 5Gi
Utwórz PersistentVolumeClaim, używając polecenia
kubectl apply
.kubectl apply -f azurefiles-mount-options-pvc.yaml
Sprawdź, czy PersistentVolumeClaim został utworzony i powiązany z PersistentVolume przy użyciu poleceniem
kubectl get
.kubectl get pvc azurefile
Dane wyjściowe polecenia przypominają następujący przykład:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azurefile Bound azurefile 5Gi RWX azurefile 5s
Zaktualizuj specyfikację kontenera, aby odwołać się do elementu PersistentVolumeClaim i zasobnika w pliku YAML. Przykład:
... volumes: - name: azure persistentVolumeClaim: claimName: azurefile
Nie można zaktualizować specyfikacji zasobnika, dlatego usuń zasobnik, używając polecenia
kubectl delete
, i utwórz go ponownie, korzystając z poleceniakubectl apply
.kubectl delete pod mypod kubectl apply -f azure-files-pod.yaml
Montowanie zasobu plików jako woluminu wbudowanego
Uwaga / Notatka
Aby uniknąć problemu z wydajnością, zalecamy użycie woluminu trwałego zamiast woluminu wbudowanego, gdy wiele podów uzyskuje dostęp do tego samego współdzielonego zasobu plikowego. Wolumin wbudowany może uzyskiwać dostęp tylko do tajemnic w tej samej przestrzeni nazw co pod. Aby określić inną przestrzeń nazw dla sekretnych danych, użyj woluminu trwałego.
Aby zainstalować udział plików usługi Azure Files w zasobniku, należy skonfigurować wolumin w specyfikacji kontenera.
Utwórz nowy plik o nazwie
azure-files-pod.yaml
i skopiuj do poniższej zawartości. Jeśli zmieniono nazwę udziału plików lub nazwę wpisu tajnego, zaktualizuj elementyshareName
isecretName
. Można również zaktualizować elementmountPath
, czyli ścieżkę, w której znajduje się dysk współdzielony Files zamontowany w podzie. W przypadku kontenerów systemu Windows Server określmountPath
, używając konwencji ścieżki Windows, takiej jak "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
Utwórz pod przy użyciu polecenia
kubectl apply
.kubectl apply -f azure-files-pod.yaml
Teraz masz uruchomiony pod z udziałem plików Azure Files zamontowanym w lokalizacji /mnt/azure. Możesz zweryfikować, czy udział został pomyślnie zainstalowany, przy użyciu polecenia
kubectl describe
.kubectl describe pod mypod
Najlepsze rozwiązania
Aby uzyskać najlepsze środowisko pracy z usługą Azure Files, postępuj zgodnie z następującymi najlepszymi rozwiązaniami:
- Lokalizacja konfigurowania opcji instalacji (mountOptions) zależy od tego, czy aprowizujesz dynamiczne lub statyczne woluminy trwałe. Jeśli dynamicznie aprowizujesz wolumin za pomocą klasy pamięci masowej, określ opcje montowania w obiekcie klasy pamięci masowej (rodzaj: StorageClass). Jeśli statycznie przydzielasz wolumin, określ opcje montowania w obiekcie PersistentVolume (rodzaj: PersistentVolume). Jeśli instalujesz udział plików jako wolumin wbudowany, określ opcje instalacji w obiekcie Zasobnik (rodzaj: Zasobnik).
- Zalecamy FIO podczas uruchamiania testów porównawczych. Aby uzyskać więcej informacji, zobacz Narzędzia i testy porównawcze.
Udziały SMB
Zalecane opcje montowania udziałów SMB są dostępne w następującym przykładzie klasy pamięci:
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
Jeśli korzystasz z udziałów plików w warstwie Premium (SSD), a obciążenie jest duże, zarejestruj się, aby użyć funkcji buforowania metadanych w celu zwiększenia wydajności.
Aby uzyskać więcej informacji, zobacz Poprawa wydajności udziałów plików SMB na platformie Azure.
Udziały NFS
Zalecane opcje montowania zasobów udostępnionych NFS są dostępne w następującym przykładzie klasy magazynu.
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
Zwiększ rozmiar odczytu z wyprzedzeniem, aby zwiększyć przepływność odczytu.
Chociaż usługa Azure Files obsługuje ustawienie nconnect do maksymalnego ustawienia 16, zalecamy skonfigurowanie opcji instalacji przy użyciu optymalnego ustawienia nconnect=4. W chwili obecnej nie ma żadnych korzyści w implementacji nconnect dla usługi Azure Files poza czterema kanałami.
Aby uzyskać więcej informacji, zobacz Poprawa wydajności udostępniania plików platformy Azure NFS.
Dalsze kroki
Aby uzyskać informacje o parametrach sterownika CSI usługi Azure Files, zobacz parametry sterownika CSI.
Aby uzyskać informacje o skojarzonych najlepszych rozwiązaniach, zobacz Najlepsze rozwiązania dotyczące magazynu i tworzenia kopii zapasowych w usłudze AKS.
Azure Kubernetes Service