Azure Kubernetes Service (AKS) 中的永續性軟體工程做法
永續性軟體工程準則是一組專長認證,可協助您定義、建置和執行永續性應用程式。 整體目標是減少應用程式每個層面的碳使用量。 適用於永續性的 Azure Well-Architected 架構指導與 Green Software Foundation 的永續性軟體工程準則一致,並提供永續性軟體工程準則的概觀。
永續性軟體工程是優先順序和焦點的轉移。 在許多情況下,大部分軟體的設計和執行方式都會強調快速效能和低延遲。 永續性軟體工程著重於盡可能減少碳排放量。
- 應用永續性軟體工程準則可達成更快速的效能或較低的延遲,例如降低網路周遊總數。
- 減少碳排放量可能會導致效能變慢或延遲增加,例如延遲低優先順序的工作負載。
下列指導著重於您要使用 Azure Kubernetes Service (AKS) 來建置或操作 Azure 的服務。 本文包括設計和設定檢查清單、建議的設計做法,以及設定選項。 在將永續性軟體工程準則套用至您的應用程式之前,請先檢閱應用程式的優先順序、需求和權衡取捨。
必要條件
- 瞭解 Well-Architected 架構永續性指導可協助您產生高品質、穩定且有效率的雲端結構。 建議您先閱讀有關永續性工作負載的詳細資訊,並使用 Microsoft Azure Well-Architected 檢閱評量來檢閱工作負載。
- 建置應用程式時明確定義商務需求非常重要,因為其可能會對叢集和工作負載架構和設定造成直接影響。 建置或更新現有的應用程式時,請檢閱 Well-Architected 架構永續性設計區域,以及應用程式的整體生命週期。
瞭解共同責任模型
永續性是雲端提供者與客戶或合作夥伴在平台上設計和部署 AKS 叢集之間的共同責任。 即使已最佳化資料中心的永續性,部署 AKS 還是不會自動將其設為具永續性。 未適當最佳化的應用程式碳排放量仍然可能會比必要的量還要多。
深入瞭解永續性的共同責任模型。
設計原則
碳效率:盡可能減少碳排放量。
碳效率高的雲端應用程式是經過最佳化的雲端應用程式,而起點則是成本最佳化。
能源效率:盡可能使用最少能源。
提高能源效率的其中一種方式是盡可能在最少的伺服器上執行應用程式,讓伺服器以最高的使用率執行,同時提升硬體效率。
硬體效率:盡可能使用最少的內含碳量。
提升硬體效率的主要方式有兩種:
- 針對終端使用者裝置,其會延長硬體存留期。
- 針對雲端運算,其會提高資源使用率。
碳感知:當電力變乾淨時執行更多動作,當電力變少時,執行較少動作。
碳感知意謂著藉由增加或減少需求來回應碳強度變化。
設計模式和做法
檢閱每個設計區域中的詳細建議之前,建議您仔細考慮下列設計模式,以在 AKS 上建置永續性工作負載:
設計模式 | 適用於工作負載 | 適用於叢集 |
---|---|---|
為邏輯元件的獨立調整而設計 | ✔️ | |
為事件驅動調整而設計 | ✔️ | |
以無狀態設計為目標 | ✔️ | |
啟用叢集和節點自動更新 | ✔️ | |
安裝支援的附加元件和延伸模組 | ✔️ | ✔️ |
在適用情況下將工作負載容器化 | ✔️ | |
使用能源效率高的硬體 | ✔️ | |
符合可擴縮性需求,並利用自動調整和高載功能 | ✔️ | |
在非上班時間關閉工作負載和節點集區 | ✔️ | ✔️ |
刪除未使用的資源 | ✔️ | ✔️ |
標記您的資源 | ✔️ | ✔️ |
最佳化儲存使用量 | ✔️ | ✔️ |
選擇最接近使用者的區域 | ✔️ | |
減少節點之間的網路周遊 | ✔️ | |
使用服務網格進行評估 | ✔️ | |
最佳化記錄收集 | ✔️ | ✔️ |
快取靜態資料 | ✔️ | ✔️ |
評估是否要使用 TLS 終止 | ✔️ | ✔️ |
使用雲端原生網路安全性工具和控制項 | ✔️ | ✔️ |
掃描弱點 | ✔️ | ✔️ |
應用程式設計
探索本節以深入瞭解如何最佳化應用程式,以取得更永續性的應用程式設計。
為邏輯元件的獨立調整而設計
微服務結構可能會減少所需的計算資源,因為其允許獨立調整其邏輯元件,並確保系統會根據需求來調整這些元件。
- 請考慮使用 Dapr 架構或其他 CNCF 專案,協助您將應用程式功能分成不同的微服務,以及允許獨立調整其邏輯元件。
為事件驅動調整而設計
當您根據相關商務計量 (例如 HTTP 要求、佇列長度和雲端事件) 來調整工作負載時,可以協助降低資源使用率和碳排放量。
- 建置事件驅動應用程式時,請使用 Keda,以允許在沒有需求時將規模縮小為零。
以無狀態設計為目標
從設計中移除狀態可減少工作負載運作所需的記憶體內部或磁碟上資料。
- 請考慮無狀態設計,以減少不必要的網路負載、資料處理和計算資源。
應用程式平台
探索本節以瞭解如何針對永續性做出更明智的平台相關決策。
啟用叢集和節點自動更新
最新的叢集可避免不必要的效能問題,並確保您可以從最新的效能改善和計算最佳化獲益。
- 啟用叢集自動升級,並使用 GitHub Actions 自動將安全性更新套用至節點,以確保叢集具有最新的改善。
安裝支援的附加元件和延伸模組
AKS 支援原則所涵蓋的附加元件和延伸模組會為叢集提供進一步支援的功能,同時讓您受益於整個叢集生命週期的最新效能改善和能源最佳化。
- 將 KEDA 安裝為附加元件。
- 安裝 GitOps 和 Dapr 作為延伸模組。
在適用情況下將工作負載容器化
容器讓您減少不必要的資源配置,並能更妥善地使用部署的資源,因為其允許 Bin 封裝,而且需要的計算資源比虛擬機器更少。
- 使用 Draft,藉由產生 Dockerfiles 和 Kubernetes 資訊清單來簡化應用程式容器化。
使用能源效率高的硬體
Ampere 的雲端原生處理器專為符合雲端的高效能和電源效率需求而設計。
- 評估具有 Ampere Altra Arm 型處理器的節點是否適合您的工作負載。
符合可擴縮性需求,並利用自動調整和高載功能
超大型的叢集不能最大限度地運用計算資源,而且可能會浪費能源。 將應用程式分成不同的節點集區,以根據應用程式需求,讓叢集能夠正確調整大小和獨立調整。 AKS 叢集中的容量用盡時,請從 AKS 擴展到 ACI,將額外的 Pod 擴增至無伺服器節點,並確保工作負載可有效率地使用所有已配置的資源。
- 調整叢集的大小,以符合應用程式的可擴縮性需求。 搭配使用叢集自動調整程式與虛擬節點 ,以快速調整和最大化計算資源使用率。
- 您也可以在命名空間層級強制執行資源配額,並在沒有需求時將使用者節點集區調整為零。
在非上班時間關閉工作負載和節點集區
工作負載可能不需要持續執行,而且可以關閉以降低能源浪費和碳排放量。 您可以完全關閉 (停止) AKS 叢集中的節點集區,同時讓您節省計算成本。
- 使用節點集區停止/啟動,以在非上班時間關閉節點集區。
- 使用 KEDA CRON 調整程式,以根據時間來縮小工作負載 (Pod)
作業程序
探索本節以設定環境,測量並持續改善工作負載成本和碳效率。
刪除未使用的資源
您應該識別並刪除未參考影像和儲存體資源這類任何未使用的資源,因為其對硬體和能源效率有直接的影響。 若要確保能持續進行能源最佳化,您必須將識別和刪除未使用資源視為程序,而不是時間點活動。
- 使用 Azure Advisor 來識別未使用的資源。
- 使用 ImageCleaner 來清除過時的映像,並移除叢集中的風險區域。
標記資源
在正確的時間取得正確的資訊和深入解析對於產生效能和資源使用率的報告很重要。
- 在叢集上設定 Azure 標籤,以啟用工作負載的監視。
儲存體
探索本節以瞭解如何設計更永續性的資料儲存結構,並將現有的部署最佳化。
最佳化儲存使用量
資料擷取和資料儲存作業可能會對能源和硬體效率造成重大影響。 使用正確的資料存取模式來設計解決方案,可降低能源耗用量和內含碳量。
網路和連線能力
探索本節以瞭解如何增強和最佳化網路效率,以減少不必要的碳排放量。
選擇最接近使用者的區域
從資料中心到使用者的距離對能源耗用量和碳排放量有顯著的影響。 縮短網路封包移動的距離,可同時改善能源和碳效率。
- 檢閱應用程式需求和 Azure 地理位置,以選擇最接近大部分網路封包去向的區域。
減少節點之間的網路周遊
將節點放在單一區域或單一可用性區域可減少執行個體之間的實體距離。 不過,針對業務關鍵工作負載,您必須確保將叢集分散到多個可用性區域,而這可能會導致更多網路周遊並增加碳足跡。
- 請考慮將節點部署在鄰近放置群組內,藉由確保計算資源實際位於彼此附近,以減少網路周遊。
- 針對關鍵工作負載,設定具有可用性區域的鄰近放置群組。
使用服務網格進行評估
服務網格會部署額外的容器以進行通訊 (通常是使用 Sidecar 模式),以提供更多作業功能,進而提高 CPU 使用量和網路流量。 不過,其可讓您將應用程式與這些功能分離,因為其會將這些應用程式從應用層移出,並向下移至基礎結構層。
- 在決定使用服務網格通訊元件前,請先仔細考慮該元件所帶來的 CPU 使用量和網路流量中的增加。
最佳化記錄收集
從所有可能來源 (工作負載、服務、診斷和平台活動) 傳送和儲存所有記錄,可能會增加儲存體和網路流量,這會影響較高的成本和碳排放量。
- 請確定您只收集和保留支援需求所需的記錄資料。 設定 AKS 工作負載的資料收集規則,並實作最佳化 Log Analytics 成本的設計考量。
快取靜態資料
使用內容傳遞網路 (CDN) 是最佳化網路流量的永續性方法,因為此方法可減少網路上的資料移動。 此方法會透過將經常讀取的靜態資料儲存到更接近使用者的位置,並協助減少網路流量和伺服器負載,將延遲降到最低。
安全性
探索本節以深入瞭解導致持續、適當規模的安全性態勢的建議。
評估是否要使用 TLS 終止
傳輸層安全性 (TLS) 可確保在網路伺服器和網路瀏覽器之間傳遞的所有資料都保有私密性和加密狀態。 不過,終止並重新建立 TLS 會增加 CPU 使用率,而且在某些結構中可能是不必要的。 平衡的安全性層級可以提供更具持續性且有效率的工作負載,而較高層級的安全性可能會增加計算資源需求。
- 使用應用程式閘道或 Azure Front Door 時,請檢閱 TLS 終止的相關資訊。 判斷您是否可以在邊界閘道終止 TLS,並繼續將非 TLS 傳送至工作負載負載平衡器,然後再到工作負載。
使用雲端原生網路安全性工具和控制項
Azure Front Door 和應用程式閘道可協助管理來自 Web 應用程式的流量,而 Azure Web 應用程式防火牆可防禦 OWASP 前 10 大攻擊以及網路邊緣的負載脫落錯誤 Bot。 這些功能有助於免除不必要的資料傳輸,並降低雲端基礎結構的負擔,不僅頻寬較低,而且基礎結構需求更少。
- 在 AKS 中使用應用程式閘道輸入控制器 (AGIC),以篩選和卸載網路邊緣的流量,使其不再觸達原點,以降低能源耗用量和碳排放量。
掃描弱點
雲端基礎結構上的許多攻擊會嘗試濫用已部署的資源,讓攻擊者直接獲得好處,因而導致非必要的使用量和成本激增。 弱點掃描工具有助於將攻擊者的機會視窗降到最低,並降低任何潛在的資源惡意使用量。
- 請遵循來自適用於雲端的 Microsoft Defender的建議。
- 執行自動化弱點掃描工具 (例如適用於容器的 Defender),以避免不必要的資源使用量。 這些工具可協助識別您映像中的弱點,並將攻擊者的機會窗口降到最低。