共用方式為


使用 Azure 容器儲存體預覽,搭配 Azure 受控磁碟

Azure 容器儲存體是雲端式磁碟區管理、部署和協調流程服務,專為容器原生建置。 本文說明如何將 Azure 容器記憶體設定為使用 Azure 受控磁碟作為 Kubernetes 工作負載的後端記憶體。 最後,您會有一個使用 Azure 受控磁碟作為其記憶體的 Pod。

必要條件

  • 如果您沒有 Azure 訂用帳戶,請在開始前建立免費帳戶

  • 本文需要最新版本 (2.35.0 或更新版本) 的 Azure CLI。 請參閱如何安裝 Azure CLI。 若您使用的是 Azure Cloud Shell 中的 Bash 環境,即已安裝最新版本。 如果您打算在本機執行命令,而不是在 Azure Cloud Shell 中執行命令,請務必使用系統管理權限來執行這些命令。 如需詳細資訊,請參閱開始使用 Azure Cloud Shell

  • 您將需要 Kubernetes 命令列用戶端,kubectl。 如果您使用 Azure Cloud Shell,則已安裝;您也可以執行 az aks install-cli 命令,在本機安裝。

  • 如果您尚未安裝 Azure 容器儲存體,請遵循將 Azure 容器儲存體與 Azure Kubernetes Service 一起使用中的指示。

  • 檢查您的目標區域是否受 Azure 容器儲存體區域支援。

注意

若要搭配 Azure 受控磁碟使用 Azure 容器儲存體,您的 AKS 叢集應該至少有三個一般用途 VM 的節點集區,例如叢集節點的 standard_d4s_v5,每個節點至少有四個虛擬 CPU (vCPU)。

建立及連結永續性磁碟區

請遵循下列步驟來建立及連結永續性磁碟區。

1.建立存放集區

首先,透過在 YAML 資訊清單檔中定義存放集區來建立存放集區,這是 Kubernetes 叢集的儲存體邏輯分組。

您有下列選項可建立存放集區:

如果您使用 az aks createaz aks update 命令來啟用 Azure 容器儲存體,您可能已有存放集區。 使用 kubectl get sp -n acstor 來取得存放集區的清單。 如果您已有要使用的存放集區,可以跳過本步驟,然後從顯示可用的儲存類別繼續。

建立動態存放集區

請遵循下列步驟來建立 Azure 磁碟的動態存放集區。

  1. 使用您慣用的文字編輯器來建立 YAML 資訊清單檔,例如 code acstor-storagepool.yaml

  2. 貼入下列程式碼。 存放集區 name 值可以是您想要的任何值。 針對 skuName,指定效能和備援層級。 可接受的值為 Premium_LRS、Standard_LRS、StandardSSD_LRS、UltraSSD_LRS、Premium_ZRS、PremiumV2_LRS 和 StandardSSD_ZRS。 針對 storage,請在 Gi 或 Ti 中指定集區的儲存體容量。 儲存檔案。

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
      resources:
        requests:
          storage: 1Ti
    
  3. 套用 YAML 資訊清單檔以建立存放集區。

    kubectl apply -f acstor-storagepool.yaml 
    

    當存放集區建立完成時,您會看到如下的訊息:

    storagepool.containerstorage.azure.com/azuredisk created
    

    您也可以執行此命令來檢查存放集區的狀態。 將 <storage-pool-name> 取代為您的存放集區 name 值。 在此範例中,值會是 azuredisk

    kubectl describe sp <storage-pool-name> -n acstor
    

建立存放集區時,Azure 容器儲存體會代表您建立儲存類別,並使用命名慣例 acstor-<storage-pool-name>。 現在您可以顯示可用的儲存體類別,並建立永續性磁碟區宣告

建立預先佈建的存放集區

如果您有已佈建的 Azure 受控磁碟,可以使用這些磁碟來建立預先佈建的存放集區。 由於磁碟已佈建,因此在建立存放集區時,您不必指定 skuName 或儲存體容量。

