共用方式為


Kubernetes 叢集的記憶體選項

本文比較 Amazon Elastic Kubernetes Service (Amazon EKS) 和 Azure Kubernetes Service (AKS) 的記憶體功能,並說明在 AKS 上儲存工作負載數據的選項。

注意

本文是一系列文章的一部分,可協助熟悉 Amazon EKS 的專業人員瞭解 Azure Kubernetes Service (AKS)。

Amazon EKS 記憶體選項

在 Amazon EKS 中,Kubernetes 1.11 版之後,叢集具有預設的 StorageClass,其呼叫gp2永續性磁碟區宣告。 系統管理員可以新增驅動程式來定義更多記憶體類別,例如:

  • Amazon EBS CSI 驅動程式作為 Amazon EKS 附加元件
  • Amazon EBS CSI 自我管理附加元件
  • Amazon EFS CSI 驅動程式
  • Amazon FSx for Lustre CSI 驅動程式
  • 適用於 NetApp ONTAP CSI 驅動程式的 Amazon FSx

藉由新增驅動程式和記憶體類別,您可以使用記憶體服務,例如:

  • Amazon Elastic Block Store (Amazon EBS),這是與 Amazon Elastic Compute Cloud (EC2) 實例搭配使用的區塊層級記憶體解決方案,用來儲存永續性數據。 此服務類似於 Azure 磁碟記憶體,其具有數個 SKU,例如標準 SSD、進階 SSD 或 Ultra 磁碟記憶體,視所需的效能而定。

  • Amazon Elastic File System (Amazon EFS),提供網路文件系統存取可跨實例共用的外部文件系統。 對等的 Azure 解決方案 Azure 檔案儲存體 和 Azure 檔案儲存體 Premium,同時具有伺服器消息塊 (SMB) 3.0 和 NFS 存取。

  • Lustre 是一種開放原始碼文件系統,通常用於高效能運算(HPC)。 在 Azure 中,您可以將 Ultra 磁碟記憶體或 Azure HPC Cache 用於速度很重要的工作負載,例如機器學習和 HPC。

  • NetApp ONTAP,Amazon Web Services (AWS) 中完全受控的 ONTAP 共用記憶體。 Azure NetApp Files 是 Azure 中以 NetApp 技術為基礎的類似檔案記憶體服務。

AKS 記憶體選項

根據預設,每個 AKS 叢集都包含下列 預先建立的 記憶體類別:

  • 預設記憶體類別 managed-csi會使用磁碟記憶體標準 SSD。 標準 SSD 是一種符合成本效益的記憶體選項,針對需要每秒較低輸入輸出作業 (IOPS) 的一致效能的工作負載優化。
  • 類別 managed-csi-premium 使用磁碟記憶體進階 SSD 受控磁碟。
  • 類別azurefile-csi會使用 Azure 檔案儲存體,使用SMB或NFS,為相同的記憶體磁碟區提供並行共用存取權。
  • 類別azurefile-csi-premium會針對具有 IOPS 密集工作負載的檔案共用使用 Azure 檔案儲存體 Premium。 Azure 檔案儲存體 Premium 提供 SSD 記憶體支援的低延遲和高輸送量。

您可以新增其他記憶體類別,並與其他可用的記憶體解決方案整合,例如:

  • Ultra 磁碟儲存體
  • Azure NetApp Files
  • HPC Cache
  • NFS 伺服器
  • 第三方記憶體解決方案

Azure 磁碟儲存體

根據預設,AKS 叢集隨附使用磁碟記憶體的預先建立managed-csimanaged-csi-premium記憶體類別。 與 Amazon EBS 類似,這些類別會建立受控磁碟或封鎖連結至節點以進行 Pod 存取的裝置。

Disk 類別同時允許 靜態動態 磁碟區布建。 回收原則可確保使用永續性磁碟區刪除磁碟。 您可以編輯永續性磁碟區宣告來展開磁碟。

這些記憶體類別會使用 Azure 受控磁碟搭配 本地備援記憶體 (LRS) 。 LRS 表示數據在 Azure 主要區域中的單一實體位置內有三個同步複本。 LRS 是成本最低的複寫選項,但無法針對數據中心失敗提供保護。 若要降低此風險,請使用可使用內建快照技術的 Velero 或 Azure 備份解決方案,定期備份或磁碟記憶體數據的快照集。

