跳至主要内容

VMware vSphere 儲存

要為有狀態工作負載提供 VMware vSphere 儲存,我們建議建立一個 vSphereVolume StorageClass。此做法會在工作負載透過 PersistentVolumeClaim 請求卷時,動態佈建 vSphere 儲存。

為了在 vSphere 中動態佈建儲存,必須啟用 vSphere 提供者。請參閱以下頁面以了解更多資訊:Out-of-tree vSphere 和 in-tree vSphere。

前置條件​

為了在使用 Rancher Kubernetes Engine (RKE) 建立的叢集中佈建 vSphere 卷,必須在叢集選項中明確啟用 vSphere 雲端提供者。

建立 StorageClass​

提示

以下步驟也可以使用 kubectl 指令列工具執行。詳情請參閱 Kubernetes 關於持久卷的文件。

  1. 按一下 ☰ > Cluster Management。

  2. 選擇你要提供 vSphere 儲存的叢集,然後按一下 Explore。

  3. 在左側導覽列中,選擇 Storage > StorageClasses。

  4. 按一下 Create。

  5. 輸入 StorageClass 的名稱。

  6. 在 Provisioner 下,選擇 VMWare vSphere Volume。

  7. 選用:在 Parameters 下為此儲存類別指定其他屬性。詳情請參閱 vSphere 儲存文件。

  8. 按一下 Create。

使用 VMware vSphere 卷建立工作負載​

  1. 在左側導覽列中,按一下 Workload。
  2. 按一下 Create。
  3. 按一下 StatefulSet。
  4. 在 Volume Claim Templates 標籤中,按一下 Add Claim Template。
  5. 輸入持久卷名稱。
  6. 在 Storage Class 欄位中,選擇你建立的 vSphere StorageClass。
  7. 輸入卷所需的容量。然後按一下 Define。
  8. 在 Mount Point 欄位中指派路徑。這是卷將在容器檔案系統中掛載的完整路徑,例如 /persistent。
  9. 按一下 Create。

驗證卷的持久性​

  1. 在左側導覽列中,按一下 Workload > Pods。

  2. 前往你剛建立的工作負載,然後按一下 ⋮ > Execute Shell。

  3. 記下卷已掛載到的根目錄(在本例中為 /persistent)。

  4. 透過執行指令 touch /<volumeMountPoint>/data.txt 在卷中建立一個檔案。

  5. 關閉 Shell 視窗。

  6. 按一下工作負載的名稱以顯示詳細資訊。

  7. 按一下 ⋮ > Delete。

  8. 觀察 Pod 被刪除。然後會排程一個新的 Pod 來替換它,以便工作負載維持其已配置的單一有狀態 Pod 規模。

  9. 一旦替換的 Pod 執行後,按一下 Execute Shell。

  10. 透過輸入 ls -l /<volumeMountPoint> 檢查掛載卷的目錄內容。請注意,你之前建立的檔案仍然存在。

    workload-persistent-data

為何使用 StatefulSet 而非 Deployment​

你應該始終對使用 vSphere 儲存的工作負載使用 StatefulSet,因為此資源類型旨在解決 VMDK 區塊儲存的限制。

由於 vSphere 卷由 VMDK 區塊儲存支援,因此它們僅支援 ReadWriteOnce 的存取模式。此設定限制卷一次只能掛載到單一 Pod,除非使用該卷的所有 Pod 都位於同一節點上。此行為使得部署資源在使用 vSphere 卷時無法擴展到單一副本之外。

即使使用僅具有單一副本的部署資源,在更新部署時也可能導致死鎖情況。如果更新的 Pod 被排程到與現有 Pod 所在節點不同的節點,它將無法啟動,因為 VMDK 仍附加到另一個節點。

相關連結​