請遵循下列步驟,為 Azure 磁碟建立預先佈建的存放集區。

  1. 登入 Azure 入口網站。

  2. 針對您要使用的每個磁碟,瀏覽至 Azure 受控磁碟,然後選取 [設定] > [屬性]。 複製 [資源識別碼] 底下的整個字串,並將其放入文字檔中。

  3. 使用您慣用的文字編輯器來建立 YAML 資訊清單檔,例如 code acstor-storagepool.yaml

  4. 貼入下列程式碼。 存放集區 name 值可以是您想要的任何值。 將 <resource-id> 取代為每個受控磁碟的資源識別碼。 儲存檔案。

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: sp-preprovisioned
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          disks:
            - reference <resource-id1>
            - reference <resource-id2>
    
  5. 套用 YAML 資訊清單檔以建立存放集區。

    kubectl apply -f acstor-storagepool.yaml 
    

    當存放集區建立完成時,您會看到如下的訊息:

    storagepool.containerstorage.azure.com/sp-preprovisioned created
    

    您也可以執行此命令來檢查存放集區的狀態。 將 <storage-pool-name> 取代為您的存放集區 name 值。 在此範例中,值會是 sp-preprovisioned

    kubectl describe sp <storage-pool-name> -n acstor
    

建立存放集區時,Azure 容器儲存體會代表您建立儲存類別,並使用命名慣例 acstor-<storage-pool-name>。 現在您可以顯示可用的儲存體類別,並建立永續性磁碟區宣告

使用您自己的加密金鑰建立動態存放集區 (選擇性)

Azure 儲存體帳戶中的所有資料都會待用加密。 根據預設,資料是以使用 Microsoft 管理的金鑰加密。 若要進一步控制加密金鑰,您在建立存放集區時,可以提供客戶自控金鑰 (CMK) 來加密您將建立的永續性磁碟區。

若要使用您自己的金鑰進行伺服器端加密,您必須擁有具有金鑰的 Azure Key Vault。 Key Vault 應已啟用清除保護,而且必須使用 Azure RBAC 權限模型。 深入了解 Linux 上的客戶自控金鑰

建立存放集區時,您必須定義 CMK 參數。 必要的 CMK 加密參數如下:

  • keyVersion 指定要使用的金鑰版本
  • keyName 是您金鑰的名稱
  • keyVaultUri 是 Azure Key Vault 的統一資源識別碼,例如 https://user.vault.azure.net
  • Identity 指定具有保存庫存取權的受控識別,例如 /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/MC_user-acstor-westus2-rg_user-acstor-westus2_westus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/user-acstor-westus2-agentpool

請遵循下列步驟,使用您自己的加密金鑰來建立存放集區。 從這個存放集區建立的所有永續性磁碟區都會使用相同的金鑰來加密。

  1. 使用您慣用的文字編輯器來建立 YAML 資訊清單檔,例如 code acstor-storagepool-cmk.yaml

  2. 貼上下列程式碼、提供必要的參數,然後儲存檔案。 存放集區 name 值可以是您想要的任何值。 針對 skuName,指定效能和備援層級。 可接受的值為 Premium_LRS、Standard_LRS、StandardSSD_LRS、UltraSSD_LRS、Premium_ZRS、PremiumV2_LRS 和 StandardSSD_ZRS。 針對 storage,請在 Gi 或 Ti 中指定集區的儲存體容量。 請務必提供 CMK 加密參數。

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
          encryption: {
            keyVersion: "<key-version>",
            keyName: "<key-name>",
            keyVaultUri: "<key-vault-uri>",
            identity: "<identity>"
          }
      resources:
        requests:
          storage: 1Ti
    
  3. 套用 YAML 資訊清單檔以建立存放集區。

    kubectl apply -f acstor-storagepool-cmk.yaml 
    

    當存放集區建立完成時,您會看到如下的訊息:

    storagepool.containerstorage.azure.com/azuredisk created
    

    您也可以執行此命令來檢查存放集區的狀態。 將 <storage-pool-name> 取代為您的存放集區 name 值。 在此範例中,值會是 azuredisk

    kubectl describe sp <storage-pool-name> -n acstor
    

建立存放集區時,Azure 容器儲存體會代表您建立儲存類別,並使用命名慣例 acstor-<storage-pool-name>

2.顯示可用的儲存類別

當存放集區準備好使用時,您必須選取儲存類別,以定義在建立永續性磁碟區宣告和部署永續性磁碟區時,如何動態建立儲存體。

執行 kubectl get sc 以顯示可用的儲存類別。 您應看到名為 acstor-<storage-pool-name> 的儲存類別。

重要

請勿使用標示為 [內部] 的儲存類別。 這是 Azure 容器儲存體運作所需的內部儲存類別。

3.建立永續性磁碟區宣告

