共用方式為


開始使用叢集登錄

使用 Azure 操作員服務管理員 (AOSM) 叢集登錄改善雲端原生網路功能的復原能力 (CR)

檔歷程記錄

  • 建立與首次發行:2024 年 7 月 26 日
  • HA 更新:2024 年 10 月 16 日
  • 已更新 GC:2024 年 11 月 5 日

功能依存性

這項功能需要下列最低環境:

  • 最低 AOSM ARM API 版本:2023-09-01
  • 第一版,沒有網路函式 (NF) kubernetes 擴充功能的高可用性 (HA):1.0.2711-7
  • 第一個版本,使用HA for NF kubernetes擴充功能:2.0.2810-144
  • 第一個版本,具有 NF kubernetes 擴充功能的 GC:2.0.2860-160

叢集登錄概觀

Azure Operator Service Manager (AOSM) 叢集登錄 (CR) 可在 Nexus K8s 叢集中啟用容器映像的本機複本。 在啟用叢集登錄的情況下安裝容器化網路功能時,容器映像會從遠端 AOSM 成品存放區提取,並儲存至此本機叢集登錄。 使用變動 Webhook 時,叢集登錄會自動攔截映像要求,並取代本機登錄路徑,以避免發行者封裝變更。 使用叢集登錄時,CNF 對容器映像的存取在與遠端成品存放區的連線中斷時仍然存在。

主要使用案例和優點

不僅在使用 AOSM 成品存放區進行初始部署期間,雲端原生網路功能 (CNF) 需要存取容器映像,還要讓網路功能保持運作。 其中一些案例包括:

  • Pod 重新啟動:停止和啟動 Pod 可能導致叢集節點從登錄提取容器映像。
  • Kubernetes 排程器作業:在 Pod 至節點指派期間,根據排程器設定檔規則,如果新節點沒有本機快取的容器映像,節點會從登錄提取容器映像。

使用 AOSM 叢集登錄的優點:

  • 提供必要的本機映射,以防止 CNF 中斷與 AOSM 成品存放區的連線遺失。
  • 減少 AOSM 成品存放區上的映像提取數目,因為每個叢集節點現在只會從本機登錄提取映像。
  • 使用變動 Webhook 來取代適當的本機登錄 URL 路徑,以克服格式不正確的登錄 URL 問題。

叢集登錄的運作方式

AOSM 叢集登錄是使用網路函式操作員 (NFO) Arc K8s 擴充功能來啟用。 下列 CLI 顯示如何在 Nexus K8s 叢集上啟用叢集登錄。

az k8s-extension create --cluster-name
                        --cluster-type {connectedClusters}
                        --extension-type {Microsoft.Azure.HybridNetwork}
                        --name
                        --resource-group
                        --scope {cluster}
                        --release-namespace {azurehybridnetwork}
                        --release-train {preview, stable}
                        --config Microsoft.CustomLocation.ServiceAccount=azurehybridnetwork-networkfunction-operator
                        [--auto-upgrade {false, true}]
                        [--config global.networkfunctionextension.enableClusterRegistry={false, true}]
                        [--config global.networkfunctionextension.enableLocalRegistry={false, true}]
                        [--config global.networkfunctionextension.enableEarlyLoading={false,true}]
                        [--config global.networkfunctionextension.clusterRegistry.highAvailability.enabled={true, false}]
                        [--config global.networkfunctionextension.clusterRegistry.autoScaling.enabled={true, false}]
                        [--config global.networkfunctionextension.webhook.highAvailability.enabled={true, false}]
                        [--config global.networkfunctionextension.webhook.autoScaling.enabled={true, false}]
                        [--config global.networkfunctionextension.clusterRegistry.storageClassName=]
                        [--config global.networkfunctionextension.clusterRegistry.storageSize=]
                        [--config global.networkfunctionextension.webhook.pod.mutation.matchConditionExpression=]
                        [--config global.networkfunctionextension.clusterRegistry.clusterRegistryGCCadence=]
                        [--config global.networkfunctionextension.clusterRegistry.clusterRegistryGCThreshold=]
                        [--version]

在 Network Function Operator Arc K8s 延伸模組中啟用叢集登錄功能時,從 AOSM 成品存放區部署的任何容器映像都可以在 Nexus K8s 叢集中進行本機存取。 使用者可選擇叢集登錄的永續性儲存體大小。

注意

如果使用者未提供任何輸入,則會使用預設永續性磁碟區 100 GB。

叢集登錄元件

叢集登錄功能會在目標邊緣叢集上部署協助程式Pod,以協助NFO擴充功能。