這兩個記憶體類別都受到受控磁碟的支援,而且都使用固態硬碟 (SSD) 磁碟驅動器。 請務必瞭解標準與進階磁碟之間的差異:

  • 標準磁碟會根據大小和記憶體交易來定價。
  • 進階磁碟只會依大小收費,這可讓需要大量交易的工作負載更便宜。
  • 進階 SSD 提供較高的最大輸送量和 IOPS,如 此比較所示。
  • 建議針對大部分的生產與開發工作負載使用進階記憶體。

如果您使用 Azure 受控磁碟作為主要記憶體類別,請考慮您為 Kubernetes 叢集選擇的虛擬機 (VM) SKU。 Azure VM 會限制您可以連結的磁碟數目,而限制會隨著 VM 大小而有所不同。 此外,由於 Azure 磁碟會掛接為 ReadWriteOnce,因此只能用於單一 Pod。

Azure 進階 SSD v2 磁碟

Azure 進階 SSD v2 磁碟提供 IO 密集的企業工作負載、一致的子磁碟延遲,以及高 IOPS 和輸送量。 進階 SSD v2 磁碟的效能 (容量、輸送量和 IOPS) 可隨時單獨設定,因此在更多情況下都能更輕易地符合成本效益,同時達到效能需求。 如需如何設定新的或現有的 AKS 叢集以使用 Azure 進階 SSD v2 磁碟的詳細資訊,請參閱 在 Azure Kubernetes Service 上使用 Azure 進階 SSD v2 磁碟。

Ultra 磁碟儲存體

Ultra 磁碟記憶體是一種 Azure 受控磁碟層,可提供 Azure VM 的高輸送量、高 IOPS 和一致的低延遲磁碟記憶體。 Ultra 磁碟記憶體適用於數據和交易繁重的工作負載。 與其他磁碟記憶體 SKU 和 Amazon EBS 一樣,Ultra 磁碟記憶體會一次掛接一個 Pod,而且不提供並行存取。

使用旗標 --enable-ultra-ssdAKS 叢集上啟用 Ultra 磁碟記憶體。

如果您選擇 Ultra 磁碟記憶體,請注意其 限制,並確定選取相容的 VM 大小。 Ultra 磁碟記憶體可與本地備援記憶體 (LRS) 複寫搭配使用。

攜帶您自己的金鑰 (BYOK)

Azure 會靜態加密受控磁碟中的所有資料。 根據預設,資料是以使用 Microsoft 管理的金鑰加密。 若要進一步控制加密金鑰,您可以提供客戶自控金鑰,以用於 AKS 叢集中 OS 和資料磁碟的待用加密。 如需詳細資訊,請參閱在 Azure Kubernetes Service (AKS) 中使用 Azure 受控磁碟攜帶您自己的密鑰 (BYOK)。

Azure 檔案

磁碟記憶體無法提供磁碟區的並行存取權,但您可以使用 Azure 檔案儲存體 透過SMB通訊協定進行連線,然後掛接 Azure 儲存體支援的共用磁碟區。 此程式提供類似於 Amazon EFS 的網路連接記憶體。 如同磁碟記憶體,有兩個選項:

  • Azure 檔案儲存體 標準記憶體由一般硬碟 (HDD) 支援。
  • Azure 檔案儲存體 進階記憶體會以高效能 SSD 磁碟驅動器支援檔案共用。 Premium 的檔案共用大小下限為 100 GB。

Azure 檔案儲存體 具有下列記憶體帳戶複寫選項,以在發生失敗時保護您的數據:

若要將 Azure 檔案儲存體 的成本優化,請購買 Azure 檔案儲存體 容量保留

Azure 容器儲存體

Azure 容器儲存體是雲端式磁碟區管理、部署和協調流程服務,專為容器原生建置。 它與 Kubernetes 整合,可讓您動態且自動佈建永續性磁碟區,以儲存 Kubernetes 叢集上執行之具狀態應用程式的資料。

