Azure Kubernetes Service (AKS) 的儲存體考量事項

若要執行特定的應用程式工作負載,您的組織或企業必須設計適當的 Azure Kubernetes Service (AKS) 平台層級功能。 這些工作負載可能有不同的記憶體需求。 為您的應用程式選擇正確的記憶體解決方案時,您有多個考慮,包括效能、可用性、復原能力、安全性和成本。 本文的目標是要引導您為工作負載選擇正確的選項或選項組合。

Kubernetes 可以同時執行無狀態和具狀態工作負載。 具狀態工作負載通常需要記憶體解決方案來儲存狀態。 AKS 支援適用於原生記憶體的多個整合式選項,包括受控資料庫、磁碟(或區塊),以及檔案和 Blob(或物件)記憶體。 這其中每一個選項都提供不同的 SKU、大小和效能特性。 選取正確的選項需要仔細考慮。

本文說明您在選取正確的記憶體服務和設計考慮需要考慮的因素和選項。 它會在設計建議中 提供特定建議

選取正確的儲存體服務

為您的初始部署選擇正確的 SKU 和大小需要一些評估,而且可能是概念證明或測試環境。 以下是協助您開始使用 AKS 記憶體的高階指導方針:

  • 結構化資料。 針對您的應用程式可以儲存在平臺上可用的受控資料庫中的結構化數據(例如 Azure SQL),我們建議使用受控資料庫。

  • 非結構化資料。 針對非結構化數據,例如相片、影片和文字檔,請使用 Blob 記憶體。 您的應用程式可以使用透過網路文件系統 (NFS) 掛接為檔案的 Blob,或使用 BlobFuse 以虛擬檔案系統的形式存取。 或者,您的應用程式可以直接讀取和寫入 Blob 記憶體。

  • 共用的應用程式數據。 針對需要高效能的共用應用程式數據,請使用 Azure NetApp FilesAzure 檔案儲存體進階層。 對於只需要有限效能的共享組態數據,請使用標準層 Azure 檔案儲存體。

  • 應用程式與記憶體要求的頻寬。 請確定您的節點有足夠的網路頻寬來處理應用程式要求和記憶體要求。 儲存體 流量會經過網路堆疊,傳輸的通訊協定是伺服器消息塊 (SMB) 或 NFS。

  • 低延遲、高 IOPS。 如果您的應用程式需要持續低延遲的磁碟來儲存應用程式,以及每秒的高 I/O 作業 (IOPS) 和高輸送量,以在 Kubernetes 上執行您自己的資料庫。 若要獲得最佳效能,請考慮使用 Azure 進階版 SSD、Azure 進階版 SSD v2 或 Azure Ultra 磁碟 儲存體

設計考量

下列考慮是設計 AKS 的記憶體。 請考慮 AKS 環境中所需的記憶體位置,並判斷每個需求的最佳解決方案。

作業系統 (OS) 磁碟

針對作業系統 (OS) 磁碟,請考慮下列因素:

  • OS 的暫時磁碟。 Azure 中的每個虛擬機(VM)都需要其 OS 的磁碟。 由於 Kubernetes 節點是暫時的,因此 AKS 預設會在支援的 VM 大小上使用暫時 OS 磁碟。 如需暫時 OS 磁碟的詳細資訊,請參閱 暫時 OS

  • 適用於OS的受控磁碟。 如果您的工作負載需要它們,您可以改為針對 AKS 叢集中的節點使用一般受控磁碟。 這樣做支援需要OS磁碟驅動器上永續性數據的工作負載。 如需永續性記憶體選項的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 中應用程式的 儲存體 選項。

  • 調整受控磁碟的大小。 如果您選取受控磁碟作為OS磁碟,請確定其大小適當,以支援OS、Kubernetes系統和工作負載的需求。 如需選項和差異的詳細資訊,請參閱 Azure 受控磁碟類型

應用程式資料

某些工作負載需要一致的數據存放區,才能儲存應用程式數據。 如果您的應用程式需要資料庫,請考慮在 Azure 中探索受控資料庫,其中包括下列選項:

