具有 Azure Kubernetes Service 的 Windows 容器儲存體

已完成

在上一單元中,我們了解到 Kubernetes 如何管理和協調容器型應用程式及其相關的儲存體元件。 我們還了解到 Kubernetes 叢集結構,其由核心服務的控制平面和應用程式資源之節點組成。

Azure Kubernetes Service (AKS) 透過將作業負荷卸載至 Azure,簡化了託管 Kubernets 叢集在 Azure 中的部署。 由於託管的 Kubernetes 服務,Azure 會處理重要的工作,例如健康情況監控和維護。

建立 AKS 叢集時,會自動建立和設定控制平面。 此控制平面會免費以受控 Azure 資源的形式提供,使用者無需加以管理。 您只需支付和管理連結至 AKS 叢集的節點。

下圖顯示了 AKS 如何管理提供核心 Kubernetes 服務和應用程式工作負載協調流程的控制平面,同時管理包含應用程式工作負載的節點。

Diagram showing how the control plane that provides the core Kubernetes services and orchestration of application workloads is managed by AKS.

AKS cluster

當您部署 AKS 叢集時,您可以指定節點的數目和大小,而 AKS 會部署及設定 Kubernetes 控制平面和節點。

下圖顯示了 AKS 叢集的結構。

Diagram showing the architecture of an AKS cluster.

AKS 節點會在 Azure 虛擬機器 (VM) 上執行。 Azure 預設自動將 VM (虛擬機器) 的作業系統磁碟 (OS 磁碟) 複製至 Azure 儲存體中,以避免將 VM 重新定位至另一台主機時資料遺失。 然而,正如我們之前所了解到的,容器並不是為了永續化本機狀態而設計的。 因此,從行為提供了有限的價值,同時也帶來了諸如節點佈建較慢和較高讀取/寫入延遲等缺點。 

相比之下,AKS 使用的是暫時性 OS 磁碟。 這些磁碟僅儲存在主機上,就像暫存磁碟一樣。 藉由此設定,您可以取得更低的讀取/寫入延遲,以及更快的節點縮放和叢集升級。

AKS 中的磁碟區儲存體

在 AKS 中,傳統磁碟區被建立為 Azure 儲存體支援的 Kubernetes 資源。 您可以手動建立資料磁碟區以供直接指派給 Pod,也可以讓 Kubernetes 自動建立它們。 為了將這些磁碟區與 Azure 儲存體相關聯,AKS 使用 CSI (容器儲存體介面)

CSI 是在 Kubernetes 上向容器化工作負載公開任意區塊和檔案儲存體系統的標準。

透過採用和使用 CSI,Azure Kubernetes Service (AKS) 可以寫入、部署和逐一查看外掛程式,以在 Kubernetes 中公開新的或改進現有儲存體系統,而無需接觸核心 Kubernetes 程式碼並等待其發行週期。

AKS 上的 CSI 儲存體驅動程式支援允許您以原生方式使用:

  • Azure 資料箱磁碟可用來建立 Kubernetes DataDisk 資源。 磁碟可以使用由高效能 SSD 支援的 Azure 進階儲存體,也可以使用由一般 HDD (硬碟) 或標準 SSD 支援的 Azure 標準儲存體。 針對大多數的生產和開發工作負載,請使用進階儲存體。 Azure 磁碟裝載為 ReadWriteOnce,並且僅可用於 AKS 中的一個節點。 如需可同時由多個節點存取的儲存體磁碟區,請使用 Azure 檔案儲存體。
  • Azure 檔案儲存體可用於將由 Azure 儲存體帳戶支援的 SMB (伺服器訊息區) 3.0/3.1 共用裝載至 Pod。 藉由 Azure 檔案儲存體,您可以在多個節點和 Pod 之間共用資料。 Azure 檔案儲存體可以使用一般 HDD 支援的 Azure 標準儲存體,或是由高效能 SSD 支援的 Azure 進階儲存體。
  • Azure Blob 儲存體可用於將 Blob 儲存體 (或物件儲存體) 作為檔案系統裝載至容器或 Pod 中。 使用 Blob 儲存體使您的叢集能够支援使用大型非結構化資料集 (如記錄檔資料、映像或文件、HPC 等) 的應用程式。 此外,如果您將資料內嵌至 Azure Data Lake 儲存體中,您可以直接在 AKS 中裝載和使用它,而無需設定其他過渡檔案系統。