Azure 容器儲存體會針對實際資料記憶體利用現有的 Azure 記憶體供應專案,並提供專為容器所建置的磁碟區協調流程和管理解決方案。 支援的備份記憶體選項包括:

  • Azure 磁碟:細微控制記憶體 SKU 和設定。 它們適用於第1層和一般用途資料庫。
  • 暫時磁碟:利用 AKS 節點上的本機記憶體資源(NVMe 或暫存 SSD)。 最適合不需要數據持久性或內建數據復寫支援的應用程式。 AKS 會探索 AKS 節點上可用的暫時性記憶體,並取得它們以進行磁碟區部署。
  • Azure Elastic SAN:布建隨選、完全受控的資源。 適用於一般用途資料庫、串流和傳訊服務、CD/CI 環境及其他第 1 層 2 層工作負載。 多個叢集可以同時存取單一 SAN,不過永續性磁碟區一次只能由一個取用者連結。

到目前為止,為使用個別容器記憶體介面 (CSI) 驅動程式所需的容器提供雲端記憶體,以使用適用於基礎結構即服務 (IaaS) 工作負載的記憶體服務,並讓它們適用於容器。 這會建立作業額外負荷,並增加應用程式可用性、延展性、效能、可用性和成本的問題風險。

Azure 容器儲存體衍生自 OpenEBS,這是提供 Kube 容器記憶體功能的開放原始碼解決方案。 透過 Kube 環境中的微服務型記憶體控制器提供受控磁碟區協調流程解決方案,Azure 容器儲存體會啟用真正的容器原生記憶體。

Azure Container Storage 適用於下列案例:

  • 加速 VM 對容器計劃: Azure 容器儲存體會顯示先前僅適用於 VM 且可供容器使用的 Azure 區塊儲存體供應專案的完整範圍。 這包括暫時性磁碟,可為 Cassandra 等工作負載提供極低的延遲,以及提供原生 iSCSI 和共用佈建目標的 Azure 彈性 SAN。

  • 簡化 Kube 的磁碟區管理: 透過 Kube 控制平面提供磁碟區協調流程,Azure 容器儲存體可讓您輕鬆地在 Kube 內部署和管理磁碟區,而不需要在不同的控制平面之間來回移動。

  • 降低總擁有成本 (TCO): 藉由增加每個 Pod 或節點支援的永續性磁碟區規模來提升成本效益。 藉由動態共用儲存體資源來減少佈建所需的儲存體資源。 請注意,不支持儲存體集區本身的相應擴大支援。

Azure Container Storage 提供下列主要優點:

  • 快速擴增具狀態 Pod: Azure 容器儲存體會透過網路區塊儲存體通訊協定 (NVMe-oF 或 iSCSI) 裝載永續性磁碟區,提供持續性磁碟區的快速連結和中斷連結。 您可以視需要一點點開始部署資源,同時確定應用程式不會在初始化期間或實際執行環境中耗盡或中斷。 應用程式復原功能已透過 Pod 重新產生整個叢集來改善,需要快速移動永續性磁碟區。 使用遠端網路通訊協定,Azure 容器記憶體緊密結合 Pod 生命週期,以支援 AKS 上具有高度彈性、高規模的具狀態應用程式。

  • 改善具狀態工作負載的效能: Azure 容器儲存體可提升讀取效能,並使用 NVMe-oF over RDMA 提供近乎磁碟寫入效能。 這可讓客戶符合各種容器工作負載的效能需求,包括第 1 層 I/O 密集、一般用途、輸送量敏感性和開發/測試。 加速永續性磁碟區的連結/中斷連結時間,並將 Pod 容錯移轉時間降到最低。

  • Kube 原生磁碟區協調流程: 建立存放集區和永續性磁碟區、擷取快照集,以及使用 kubectl 命令來管理磁碟區的整個生命週期,而不需在不同控制平面作業的工具組之間切換。

Azure NetApp Files

如同 AWS NetApp ONTAP,Azure NetApp Files 是企業級、高效能的計量檔案記憶體服務。 Azure NetApp Files 在 Azure 中使用 NetApp 解決方案完全受控。 如同 Azure 檔案儲存體,Azure NetApp Files 可讓多個 Pod 掛接磁碟區。 您可以使用 適用於 Kubernetes 的開放原始碼動態記憶體協調器 Astra Trident,將 AKS 叢集設定為使用 Azure NetApp Files

請注意 Azure NetApp Files 的資源限制。 Azure NetApp Files 的容量集區大小下限為 4 TiB。 Azure NetApp Files 會依布建的大小而不是使用的容量收費。

Azure HPC Cache

Azure HPC Cache 會加快對 HPC 工作數據的存取速度,並具備雲端解決方案的所有延展性。 如果您選擇此記憶體解決方案,請務必將 AKS 叢集部署在 支援 Azure HPC 快取的區域。