永續性磁碟區宣告 (PVC) 可用來根據儲存體類別,動態佈建儲存體。 請遵循下列步驟,使用新的儲存類別建立 PVC。

  1. 使用您慣用的文字編輯器來建立 YAML 資訊清單檔,例如 code acstor-pvc.yaml

  2. 貼上下列程式碼並儲存檔案。 PVC name 值可以是您想要的任何值。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurediskpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-azuredisk # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    
  3. 套用 YAML 資訊清單檔以建立 PVC。

    kubectl apply -f acstor-pvc.yaml
    

    您應該會看到如下所示的輸出:

    persistentvolumeclaim/azurediskpvc created
    

    您可以執行下列命令來驗證 PVC 狀態:

    kubectl describe pvc azurediskpvc
    

建立 PVC 後,就可以由 Pod 使用。

4.部署 Pod 並連結永續性磁碟區

使用 Fio (彈性 I/O 測試器) 建立 Pod,以進行基準測試和工作負載模擬,並指定永續性磁碟區的掛接路徑。 針對 claimName,請使用您在建立永續性磁碟區宣告時所使用的 name 值。

  1. 使用您慣用的文字編輯器來建立 YAML 資訊清單檔,例如 code acstor-pod.yaml

  2. 貼上下列程式碼並儲存檔案。

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: azurediskpv
          persistentVolumeClaim:
            claimName: azurediskpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: azurediskpv
    
  3. 套用 YAML 資訊清單檔以部署 Pod。

    kubectl apply -f acstor-pod.yaml
    

    您應該會看到如下輸出:

    pod/fiopod created
    
  4. 檢查 Pod 是否正在執行,且永續性磁碟區宣告已成功繫結至 Pod:

    kubectl describe pod fiopod
    kubectl describe pvc azurediskpvc
    
  5. 檢查 Fio 測試以查看其目前狀態:

    kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

您現在已部署使用 Azure 磁碟作為儲存體的 Pod,並可用於 Kubernetes 工作負載。

管理永續性磁碟區和存放集區

既然您已建立永續性磁碟區,可以視需要中斷連結並重新連結。 您也可以擴充或刪除存放集區。

中斷連結及重新連結永續性磁碟區

若要中斷連結永續性磁碟區,請刪除永續性磁碟區連結的 Pod。 將 <pod-name> 取代為 Pod 的名稱,例如 fiopod

kubectl delete pods <pod-name>

若要重新連結永續性磁碟區,只要參考 YAML 資訊清單檔中的永續性磁碟區宣告名稱,如部署 Pod 並連結永續性磁碟區中所述。

若要檢查永續性磁碟區宣告繫結至哪個永續性磁碟區,請執行 kubectl get pvc <persistent-volume-claim-name>

擴充存放集區

您可以擴充 Azure 資料箱磁碟支援的存放集區,以快速且不停機地相應增加。 目前不支援壓縮存放集區。

注意

擴充存放集區可能會增加 Azure 容器儲存體和 Azure 容器儲存體的成本。 請參閱Azure 容器儲存體定價頁面

請遵循這些指示來擴充 Azure 資料箱磁碟的現有存放集區。

  1. 使用文字編輯器,開啟您用來建立存放集區的 YAML 資訊清單檔,例如 code acstor-storagepool.yaml

  2. 將 YAML 資訊清單檔中的指定儲存體項目取代為所需的值。 此值必須大於存放集區的目前容量。 例如,如果規格設定為 storage: 1Ti,請將其變更為 storage: 2Ti。 如果您已建立預先佈建的存放集區,則不會有儲存體項目,因為存放集區繼承預先佈建 Azure 資料箱磁碟中的容量大小。 如果您在 YAML 中沒有看到儲存體項目,請新增下列程式碼來指定所需的儲存體容量,然後儲存資訊清單檔:

    spec:
      resources:
        requests:
          storage: 2Ti
    
  3. 套用 YAML 資訊清單檔以擴充存放集區。

    kubectl apply -f acstor-storagepool.yaml 
    
  4. 執行此命令來檢查存放集區的狀態。 將 <storage-pool-name> 取代為您的存放集區 name 值。

    kubectl describe sp <storage-pool-name> -n acstor
    

    您應該會看到類似「存放集區正在擴充」的訊息。幾分鐘後再執行命令,訊息應該就消失了。

  5. 執行 kubectl get sp -A,存放集區應該會反映新的大小。

刪除存放集區

若要刪除存放集區,請執行下列命令。 使用存放集區名稱取代 <storage-pool-name>

kubectl delete sp -n acstor <storage-pool-name>

另請參閱