AKS 中的 儲存體解決方案

如果受控資料庫不符合應用程式的需求,請考慮使用另一個可供AKS使用的記憶體選項來儲存一致的數據。 選項包括磁碟型解決方案、暫時磁碟、檔案型解決方案、Blob 記憶體,以及本文未涵蓋的其他選項。

以磁碟為基礎的解決方案

磁碟或區塊記憶體很適合直接將數據儲存在原始區塊型裝置上。 磁碟型記憶體很適合用來儲存 Kubernetes 叢集所裝載之資料庫的數據。 在 Azure 中,受控磁碟是取得區塊式記憶體的解決方案。

  • 靜態或動態建立的磁碟記憶體。 請考慮您是否要使用在 AKS 外部建立的靜態磁碟,或您想要 AKS 動態建立磁碟記憶體作為 Pod 或 Pod 需要它。 動態建立的 儲存體 也可以動態刪除。 如需詳細資訊,請參閱

  • 備援和效能。 請考慮工作負載所需的記憶體備援和效能。 如需詳細資訊,請參閱

  • 共用磁碟。 請考慮您是否需要共用磁碟。 如需選項的詳細資訊,請參閱 共用 Azure 受控磁碟

  • 磁碟和輸送量的節點大小。 請考慮 Kubernetes 節點的大小。 它必須夠大,才能同時支援磁碟數目和匯總輸送量需求。 如需大小和特性的相關信息,請參閱 Azure 中虛擬機的大小。

  • 磁碟大小和必要效能。 請考慮您的受控磁碟大小是否適合工作負載的效能需求。 效能隨著標準 HDD、標準 SSD 和 進階版 SSD v1 的磁碟大小增加而增加。 如需受控磁碟的詳細資訊,請參閱 Azure 受控磁碟類型

暫時磁碟解決方案

請考慮您的應用程式是否需要非持續性、暫存記憶體,或您想要在記憶體優化 VM 中使用高效能磁碟驅動器的位置。 若要連線到暫時磁碟區,您可以使用 Kubernetes 中的 emptyDir 選項或 CSI 暫時本機磁碟區的驅動程式。 我們建議 針對暫時數據使用 emptyDir ,例如臨時空間。 針對記憶體優化 VM 系列上的記憶體,建議您搭配暫時的本機磁碟區使用 CSI。 如需 CSI 驅動程式的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 上的容器 儲存體 介面 (CSI) 驅動程式。

檔案型解決方案

請考慮您的 Pod 是否需要共用檔案系統。 共用檔案系統適用於 Kubernetes 叢集中多個 Pod 讀取和共用的應用程式和組態數據。 檔案記憶體會透過 NFS 或 SMB/通用因特網檔案系統 (CIFS) 公開共用檔案系統。 Azure 有兩個檔案型記憶體解決方案:Azure 檔案儲存體 和 Azure NetApp Files。

Azure 檔案

針對 Azure 檔案儲存體,請考慮下列選項:

  • 靜態或動態建立的檔案共用。 請考慮是否要使用在 AKS 外部建立的靜態檔案共用,或是否要讓 AKS 代表您動態建立檔案共用。 如需詳細資訊,請參閱

  • 標準或進階效能。 評估標準效能是否足夠,或您是否需要來自 Azure 檔案儲存體的進階效能。

  • SMB/CIFS 或 NFS。 若要存取 Azure 檔案儲存體,請評估您的工作負載是否應該使用 API 做為預設通訊協定、SMB/CIFS,或工作負載是否需要 NFS 支援。

  • 用於存取的網路模型。 請考慮您想要用來存取 Azure 檔案儲存體 的網路模型:透過直接公用IP位址、服務端點或私人鏈接進行存取。

Azure NetApp Files

針對 Azure NetApp Files,請考慮下列選項:

Blob 儲存體