NFS 伺服器

共用 NFS 存取的最佳選項是使用 Azure 檔案儲存體 或 Azure NetApp Files。 您也可以 在匯出磁碟區的 Azure VM 上建立 NFS 伺服器。

請注意,此選項僅支持靜態布建。 您必須在伺服器上手動布建 NFS 共用,且無法自動從 AKS 進行。

此解決方案是以基礎結構即服務(IaaS)為基礎,而不是平臺即服務(PaaS)。 您負責管理 NFS 伺服器,包括 OS 更新、高可用性、備份、災害復原和延展性。

暫時 OS 磁碟

根據預設,Azure 會自動將虛擬機器的 OS 磁碟複寫至 Azure 儲存體,以避免 VM 在遷往另一部主機時遺失資料。 不過,由於容器不是設計來保存本機狀態,因此,此行為提供的價值有限,同時還會有一些缺點。 這些缺點包括但不限於節點佈建較慢及更高的讀取/寫入延遲。

相較之下,暫時性 OS 磁碟只會儲存在主機電腦上,就像暫存磁碟一樣。 藉由此設定,您可以取得更低的讀取/寫入延遲,以及更快的節點縮放和叢集升級。

注意

當您未明確要求適用於 OS 的 Azure 受控磁碟 (部分機器翻譯) 時,如果指定的節點集區設定可能的話,AKS 就會預設為暫時性 OS。

如需詳細資訊,請參閱

協力廠商解決方案

如同 Amazon EKS,AKS 是 Kubernetes 實作,您可以整合第三方 Kubernetes 記憶體解決方案。 以下是 Kubernetes 的第三方記憶體解決方案範例:

  • Rook 會將分散式儲存系統自動化為自我管理記憶體服務,藉由自動化記憶體系統管理員工作。 Rook 會透過每個記憶體提供者的 Kubernetes 操作員來提供服務。
  • GlusterFS 是一種免費且開放原始碼的可擴充網路文件系統,其使用一般現成的硬體來建立大型分散式記憶體解決方案,以用於數據繁重且耗用頻寬的工作。
  • Ceph 提供可靠且可調整的統一記憶體服務,其中包含從商用硬體元件建置的單一叢集的物件、區塊和檔案介面。
  • MinIO 多重雲端物件記憶體可讓企業在任何雲端上建置 AWS S3 相容的數據基礎結構,為數據和應用程式提供一致的可攜式介面。
  • Portworx 是 Kubernetes 專案和容器型計劃端對端記憶體和數據管理解決方案。 Portworx 提供容器細微的記憶體、災害復原、數據安全性和多重雲端移轉。
  • Quobyte 提供高效能的檔案和物件記憶體,您可以在任何伺服器或雲端上部署,以調整效能、管理大量數據,以及簡化管理。
  • Ondat 可在任何平臺上提供一致的儲存層。 您可以在 Kubernetes 環境中執行資料庫或任何持續性工作負載,而不需要管理儲存層。

Kubernetes 記憶體考慮

當您選擇 Amazon EKS 或 AKS 的記憶體解決方案時,請考慮下列因素。

記憶體類別存取模式

在 Kubernetes 1.21 版和更新版本中,AKS 和 Amazon EKS 記憶體類別預設只會使用 容器記憶體介面 (CSI) 驅動程式

不同的服務支援具有不同存取模式的記憶體類別。

服務 ReadWriteOnce ReadOnlyMany ReadWriteMany
Azure 磁碟 X
Azure 檔案 X X X
Azure NetApp Files X X X
NFS 伺服器 X X X
Azure HPC Cache X X X

動態與靜態布建

動態布建磁碟區 ,以減少靜態建立永續性磁碟區的管理額外負荷。 設定正確的回收原則,以避免在刪除Pod時有未使用的磁碟。

Backup

選擇要備份永續性數據的工具。 此工具應符合您的記憶體類型,例如快照集、Azure 備份VeleroKasten

成本最佳化

若要將 Azure 儲存體 成本優化,請使用 Azure 保留。 請務必 檢查哪些服務支援 Azure 保留。 另請參閱 Kubernetes 叢集的成本管理。

參與者

本文由 Microsoft 維護。 原始投稿人如下。

主要作者:

其他投稿人:

若要查看非公開的 LinkedIn 設定檔,請登入 LinkedIn。

下一步