元件協調器

  • 此主要 Pod 會負責協調 K8sBridge 所建立的自定義資源物件(CLO)元件,以及叢集上執行的 Microsoft.Kubernetes 資源提供者 (RP)、混合式轉送和 Arc 代理程式。

Pod 變動 Webhook

  • 這些 Pod 會實作 Kubernetes 變動許可 Webhook,以提供變動 API 的實例。 變動 API 會執行兩件事:
    • 它會修改本機登錄IP的映像登錄路徑,取代AOSM成品存放區 Azure 容器登錄 (ACR)。
    • 它會在邊緣叢集上建立成品CR。

成品協調器

  • 此 Pod 會協調變動 Webhook 所建立的成品 CLO。

登錄

  • 此 Pod 會儲存和擷取 CNF 的容器映像。

叢集登錄垃圾收集

AOSM 叢集擴充功能會執行背景垃圾收集 (GC) 工作,以定期清除容器映像。 此作業會根據排程執行、檢查叢集登錄使用量是否已達到指定的臨界值,如果是的話,請起始垃圾收集程式。 作業排程和閾值是由用戶設定,但根據預設,作業每天會以 0% 使用率閾值執行一次。

清除垃圾映像指令清單

AOSM 會維護 Pod 擁有者資源與叢集登錄中取用映射之間的參考。 起始映像清除程式時,系統會識別未連結至任何 Pod 的映射,發出虛刪除以從叢集登錄中移除它們。 這種類型的虛刪除不會立即釋放叢集登錄儲存空間。 實際移除映像檔取決於下面概述的NCF散發登錄垃圾收集。

注意

Pod 擁有者與其容器映像之間的參考可確保 AOSM 不會錯誤地刪除映像。 例如,如果複本集 Pod 關閉,AOSM 將不會取值容器映射。 刪除複本集時,AOSM 只會取值容器映像。 相同的原則適用於 Kubernetes 作業和精靈集所管理的 Pod。

NCF 垃圾收集分佈

AOSM 會使用 #DFBB56C1AD9454756BC4604B8DC7ADF0D CNCF 散發登錄來設定叢集登錄。 因此,AOSM 依賴垃圾收集所提供的 垃圾收集功能 |NCF 分佈。 整體而言,它會遵循標準 2 階段「標記和掃掠」程式來刪除圖像檔,以釋放登錄儲存空間。

注意

此程式需要只讀模式中的叢集登錄。 如果映像在登錄不在唯讀模式時上傳,則會有錯誤地刪除映射層而導致映像損毀的風險。 登錄需要鎖定只讀模式,持續時間最多 1 分鐘。 因此,當叢集登錄處於只讀模式時,AOSM 會延遲其他 NF 部署。

垃圾收集組態參數

下列參數會設定垃圾收集工作的排程和臨界值。

  • global.networkfunctionextension.clusterRegistry.clusterRegistryGCCadence
  • global.networkfunctionextension.clusterRegistry.clusterRegistryGCThreshold
  • 如需更多組態詳細數據,請參閱最新的 網路功能擴充功能安裝指示

高可用性和復原考慮

AOSM NF 擴充功能會使用變動的 Webhook 和邊緣登錄來支援主要功能。

  • 將 Helm 圖表上線,而不需要自定義影像路徑。
  • 本機叢集登錄,可加速Pod作業,並啟用中斷連線的模式支援。 這些基本元件必須具有高可用性和復原性。

HA 變更摘要

使用 HA、叢集登錄和 Webhook Pod 現在支援至少三個複本和五個複本的複本集。 複本集金鑰組態如下所示:

  • 使用漸進式推出升級策略。
  • PodDisruptionBudgets (PDB) 用於自願中斷期間的可用性。
  • Pod 反親和性可用來將 Pod 平均分散到節點。
  • 整備探查可用來確保Pod在提供流量之前已就緒。
  • AOSM 工作負載 Pod 只會指派給系統節點集區。
  • Pod 會在 CPU 和記憶體負載下水平調整。

複本

  • 執行多個復本或應用程式複本的叢集提供第一層備援。 叢集登錄和 Webhook 都定義為 'kind:deployment',至少有三個複本。

DeploymentStrategy

  • rollUpdate策略可用來協助實現零停機時間升級,並支援逐步推出應用程式。 默認 MaxUnavailable 設定一次只允許關閉一個 Pod,直到建立足夠的 Pod 以滿足備援原則為止。

Pod 中斷預算

  • 原則中斷預算 (PDB) 可保護 Pod 免於自願中斷,並且會與 Deployment、ReplicaSet 或 StatefulSet 物件一起部署。 若為 AOSM 運算子 Pod,則會使用具有 minAvailable 參數 2 的 PDB。

