在 Azure Kubernetes Service (AKS) 中建立和使用 Azure 磁碟儲存體的磁碟區
永續性磁碟區代表一塊與 Kubernetes Pod 搭配使用的儲存體。 您可以將一或多個 Pod 搭配使用永續性磁碟區使用,並且您能以動態或靜態方式佈建。 本文示範如何在 Azure Kubernetes Service (AKS) 叢集內搭配 Azure 資料箱磁碟動態建立永續性磁碟區。
注意
您只能使用存取模式類型 ReadWriteOnce 來掛接 Azure 磁碟,以讓它僅供 AKS 中一個節點使用。 當 Pod 在相同節點上執行時,此存取模式仍允許多個 Pod 存取磁碟區。 如需詳細資訊,請參閱 Kubernetes 永續性磁碟區 存取模式。
本文章說明如何:
- 透過安裝容器儲存體介面 (CSI) 驅動程式,並動態建立一或多個 Azure 受控磁碟來連結至 Pod,以使用動態永續性磁碟區 (PV)。
- 透過建立一或多個 Azure 受控磁碟或使用現有的檔案共用並將其連結至 Pod,以使用靜態 PV。
如需 Kubernetes 磁碟區的詳細資訊,請參閱 AKS 中的應用程式適用的儲存體選項。
開始之前
確定您已安裝並設定 Azure CLI 2.0.59 版或更新版本。 執行
az --version
以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI。Azure 資料箱磁碟 CSI 驅動程式每個節點的磁碟區具有限制。 磁碟區計數會根據節點/節點集區的大小而變更。 執行kubectl get命令來判斷每個節點可配置的磁碟數目:
kubectl get CSINode <nodename> -o yaml
如果每個節點的磁碟區限制是工作負載的問題,請考慮針對永續性磁碟區使用 Azure 容器記憶體 ,而不是 CSI 驅動程式。
動態佈建磁碟區
本節可為想要佈建一或多個永續性磁碟區的叢集系統管理員提供指導,這些磁碟區中包含 Azure 資料箱磁碟儲存體上工作負載使用的詳細資料。 永續性磁碟區宣告 (PVC) 會使用儲存體類別物件,以動態方式佈建 Azure 資料箱磁碟儲存體容器。
動態永續性磁碟區的儲存類別參數
下表包含您可以用來定義 PersistentVolumeClaim 參數的自訂儲存類別。
名稱 | 意義 | 可用的值 | 必要 | 預設值 |
---|---|---|---|---|
skuName | Azure 磁碟的儲存體帳戶類型 (別名:storageAccountType ) |
Standard_LRS 、Premium_LRS 、、PremiumV2_LRS StandardSSD_LRS 、UltraSSD_LRS 、、、 Premium_ZRS StandardSSD_ZRS |
No | StandardSSD_LRS |
fsType | 檔案系統類型 | Linux 為 ext4 、ext3 、ext2 、xfs 、btrfs ,Windows 為 ntfs |
No | Linux 為 ext4 ,Windows 為 ntfs |
cachingMode | Azure 資料磁碟主機快取設定(PremiumV2_LRS 和 UltraSSD_LRS 僅支援 None 快取模式) |
None 、 、 ReadOnly ReadWrite |
No | ReadOnly |
resourceGroup | 指定 Azure 資料箱磁碟的資源群組 | 現有的資源群組名稱 | No | 若空白,驅動程式會使用與目前 AKS 叢集相同的資源群組名稱 |
DiskIOPSReadWrite | UltraSSD 磁碟或 Premium SSD v2 IOPS 功能 (最小值:2 IOPS/GiB) | 100~160000 | No | 500 |
DiskMBpsReadWrite | UltraSSD 磁碟或 Premium SSD v2 輸送量功能 (最小值:0.032/GiB) | 1~2000 | No | 100 |
LogicalSectorSize | Ultra 磁碟的邏輯磁區大小 (位元組)。 支援的值為 512 和 4096。 預設為 4096。 | 512 , 4096 |
No | 4096 |
標記 | Azure 磁碟標籤 | 標籤格式:key1=val1,key2=val2 |
No | "" |
diskEncryptionSetID | 用來啟用待用加密的磁碟加密集 ResourceId | 格式:/subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} |
No | "" |
diskEncryptionType | 磁碟加密集的加密類型。 | EncryptionAtRestWithCustomerKey (預設)、EncryptionAtRestWithPlatformAndCustomerKeys |
No | "" |
writeAcceleratorEnabled | Azure 磁碟上的寫入加速器 | true , false |
No | "" |
networkAccessPolicy | NetworkAccessPolicy 屬性可防止任何人產生磁碟或快照集的 SAS URI | AllowAll 、 、 DenyAll AllowPrivate |
No | AllowAll |
diskAccessID | 可在磁碟上使用私人端點的 DiskAccess 資源 Azure 資源識別碼 | No | `` | |
enableBursting | 啟用隨需高載超越已佈建的磁碟效能目標。 隨需高載應只能套用至進階磁碟且磁碟大小大於 512 GB 時。 不支援 Ultra 和共用磁碟。 磁碟高載預設為停用。 | true , false |
No | false |
userAgent | 用於客戶使用狀況屬性的使用者代理程式 | No | 產生的使用者代理程式格式為 driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID | 指定於其中建立 Azure 磁碟的 Azure 訂用帳戶識別碼。 | Azure 訂用帳戶識別碼 | No | 若非空白,必須提供 resourceGroup 。 |
--- | 下列參數僅適用於 v2 | --- | --- | --- |
maxShares | 磁碟允許的共用磁碟掛接總數。 將值設定為 2 或更多可啟用附加複本。 | 支援的值取決於磁碟大小。 如需支援的值,請參閱共用 Azure 受控磁碟。 | No | 1 |
maxMountReplicaCount | 要維護的複本附加數目。 | 這個值必須介於[0..(maxShares - 1)] 的範圍內 |
No | 如果accessMode 為ReadWriteMany ,則預設為0 。 否則預設為 maxShares - 1 |
內建儲存類別
儲存類別定義如何搭配永續性磁碟區動態建立儲存體單位。 如需 Kubernetes 儲存類別的詳細資訊,請參閱 Kubernetes 儲存類別。
每個 AKS 叢集都包含四個預先建立的儲存類別,而且其中兩個類別設定為可搭配 Azure 磁碟使用:
- default 儲存類別會佈建標準 SSD Azure 磁碟。
- 標準 SSD 由標準儲存體支援,並提供符合成本效益的儲存體,同時仍提供可靠效能。
- managed-csi-premium 儲存體類別會佈建進階 Azure 磁碟。
- 以 SSD 為基礎的高效能、低延遲磁碟的進階磁碟。 執行生產工作負載的 VM 的理想選擇。 當您在 AKS 上使用 Azure 磁碟 CSI 驅動程式時,也可以使用由標準 SSD 本地備援儲存體 (LRS) 支援的
managed-csi
儲存類別。
- 以 SSD 為基礎的高效能、低延遲磁碟的進階磁碟。 執行生產工作負載的 VM 的理想選擇。 當您在 AKS 上使用 Azure 磁碟 CSI 驅動程式時,也可以使用由標準 SSD 本地備援儲存體 (LRS) 支援的
- 自 Kubernetes 1.29 版開始,在跨多個可用性區域部署 Azure Kubernetes Service (AKS) 叢集時,AKS 現在會利用區域備援儲存體 (ZRS) 在內建儲存類別中建立受控磁碟。
- ZRS 可確保在所選區域中,跨 Azure 可用性區域同步複寫 Azure 受控磁碟。 此備援策略可強化應用程式的復原能力,並保護您的資料不受資料中心故障影響。
- 不過,請務必注意,相較於本地備援儲存體 (LRS),區域備援儲存體 (ZRS) 的成本較高。 如果成本優化是優先順序,您可以使用 LRS SKU 名稱參數建立新的記憶體類別,並在永續性磁碟區宣告中使用。
由於數據遺失的風險,因此不支援降低PVC的大小。 您可以使用 kubectl edit sc
命令來編輯現有的儲存類別,也可以建立自己的自定義儲存類別。 舉例來說,如果您想要使用大小為 4 TiB 的磁碟,必須建立定義 cachingmode: None
的儲存類別,因為 4 TiB 和更大磁碟不支援磁碟快取。 如需儲存類別和建立專屬儲存類別的詳細資訊,請參閱 AKS 中應用程式的儲存體選項 (機器翻譯)。
您可以使用 kubectl get sc
命令來查看預先建立的儲存體類別。 以下範例顯示 AKS 叢集中可用的預先建立儲存體類別:
kubectl get sc
此命令的輸出與下列範例類似:
NAME PROVISIONER AGE
default (default) disk.csi.azure.com 1h
managed-csi disk.csi.azure.com 1h
注意
GiB 中會指定持續性磁碟區宣告,但 SKU 會針對特定的大小向 Azure 受控磁碟收費。 這些 SKU 範圍從 S4 或 P4 磁碟的 32 GiB 到 S80 或 P80 磁碟的 32 TiB (預覽)。 進階受控磁碟的輸送量和 IOPS 效能,取決於 SKU 和 AKS 叢集中節點的執行個體大小。 如需詳細資訊,請參閱受控磁碟的定價和效能。
建立永續性磁碟區宣告
永續性磁碟區宣告會根據記憶體類別自動布建記憶體。 在此情況下,PVC 可以使用其中一個預先建立的儲存體類別,來建立標準或進階 Azure 受控磁碟。
建立名為
azure-pvc.yaml
的檔案,然後將下列資訊清單複製進來。 宣告要求名為azure-managed-disk
的磁碟,其大小為 5 GB 且具備 ReadWriteOnce 存取權。 系統會將儲存體類別指定為 managed-csi 儲存體類別。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk spec: accessModes: - ReadWriteOnce storageClassName: managed-csi resources: requests: storage: 5Gi
提示
若要建立使用進階儲存體的磁碟,請使用 storageClassName: managed-csi-premium
而非 managed-csi。
使用
kubectl apply
命令來建立永續性磁碟區宣告,並指定您的 azure-premium.yaml 檔案。kubectl apply -f azure-pvc.yaml
此命令的輸出與下列範例類似:
persistentvolumeclaim/azure-managed-disk created
使用永續性磁碟區
建立永續性磁碟區宣告之後,您必須確認它的狀態為 Pending
。 狀態 Pending
表示已準備好供 Pod 使用。
使用
kubectl describe pvc
命令確認 PVC 的狀態。kubectl describe pvc azure-managed-disk
此命令的輸出與下列縮寫範例類似:
Name: azure-managed-disk Namespace: default StorageClass: managed-csi Status: Pending [...]
建立名為
azure-pvc-disk.yaml
的檔案,然後將下列資訊清單複製進來。 此資訊清單所建立的基本 NGINX Pod,會使用名為 azure-managed-disk 的永續性磁碟區宣告,在/mnt/azure
路徑上掛接 Azure 資料箱磁碟。 對於 Windows Server 容器,請採用 Windows 路徑慣例來指定 mountPath,例如 'D:'。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: azure-managed-disk
使用
kubectl apply
命令建立 Pod。kubectl apply -f azure-pvc-disk.yaml
此命令的輸出與下列範例類似:
pod/mypod created
您現在已有一個 Azure 磁碟掛接在
/mnt/azure
目錄中的執行中 Pod。 使用kubectl describe
命令檢查 Pod 設定。kubectl describe pod mypod
此命令的輸出與下列範例類似:
[...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: azure-managed-disk ReadOnly: false default-token-smm2n: Type: Secret (a volume populated by a Secret) SecretName: default-token-smm2n Optional: false [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m default-scheduler Successfully assigned mypod to aks-nodepool1-79590246-0 Normal SuccessfulMountVolume 2m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "default-token-smm2n" Normal SuccessfulMountVolume 1m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242" [...]
使用 Azure Ultra 磁碟
若要使用 Azure Ultra 磁碟,請參閱在 Azure Kubernetes Service (AKS) 上使用 Ultra 磁碟。
使用 Azure 標籤
如需使用 Azure 標籤的詳細資訊,請參閱在 Azure Kubernetes Service (AKS) 中使用 Azure 標籤。
靜態佈建磁碟區
本節可為想要建立一或多個永續性磁碟區的叢集系統管理員提供指導,這些磁碟區中包含 Azure 資料箱磁碟上工作負載使用的詳細資料。
永續性磁碟區的靜態佈建參數
下表包含您可以用來定義永續性磁碟區的參數。
名稱 | 意義 | 可用的值 | 必要 | 預設值 |
---|---|---|---|---|
volumeHandle | Azure 磁碟 URI | /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} |
Yes | N/A |
volumeAttributes.fsType | 檔案系統類型 | Linux 為 ext4 、ext3 、ext2 、xfs 、btrfs ,Windows 為 ntfs |
No | Linux 為 ext4 ,Windows 為 ntfs |
volumeAttributes.partition | 現有磁碟的分割區編號 (僅 Linux 上支援) | 1 、 、 2 3 |
No | 空白 (無分割區) - 請確定分割區格式類似 -part1 |
volumeAttributes.cachingMode | 磁碟主機快取設定 | None 、 、 ReadOnly ReadWrite |
No | ReadOnly |
建立 Azure 磁碟
當您建立與 AKS 搭配使用的 Azure 磁碟時,您可以在節點資源群組中建立磁碟資源。 此方法可讓 AKS 叢集存取和管理磁碟資源。 如果您在個別的資源群組中建立磁碟,則必須將磁碟資源群組的 Contributor
角色授與叢集的 Azure Kubernetes Service (AKS) 受控識別。
使用
az aks show
命令來識別資源群組名稱,並新增--query nodeResourceGroup
參數。az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
此命令的輸出與下列範例類似:
MC_myResourceGroup_myAKSCluster_eastus
使用
az disk create
命令建立磁碟。 指定節點資源群組名稱,然後指定磁碟資源的名稱,例如 myAKSDisk。 下列範例會建立 20GiB 的磁碟,並在建好後輸出磁碟識別碼。 如果您需要建立磁碟以搭配 Windows 伺服器容器使用,請新增--os-type windows
參數以正確格式化磁碟。az disk create \ --resource-group MC_myResourceGroup_myAKSCluster_eastus \ --name myAKSDisk \ --size-gb 20 \ --query id --output tsv
注意
Azure 資料箱磁碟是按 SKU 的特定大小計費。 這些 SKU 範圍從 S4 或 P4 磁碟的 32 GiB 到 S80 或 P80 磁碟的 32 TiB (預覽)。 進階受控磁碟的輸送量和 IOPS 效能,取決於 SKU 和 AKS 叢集中節點的執行個體大小。 請參閱受控磁碟的定價和效能。
當命令成功完成之後,磁碟資源識別碼就會隨即顯示,如下列輸出範例所示。 在下一個區段中,使用磁碟識別碼來掛接磁碟。
/subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
將磁碟掛接為磁碟區
建立具有 PersistentVolume 的 pv-azuredisk.yaml 檔案。 使用上一個步驟的磁碟資源識別碼更新
volumeHandle
。 針對 Windows Server 容器,為 fsType 參數指定 ntfs。apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: disk.csi.azure.com name: pv-azuredisk spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: managed-csi csi: driver: disk.csi.azure.com volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk volumeAttributes: fsType: ext4
建立 pvc-azuredisk.yaml 檔案,其具有使用 PersistentVolume 的 PersistentVolumeClaim。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-azuredisk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi volumeName: pv-azuredisk storageClassName: managed-csi
使用
kubectl apply
命令並參考已建立的兩個 YAML 檔案來建立PersistentVolume 和 PersistentVolumeClaim。kubectl apply -f pv-azuredisk.yaml kubectl apply -f pvc-azuredisk.yaml
使用
kubectl get pvc
命令,驗證 PersistentVolumeClaim 已建立完成並繫結至 PersistentVolume。kubectl get pvc pvc-azuredisk
此命令的輸出與下列範例類似:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5s
建立 azure-disk-pod.yaml 檔案,以參考您的 PersistentVolumeClaim。 對於 Windows Server 容器,請採用 Windows 路徑慣例來指定 mountPath,例如 '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 volumes: - name: azure persistentVolumeClaim: claimName: pvc-azuredisk
使用
kubectl apply
命令套用設定並掛接磁碟區。kubectl apply -f azure-disk-pod.yaml
清除資源
當您完成本文中建立的資源時,您可以使用 kubectl delete
命令將其移除。
# Remove the pod
kubectl delete -f azure-pvc-disk.yaml
# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml
下一步
- 若要了解如何針對 Azure 資料箱磁碟儲存體使用 CSI 驅動程式,請參閱使用 Azure 資料箱磁碟儲存體搭配 CSI 驅動程式。
- 如需相關的最佳做法,請參閱 AKS 中的儲存和備份最佳做法。