從 Kubernetes 版本 1.21 開始,AKS 預設只使用 CSI 驅動程式,並且啟用了 CSI 移轉。 雖然現有樹狀內永續性磁碟區從版本 1.26 開始繼續執行,但 AKS 將不再支援使用樹狀內驅動程式建立的磁碟區以及為檔案和磁碟佈建的儲存體。

永續性磁碟區

永續性磁碟區 (PV) 是由 Kubernetes API 建立和管理的儲存體資源,可在個別 Pod 的存留期外持續存在。 在 AKS 中,您可以使用 Azure 磁碟或 Azure 檔案儲存體以提供 PersistentVolume。 您對磁碟區的磁碟或檔案儲存體的選擇通常取決於對資料的同時存取需求或所需的效能層級。

叢集系統管理員可以靜態建立 PersistentVolume,也可以由 Kubernetes API 伺服器動態建立磁碟區。 如果已排程 Pod 並要求目前無法使用的儲存體,Kubernetes 可以建立基礎 Azure 磁碟或檔案儲存體,並將其連結至 Pod。 動態佈建會使用 StorageClass 來識別需要建立的 Azure 儲存體類型。

AKS 中的儲存類別

若要定義不同層級的儲存體 (例如進階和標準),您可以建立 StorageClass。 StorageClass 也會定義 reclaimPolicy。 當您刪除永續性磁碟區時,reclaimPolicy 會控制基礎 Azure 儲存體資源的行為。 可以删除基礎儲存體資源,也可以保留它以供將來的 Pod 使用。

對於使用 CSI 驅動程式的叢集,AKS 建立了以下額外 StorageClasses 功能:

權限 原因
managed-csi 使用 Azure StandardSSD 本地備援儲存體 (LRS) 建立受控磁碟。 回收原則確保在删除基礎 Azure 磁碟使用的永續性磁碟區時删除該磁碟。 儲存類別也會將永續性磁碟區設定為可擴充,您只需要編輯具有新大小的永續性磁碟區宣告。
managed-csi-premium 使用 Azure 進階本地備援儲存體 (LRS) 建立受控磁碟。 回收原則可確保在使用基礎 Azure 磁碟的永久性磁碟區遭到刪除時,會刪除該磁碟。 類似地,此儲存類別允許擴充永續性磁碟區。
azurefile-csi 使用 Azure 標準儲存體來建立 Azure 檔案共用。 回收原則可確保在使用基礎 Azure 檔案共用的永續性磁碟區遭到刪除時,會刪除該檔案共用。
azurefile-csi-premium 使用 Azure 進階儲存體來建立 Azure 檔案共用。 回收原則可確保在使用基礎 Azure 檔案共用的永續性磁碟區遭到刪除時,會刪除該檔案共用。
azureblob-nfs-premium 使用 Azure 進階儲存體建立 Azure Blob 儲存體容器,並使用 NFS (網路檔案系統) v3 通訊協定進行連線。 回收原則確保在删除使用基礎 Azure Blob 儲存體容器的永續性磁碟區時删除該容器。
azureblob-fuse-premium 使用 Azure 進階儲存體建立 Azure Blob 儲存體容器,並使用 BlobFuse 進行連線 回收原則確保在删除使用基礎 Azure Blob 儲存體容器的永續性磁碟區時删除該容器。

除非為永續性磁碟區指定 StorageClass,否則將使用預設 StorageClass。 在要求永續性磁碟區時,應確保磁碟區使用所需的適當儲存體。 預設類別將與 managed-csi 相同。

永續性磁碟區宣告

PersistentVolumeClaim 要求特定 StorageClass 的儲存體、存取模式和大小。 若沒有任何現有的資源可根據定義的 StorageClass 履行宣告,Kubernetes API 伺服器就能動態佈建基礎 Azure 儲存體資源。

在磁碟區連線至 Pod 後,Pod 定義即會包含磁碟區掛接。

下圖顯示了 PVC 如何在 AKS 叢集中運作:

Diagram showing how a PVC works within an AKS cluster.