請考慮應用程式需要儲存的非結構化數據量。 Azure Blob 記憶體可透過 HTTP API 或 SDK 來存取。 將 Blob 記憶體掛接為檔案系統到容器或 Pod 非常適合具有大量非結構化數據的應用程式工作負載,例如記錄檔、影像、檔、串流媒體和災害復原數據。

  • 數據備援。 請考慮哪些資料備援適合您的應用程式。 如需詳細資訊,請參閱 Azure 儲存體備援 \(部分機器翻譯\)。 數據備援是在記憶體帳戶的層級選取。

  • 效能層級。 請考慮應用程式所需的 Blob 記憶體效能層級。 如需詳細資訊,請參閱 Blob 數據的經常性存取層、非經常性存取層和封存存取層。

  • 存取的驗證方法。 請考慮您的應用程式應該用來存取 Blob 記憶體的驗證方法:記憶體密鑰、SAS 或 Microsoft Entra ID。 如需詳細資訊,請參閱授權存取 Azure 儲存體中的資料

  • 用來抽象 Blob 記憶體的 API。 請考慮要使用的 API。 一般而言,存取 Blob 記憶體的應用程式會透過其中一個 SDK 在應用程式中使用 API,以從 Kubernetes 叢集擷取與 Blob 記憶體的互動。 如需各種程式設計語言連結庫的詳細資訊,請參閱 Azure Blob 記憶體簡介。

  • 靜態或動態建立的 Blob 記憶體。 請考慮您是否要使用在 AKS 外部建立的靜態 Blob 記憶體容器,或您想要 AKS 代表您動態建立 Blob 記憶體容器。 如需詳細資訊,請參閱

  • 用於存取記憶體的驅動程式。 請考慮您的應用程式應該如何存取 Blob 記憶體。 若要以文件系統的形式存取它,您可以在 Kubernetes 中使用 Blob CSI 驅動程式 。 此驅動程式允許透過 NFSv3 通訊協定透過 fuse 驅動程式存取 Blob 記憶體。

其他記憶體解決方案

如果您的應用程式需要本文未說明的內容,請考慮其他類型的記憶體。 Azure 中有多個特製化記憶體解決方案可以與 Kubernetes 整合。 本文未涵蓋這些解決方案,但下列清單會識別可能的解決方案:

  • Azure HPC 快取。 HPC Cache 可加速存取數據以進行高效能運算 (HPC) 工作。 藉由在 Azure 中快取檔案,Azure HPC Cache 會將雲端運算的延展性帶入您現有的工作流程。 如需詳細資訊,請參閱 整合 Azure HPC Cache 與 Azure Kubernetes Service

  • Azure Data Lake Storage Gen2。 Data Lake 儲存體 Gen2 是一種特殊類型的 Blob 記憶體,已針對 Hadoop 和 Spark 等巨量數據工作負載進行優化。 如需詳細資訊,請參閱 Azure Data Lake Storage Gen2 簡介 (機器翻譯)。

設計建議

本節提供根據已證明對 Azure 客戶有效之項目的建議。

  • 使用 Azure Private Link。 基於安全性,我們建議針對支援 Azure Private Link 的所有記憶體解決方案使用 Azure Private Link。 Azure Private Link 可讓您透過虛擬網路中的私人端點存取 Azure 服務,例如 Azure 儲存體 和 SQL 資料庫,以及 Azure 裝載的服務。 如需詳細資訊,請參閱何謂 Azure Private Link?

  • 針對OS使用暫時磁碟。 針對OS磁碟,我們建議使用暫時磁碟。 若要受益於這項功能,請選取具有適當大小暫存磁碟的 VM 大小。 如需詳細資訊,請參閱 Azure VM 的暫時性 OS 磁碟

  • 使用受控資料庫。 針對應用程式數據,我們建議使用受控資料庫。 如需資料庫選項的清單,請參閱 Azure 上的資料庫類型。

下列各節說明 Azure 磁碟、Azure 檔案儲存體 和 Blob 記憶體的更多建議。

Azure 磁碟