Pod 反親和性

  • Pod 反親和性可控制應用程式Pod在叢集中多個節點之間的散發。 使用HA時,AOSM Pod 反親和性會使用下列參數:
    • 排程模式可用來定義強制執行規則的嚴格程度。
      • requiredDuringSchedulingIgnoredDuringExecution(Hard): Pod 必須以符合已定義規則的方式進行排程。 如果沒有符合規則需求的拓撲可供使用,則不會排程Pod。
      • preferredDuringSchedulingIgnoredDuringExecution(Soft):此規則類型表示排程 Pod 的喜好設定,但不會強制執行嚴格的需求。 如果可用的拓撲符合喜好設定準則,Kubernetes 會排程 Pod。 如果沒有這類拓撲可供使用,則 Pod 仍可在不符合喜好設定的其他節點上排程。
    • 標籤選取器是用來以套用同質的特定 Pod 為目標。
    • 拓撲金鑰可用來定義節點需求。
  • 根據設計,Nexus 節點放置會平均分散到區域,因此將Pod分散到節點也會提供區域性備援。
  • AOSM 運算子 Pod 會使用具有加權 100 的軟式反親和性,並使用以節點主機名為基礎的拓撲密鑰。

儲存體

  • 由於 AOSM 邊緣登錄有多個復本分散到節點,因此永續性磁碟區必須支援 ReadWriteMany (RWX) 存取模式。 Nexus 叢集上提供PVC「nexus-shared」磁碟區,並支援 RWX 存取模式。

透過整備探查進行監視

  • AOSM 會使用 HTTP 整備探查來知道容器何時準備好開始接受流量。 當所有容器就緒時,Pod 就會被視為就緒。 當 Pod 尚未就緒時,它會從服務負載平衡器中移除。

系統節點集區

  • 所有 AOSM 操作員 Pod 都會指派給系統節點集區。 此集區可防止設定錯誤或Rouge 應用程式 Pod 影響系統 Pod。

平行縮放

  • 在 Kubernetes 中,HorizontalPodAutoscaler (HPA) 會自動更新工作負載資源,目的是自動調整工作負載以符合需求。 AOSM 操作員 Pod 已設定下列 HPA 原則參數;
    • 最小復本為三個。
    • 最多五個複本。
    • cpu 和記憶體為 80% 的 targetAverageUtilization。

資源限制

  • 資源限制可用來防止 AOSM Pod 執行所在節點上的資源多載。 AOSM 使用兩個資源參數來限制 CPU 和記憶體耗用量。
    • 資源要求 - 應保留給 Pod 的最低數量。 此值應設定為應用程式正常負載下的資源使用量。
    • 資源限制 - 如果使用量達到終止限制,Pod 應該使用的最大數量。 所有 AOSM 操作員容器都會設定適當的要求、CPU 和記憶體的限制。

已知的HA限制

  • 系統代理程式集區中具有單一作用中節點的 Nexus AKS (NAKS) 叢集不適用於高可用性。 Nexus 生產拓撲必須在系統代理程式集區中使用至少三個作用中的節點。
  • nexus-shared storage 類別是網路文件系統 (NFS) 記憶體服務。 此 NFS 記憶體服務適用於每個雲端服務網路 (CSN)。 連結至 CSN 的任何 Nexus Kubernetes 叢集都可以從這個共用存放集區佈建永續性磁碟區。 儲存集區目前限製為網路雲端 (NC) 3.10 的 1 TiB 大小上限,其中 AS NC 3.12 有 16 TiB 選項。
  • Pod 反親和性只會處理 Pod 的初始放置、後續的 Pod 調整和修復,遵循標準 K8s 排程邏輯。

常見問題集

是否可以搭配先前部署的 CNF 應用程式使用 AOSM 叢集登錄?

如果 CNF 應用程式已在沒有叢集登錄的情況下部署,則不會自動使用容器映像。 必須先啟用叢集登錄,才能使用 AOSM 部署網路功能。

我可在部署之後變更儲存體大小嗎?

在初始部署之後,無法修改儲存體大小。 建議將磁碟區大小設定為起始大小的 3 倍到 4 倍。

我可以列出目前儲存在叢集存放庫中的檔案嗎?

下列命令可用來列出人類可讀取格式的檔案:

 kubectl get artifacts -A -o jsonpath='{range .items[*]}{.spec.sourceArtifact}'

這個指令應該產生類似下列的輸出:

 ppleltestpublisheras2f88b55037.azurecr.io/nginx:1.0.0