本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
儲存
概觀
在某些情況下,您可能想要執行需要短期或長期保留資料的應用程式。對於此類使用案例, Pod 可以定義和掛載磁碟區,以便其容器可以利用不同的儲存機制。Kubernetes 支援不同類型的磁碟區
暫時性容積
暫時性磁碟區適用於需要暫時性本機磁碟區,但不需要在重新啟動後保留資料的應用程式。此範例包括暫存空間、快取和唯讀輸入資料的需求,例如組態資料和秘密。您可以在此處
使用 EBS 磁碟區
我們建議從 gp3
使用 Amazon EC2 執行個體存放區
Amazon EC2 執行個體存放區為您的 EC2 執行個體提供暫時區塊層級儲存。EC2 執行個體存放區提供的儲存體可透過實體連接至主機的磁碟存取。與 Amazon EBS 不同,您只能在執行個體啟動時連接執行個體存放區磁碟區,而且這些磁碟區只在執行個體的生命週期內存在。它們無法分離並重新連接到其他執行個體。您可以在這裡進一步了解 Amazon EC2 執行個體存放區。執行個體存放區磁碟區沒有相關的額外費用。這使得它們 (執行個體存放區磁碟區) 比具有大型 EBS 磁碟區的一般 EC2 執行個體更具成本效益。
若要在 Kubernetes 中使用本機儲存磁碟區,您應該使用 Amazon EC2 使用者資料分割、設定和格式化磁碟區,以便在 Pod 規格中將磁碟區掛載為 HostPath
請記住,使用 Amazon EC2 執行個體存放區磁碟區時,總 IOPS 限制會與主機共用,並將 Pod 繫結至特定主機。在採用 Amazon EC2 執行個體存放區磁碟區之前,您應該徹底檢閱工作負載需求。
持久性磁碟區
Kubernetes 通常與執行中無狀態應用程式相關聯。不過,在某些情況下,您可能想要執行微服務,而這些微服務需要保留從一個請求到下一個請求的持久性資料或資訊。資料庫是這類使用案例的常見範例。不過,Pod 和其中的容器或程序本質上是暫時性的。若要將資料保留超過 Pod 的生命週期,您可以使用 PVs 定義在獨立於 Pod 的特定位置對儲存體的存取。與 PVs 相關的成本高度取決於使用的儲存體類型,以及應用程式如何使用它。
這裡列出支援 Amazon EKS 上 Kubernetes PVs 的不同儲存選項類型。以下涵蓋的儲存選項包括 Amazon EBS、Amazon EFS、Amazon FSx for Lustre、Amazon FSx for NetApp ONTAP。
Amazon Elastic Block Store (EBS) 磁碟區
Amazon EBS 磁碟區可作為 Kubernetes PVs 使用,以提供區塊層級儲存磁碟區。這些非常適合依賴隨機讀取和寫入的資料庫,以及執行長時間連續讀取和寫入的輸送量密集型應用程式。Amazon Elastic Block Store Container Storage Interface (CSI) 驅動程式可讓 Amazon EKS 叢集管理持久性磁碟區的 Amazon EBS 磁碟區的生命週期。容器儲存界面可啟用並促進 Kubernetes 與儲存系統之間的互動。當 CSI 驅動程式部署到您的 EKS 叢集時,您可以透過原生 Kubernetes 儲存資源存取其功能,例如持久性磁碟區 (PVs)、持久性磁碟區宣告 (PVCs) 和儲存類別 SCs)。此連結
選擇正確的磁碟區
我們建議您使用最新一代的區塊儲存 (gp3),因為它可在價格和效能之間取得適當的平衡。它還可讓您獨立擴展磁碟區 IOPS 和輸送量,而不需要佈建額外的區塊儲存容量。如果您目前正在使用 gp2 磁碟區,強烈建議遷移至 gp3 磁碟區。部落格文章將 Amazon EKS 叢集從 gp2 遷移至 gp3 EBS 磁碟區
Amazon EBS 允許變更線上磁碟區大小、IOPS 和輸送量等磁碟區特性。利用此功能,即可使用此部落格
當您的應用程式需要更高的效能,且所需的磁碟區大於單一 gp3 磁碟區可支援的磁碟區
單一 gp3 磁碟區最多可支援 16,000 個最大 IOPS、1,000 MiB/s 最大輸送量、16TiB。最新一代的佈建 IOPS SSD 磁碟區,可提供高達 256,000 IOPS、4,000 MiB/s、輸送量和 64TiB。
在這些選項中,您應該根據應用程式的需求,量身打造最佳的儲存效能和成本。
隨著時間的推移進行監控和最佳化
請務必了解應用程式的基準效能,並針對選取的磁碟區進行監控,以檢查是否符合您的需求/期望,或是過度佈建 (例如,佈建 IOPS 未充分利用的情況)。
您可以在累積資料時逐漸增加磁碟區的大小,而不是從頭開始配置大型磁碟區。您可以使用 Amazon Elastic Block Store CSI 驅動程式 (aws-ebs-csi-driver) 中的磁碟區調整大小
若要識別和移除任何懸置的 EBS 磁碟區,您可以使用 AWS 信任顧問的成本最佳化類別。此功能可協助您識別一段時間內寫入活動極低的未連接磁碟區或磁碟區。有一個雲端原生的開放原始碼唯讀工具,稱為 Popeye
如需監控的詳細資訊,請參閱 EKS 成本最佳化可觀測性指南。
您可以考慮的另一個選項是 AWS Compute Optimizer Amazon EBS 磁碟區建議。此工具會自動識別最佳磁碟區組態,以及所需的正確效能等級。例如,它可以根據過去 14 天內的最大使用率,用於與佈建 IOPS、磁碟區大小和 EBS 磁碟區類型相關的最佳設定。它也會量化從其建議衍生的潛在每月成本節省。您可以檢閱此部落格
備份保留政策
您可以透過拍攝point-in-time快照來備份 Amazon EBS 磁碟區上的資料。Amazon EBS CSI 驅動程式支援磁碟區快照。您可以使用此處
後續快照是增量備份,這表示只會儲存最近快照之後在裝置上變更的區塊。如此無須複製所有資料,可大幅減少建立快照所需的時間,並節省儲存成本。不過,在沒有適當保留政策的情況下增加舊 EBS 快照的數量,可能會導致大規模操作時產生非預期的成本。如果您透過 AWS API 直接備份 Amazon EBS 磁碟區,則可以利用 Amazon Data Lifecycle Manager
注意
目前無法透過 Amazon EBS CSI 驅動程式使用 Amazon DLM。
在 Kubernetes 環境中,您可以利用名為 Velero
Amazon Elastic File System
Amazon Elastic File System (EFS)
Amazon EFS 的主要優點之一是,它可以由分散在多個節點和多個可用區域的多個容器掛載。另一個好處是您只需為所使用的儲存體付費。當您新增和移除不需要容量規劃的檔案時,EFS 檔案系統會自動成長和縮減。
若要在 Kubernetes 中使用 Amazon EFS,您需要使用 Amazon Elastic File System Container Storage Interface (CSI) Driver, aws-efs-csi-driver
選擇正確的 EFS 儲存類別
Amazon EFS 提供四個儲存類別。
兩個標準儲存類別:
-
Amazon EFS 標準
-
Amazon EFS Standard-Infrequent Access
(EFS Standard-IA)
兩個單區域儲存類別:
-
Amazon EFS One Zone-Infrequent Access (EFS One Zone-IA)
不常存取 (IA) 儲存類別針對未每天存取的檔案進行成本最佳化。透過 Amazon EFS 生命週期管理,您可以將生命週期政策期間 (7、14、30、60 或 90 天) 未存取的檔案移至 IA 儲存類別,相較於 EFS Standard 和 EFS One Zone 儲存類別,這些儲存類別分別可將儲存成本降低高達 92%。
透過 EFS Intelligent-Tiering,生命週期管理會監控檔案系統的存取模式,並自動將檔案移至最佳的儲存類別。
注意
aws-efs-csi-driver 目前無法控制變更儲存類別、生命週期管理或 Intelligent-Tiering。這些應該在 AWS 主控台或透過 EFS APIs 手動設定。
注意
aws-efs-csi-driver 與以視窗為基礎的容器映像不相容。
注意
Amazon FSx for Lustre
Lustre 是一種高效能平行檔案系統,通常用於需要高達數百 GB/秒輸送量和每次操作延遲低於毫秒的工作負載。它用於機器學習訓練、財務建模、HPC 和影片處理等案例。Amazon FSx for Lustre
您可以使用 FSx for Lustre 支援的 Kubernetes 持久性儲存磁碟區,使用 Amazon EKS 的 FSx for Lustre CSI 驅動程式
Amazon S3 的連結
建議將位於 Amazon S3 上的高耐用性長期資料儲存庫與您的 FSx for Lustre 檔案系統連結。一旦連結,大型資料集會視需要從 Amazon S3 延遲載入至 FSx for Lustre 檔案系統。您也可以執行分析並將結果傳回 S3,然後刪除 Lustre 檔案系統。
選擇正確的部署和儲存選項
FSx for Lustre 提供不同的部署選項。第一個選項稱為暫存,不會複寫資料,而第二個選項稱為持久性,顧名思義,會保留資料。
第一個選項 (速記) 可用來降低暫時性短期資料處理的成本。持久性部署選項是專為長期儲存而設計,可自動複寫 AWS 可用區域內的資料。它還支援 SSD 和 HDD 儲存。
您可以在 FSx 中的參數下,為 lustre 檔案系統的 Kubernetes StorageClass 設定所需的部署類型。以下是提供範例範本的連結
注意
對於對延遲敏感的工作負載或需要最高 IOPS/輸送量層級的工作負載,您應該選擇 SSD 儲存。對於不對延遲敏感的以輸送量為中心的工作負載,您應該選擇 HDD 儲存。
啟用資料壓縮
您也可以指定「LZ4」為資料壓縮類型,在檔案系統上啟用資料壓縮。啟用後,所有新寫入的檔案都會在 FSx for Lustre 上自動壓縮,再寫入磁碟,並在讀取時解壓縮。LZ4 資料壓縮演算法無失真,因此原始資料可以從壓縮資料完全重建。
您可以在 FSx 中 lustre 檔案系統的 Kubernetes StorageClass 的參數下,將資料壓縮類型設定為 LZ4。當值設定為 NONE 時,壓縮會停用,這是預設值。此連結
注意
Amazon FSx for Lustre 與以視窗為基礎的容器映像不相容。
Amazon FSx for NetApp ONTAP
Amazon FSx for NetApp ONTAP
Amazon FSx for NetApp ONTAP 支援兩個儲存層:1/主要層和 2/容量集區層。
主要層是佈建的高效能 SSD 型層,用於主動、延遲敏感的資料。全彈性容量集區層針對不常存取的資料進行成本最佳化、隨著資料分層而自動擴展,並提供幾乎無限制的 PB 容量。您可以在容量集區儲存上啟用資料壓縮和重複資料刪除,並進一步減少資料使用的儲存容量。NetApp 的原生政策型 FabricPool 功能會持續監控資料存取模式,並在儲存層之間自動雙向傳輸資料,以最佳化效能和成本。
NetApp 的 Astra Trident 使用 CSI 驅動程式提供動態儲存協同運作,可讓 Amazon EKS 叢集管理 Amazon FSx for NetApp ONTAP 檔案系統支援的持久性磁碟區 PVs 生命週期。若要開始使用,請參閱 Astra Trident 文件中的使用 Astra Trident 與 Amazon FSx for NetApp ONTAP
其他考量
最小化容器映像的大小
部署容器後,容器映像會以多層的形式快取在主機上。透過減少映像的大小,可以減少主機上所需的儲存量。
透過從頭開始使用縮減的基礎映像,例如暫存映像或無痕
您也應該考慮使用開放原始碼工具,例如 Slim.ai
多層套件、工具、應用程式相依性、程式庫可以輕鬆膨脹容器映像大小。透過使用多階段組建,您可以選擇性地將成品從一個階段複製到另一個階段,排除最終映像中不需要的所有項目。您可以在此處
要考慮的另一件事是保留快取映像的時間。使用特定磁碟量時,您可能想要清除映像快取中的過時映像。這樣做有助於確保您有足夠的空間進行主機操作。根據預設, kubelet
若要為未使用的容器和映像垃圾收集設定選項,請使用組態檔案KubeletConfiguration
您可以在 Kubernetes 文件