針對 Azure 磁碟,我們建議使用下列設計選項:

  • 使用 進階版 或 Ultra 磁碟。 在大部分情況下,我們建議 進階版 或 Ultra 磁碟,以確保適當的效能。 如需詳細資訊,請參閱 Azure 磁碟 儲存體

  • 調整磁碟和輸送量的節點大小。 建議您確保 Kubernetes 節點的大小足以支援磁碟數目和匯總輸送量。 如需大小和特性的相關信息,請參閱 Azure 中虛擬機的大小。

  • 建立永續性磁碟區的快照集。 建議您擷取永續性磁碟區的快照集,以布建預先填入快照集數據的新磁碟區,或使用 Azure 磁碟 CSI 驅動程式的快照集功能,將現有的磁碟區還原至先前的狀態。 如需詳細資訊,請參閱 磁碟區快照集。

  • 避免跨磁碟進行磁碟等量分割。 建議您避免在 Kubernetes 中跨多個磁碟進行等量分割。

  • 使用 PV/PV。 建議您在 Kubernetes 中使用 PV 和 PV,以視需要動態建立磁碟。 如需永續性記憶體的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 中應用程式的 儲存體 選項。

Azure 檔案

針對 Azure 檔案儲存體,我們建議使用下列設計選項:

  • 選擇 [進階版]。 如果效能很重要,建議您使用 進階版 層。

  • 建立專用記憶體帳戶。 建議您為檔案共用提供專用的記憶體帳戶。

  • 選擇靜態或動態建立的檔案共用。 建議您仔細考慮您是否要 AKS 建立檔案共用,或想要以靜態方式在 Kubernetes 外部建立它們。 動態建立的 儲存體 也可以動態刪除。 如需讓 AKS 動態建立檔案共用的詳細資訊,請參閱動態建立和使用具有 Azure 檔案儲存體 的永續性磁碟區。

Azure NetApp Files

針對 Azure NetApp Files,我們建議使用下列設計選項:

  • 根據應用程式需求選擇效能層級。 Azure NetApp Files 提供 3 個效能層級,可提供不同類別的效能。 如需詳細資訊,請參閱 Azure NetApp Files 的效能考量

  • 在與 AKS 叢集相同的 Azure 區域中建立容量集區。 如需詳細資訊,請參閱 建立 Azure NetApp Files 的容量集區

  • 針對容量集區使用自動 QoS 類型。

  • 規劃您的網路。 網路設計有兩個選項:

    1. 如果您針對 AKS 和 Azure NetApp Files 使用相同的 VNet,請為 Azure NetApp Files 建立專用子網,並將 子網 委派給 Microsoft.NetApp/Volumes。
    2. 如果您使用不同的 VNet,請在它們之間建立 VNet 對等互連。

Blob 儲存體

針對 Blob 記憶體,我們建議使用下列設計選項:

  • 使用 SDK 與記憶體介面。 我們建議使用應用層級 SDK 來與 Blob 記憶體進行介面。

  • 使用 CSI 搭配 NFS 與記憶體進行介面。 如果您無法使用應用層級 SDK 來與 Blob 記憶體進行介面,建議您在 Blob CSI 驅動程式中使用 NFS v3 選項。 如需詳細資訊,請參閱使用 Azure Blob 記憶體容器 儲存體 介面 (CSI) 驅動程式

  • 使用 Microsoft Entra ID 進行存取。 我們建議使用 Microsoft Entra 識別符來授權 Blob 記憶體的存取權。 避免使用共用記憶體帳戶金鑰。 如需更多資訊,請參閱使用 Microsoft Entra ID 授與 Blob 的存取權

  • 調整階層層級。 我們建議使用生命週期管理原則,將不常存取的數據移至較冷的存取層。 如需詳細資訊,請參閱 Blob 數據的經常性存取層、非經常性存取層和封存存取層。

下一步

瞭解如何使用 Kubecost 將成本配置範圍設定為部署、服務、標籤、Pod 或 AKS 中的命名空間。