使用 Azure Kubernetes 機群管理員協調多個叢集的更新
管理擁有大量叢集之 Kubernetes 機群的平台管理員,常會在多個叢集之間以安全且可預測的方式分段更新時發生問題。 為解決這個難題,Kubernetes 機群管理員 (機群) 可讓您使用更新執行、階段、群組和策略,協調多個叢集的更新。
必要條件
請參閱本功能的概念性概觀,說明本文件所參考之更新策略、執行、階段和群組。
您必須擁有一個包含一或多個成員叢集的機群資源。 如果沒有,請遵循快速入門來建立機群資源,並將 Azure Kubernetes Service (AKS) 叢集加入為成員。 本逐步解說會以包含五個 AKS 成員叢集的機群資源為例示範。
設定下列環境變數:
export GROUP=<resource-group>
export FLEET=<fleet-name>
如要遵循本文的 Azure CLI 指示,您需要安裝 Azure CLI 2.53.1 版或更新版本。 若要安裝或升級,請參閱安裝 Azure CLI。
您也需要 fleet
Azure CLI 延伸模組,執行以下命令即可安裝:
az extension add --name fleet
執行下列命令,以更新為發行的最新版延伸模組:
az extension update --name fleet
注意
更新執行會接受您在 AKS 叢集層級設定的計劃性維護時段。 如需詳細資訊,請參閱 跨多個成員叢集 的計劃性維護,其中說明更新執行如何處理已使用計劃性維護時段設定的成員叢集。
更新執行支援升級叢集順序的兩個選項:
- 一對一:如果您不在意控制叢集升級的順序,
one-by-one
請提供簡單的方法來逐一升級車隊的所有成員叢集
- 使用更新群組和階段 控制叢集的順序 - 如果您想要控制升級叢集的順序,您可以在更新群組和更新階段中建構成員叢集。 此外,此序列可以儲存為更新策略形式的範本。 更新執行稍後可以從更新策略建立,而不是每次需要根據階段建立更新執行時定義順序。
逐一更新所有叢集
在 Azure Kubernetes 機群管理員資源的頁面上,移至 [多叢集更新] 功能表,然後選取 [建立]。
選擇 [一個接一個] 會依序升級車隊的所有成員叢集。
針對 升級範圍,您可以選擇下列三個選項之一:
- 控制平面和節點集區的 Kubernetes 版本
- 僅限叢集控制平面的 Kubernetes 版本
- 僅限節點映像版本
節點映像有下列選項可供選擇:
- [最新]: 將更新執行中的每個 AKS 叢集更新至其區域中該叢集可用的最新映像。
- [一致]: 當更新執行有機會使用多個區域的 AKS 叢集時,最新可用的節點映像會不相同 (如需詳細資訊,請參閱發行版本追蹤器)。 更新執行會挑選所有這些區域中的最新通用映像,以達到一致性。
建立更新執行:
執行以下命令,可逐一更新機群所有叢集的 Kubernetes 版本和節點映像版本:
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-1 --upgrade-type Full --kubernetes-version 1.26.0
執行下列命令,僅針對機隊所有成員叢集的控制平面更新 Kubernetes 版本:
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-2 --upgrade-type ControlPlaneOnly --kubernetes-version 1.26.0
執行以下命令,只會逐一更新機群所有叢集的和節點映像版本:
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-3 --upgrade-type NodeImageOnly
建立更新執行時,您可以控制更新執行的範圍。 旗 --upgrade-type
標支援下列值:
ControlPlaneOnly
只會升級叢集控制平面的 Kubernetes 版本。
Full
升級控制平面和節點集區的 Kubernetes 版本以及節點映像。
NodeImageOnly
只會升級節點映像。
此外, --node-image-selection
旗標也支援下列值:
- [最新]: 將更新執行中的每個 AKS 叢集更新至其區域中該叢集可用的最新映像。
- [一致]: 當更新執行有機會使用多個區域的 AKS 叢集時,最新可用的節點映像會不相同 (如需詳細資訊,請參閱發行版本追蹤器)。 更新執行會挑選所有這些區域中的最新通用映像,以達到一致性。
啟動更新執行:
若要啟動更新執行,請執行下列命令:
az fleet updaterun start --resource-group $GROUP --fleet-name $FLEET --name <run-name>
依特定順序更新叢集
更新群組和階段可讓您在更新叢集時,更加掌握更新執行遵循的順序。 在更新階段內,更新會平行套用至所有不同的更新群組; 在更新群組內,成員叢集會循序更新。
將叢集指派給更新群組
有兩種方法可將成員叢集指派給特定的更新群組。
在 Azure Kubernetes 機群管理員資源的頁面中,移至 [成員叢集]。
指定成員叢集應屬之更新群組。
az fleet member create --resource-group $GROUP --fleet-name $FLEET --name member1 --member-cluster-id $AKS_CLUSTER_ID --update-group group-1a
- 第二種方法是將現有的機群成員指派給更新群組。 例如:
在 Azure Kubernetes 機群管理員資源的頁面中,瀏覽至 [成員叢集]。 選擇想要的成員叢集,然後選取 [指派更新群組]。
指定群組名稱,然後選取 [指派]。
az fleet member update --resource-group $GROUP --fleet-name $FLEET --name member1 --update-group group-1a
注意
任何機群成員都只能屬於一個更新群組,但一個更新群組可有多個機群成員。
更新群組本身不是獨立的資源類型。 更新群組只是代表機群成員參考的字串。 因此,如果刪除參考通用更新群組的所有機群成員,則該特定更新群組也將不復存在。
定義更新執行和階段
您可以使用更新階段定義更新執行,以便循序將更新套用至不同的更新群組。 例如,第一個更新階段可能會更新測試環境成員叢集,而第二個更新階段則會更新生產環境成員叢集。 您也可以指定兩個更新階段之間的等候時間。
在 Azure Kubernetes Fleet Manager 資源的頁面上,流覽至 [多重叢集更新]。 在 [ 執行] 索引標籤底下,選取 [ 建立]。
提供更新執行的名稱,然後選取 [階段] 作為更新順序類型。
選擇 [ 建立階段]。 您現在可以指定階段名稱和每個階段後要等候的持續時間。
選擇此階段要包含的更新群組。
定義所有階段之後,您可以使用 [上移] 和 [下移] 控件來排序它們。
針對 升級範圍,您可以選擇下列三個選項之一:
- 控制平面和節點集區的 Kubernetes 版本
- 僅限叢集控制平面的 Kubernetes 版本
- 僅限節點映像版本
節點映像有下列選項可供選擇:
- [最新]: 將更新執行中的每個 AKS 叢集更新至其區域中該叢集可用的最新映像。
- [一致]: 當更新執行有機會使用多個區域的 AKS 叢集時,最新可用的節點映像會不相同 (如需詳細資訊,請參閱發行版本追蹤器)。 更新執行會挑選所有這些區域中的最新通用映像,以達到一致性。
按兩下頁面底部的 [ 建立 ] 以建立更新執行。 每次建立更新執行時指定階段及其順序,都可能會變得重複且繁瑣。 更新策略可讓您儲存更新執行的範本,藉此簡化此程式。 如需詳細資訊,請參閱 更新策略建立和使用方式。
在 [多叢集更新] 功能表中,選擇 [更新執行],然後選取 [開始]。
執行以下命令可建立更新執行:
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-4 --upgrade-type Full --kubernetes-version 1.26.0 --stages example-stages.json
以下是階段檔案的輸入範例 (example-stages.json):
{
"stages": [
{
"name": "stage1",
"groups": [
{
"name": "group-1a"
},
{
"name": "group-1b"
},
{
"name": "group-1c"
}
],
"afterStageWaitInSeconds": 3600
},
{
"name": "stage2",
"groups": [
{
"name": "group-2a"
},
{
"name": "group-2b"
},
{
"name": "group-2c"
}
]
}
]
}
建立更新執行時,您可以控制更新執行的範圍。 旗 --upgrade-type
標支援下列值:
ControlPlaneOnly
只會升級叢集控制平面的 Kubernetes 版本。
Full
升級控制平面和節點集區的 Kubernetes 版本以及節點映像。
NodeImageOnly
只會升級節點映像。
此外, --node-image-selection
旗標也支援下列值:
- [最新]: 將更新執行中的每個 AKS 叢集更新至其區域中該叢集可用的最新映像。
- [一致]: 當更新執行有機會使用多個區域的 AKS 叢集時,最新可用的節點映像會不相同 (如需詳細資訊,請參閱發行版本追蹤器)。 更新執行會挑選所有這些區域中的最新通用映像,以達到一致性。
執行以下命令可開始此更新執行:
az fleet updaterun start --resource-group $GROUP --fleet-name $FLEET --name run-4
使用更新策略建立更新執行
建立更新執行需要階段、群組及其每次指定的順序。 更新策略可讓您儲存更新執行的範本,藉此簡化此程式。
注意
您可以使用相同的更新策略建立各有唯一名稱的多個更新執行。
建立更新策略:有兩種方式可以建立更新策略:
使用更新策略來建立更新執行:建立新的後續更新執行時,可以參考您稍後建立的更新策略:
執行以下命令可建立新的更新策略:
az fleet updatestrategy create --resource-group $GROUP --fleet-name $FLEET --name strategy-1 --stages example-stages.json
執行以下命令可建立參考本策略的更新執行:
az fleet updaterun create --resource-group $GROUP --fleet-name $FLEET --name run-5 --update-strategy-name strategy-1 --upgrade-type NodeImageOnly --node-image-selection Consistent
管理更新執行
有幾個選項可以管理更新執行:
在機隊資源的 [多重叢集更新] 索引標籤下,您可以啟動處於 [未啟動] 或 [失敗] 狀態的更新執行。
在 車隊資源的 [多重叢集更新] 索引標籤下,您可以 停止 目前正在 執行的 更新執行。
在 [未啟動]、[失敗] 或 [執行中] 狀態的任何更新內,您可以選取任何階段並略過升級。
您也可以在更新群組或成員叢集層級略過升級。
如需詳細資訊,請參閱 更新執行狀態的概念概觀,以及略過執行/階段/群組的行為 。
您可以啟動處於 [未啟動] 或 [失敗] 狀態的更新執行:
az fleet updaterun start --resource-group $GROUP --fleet-name $FLEET --name <run-name>
您可以 停止 目前正在 執行的 更新執行:
az fleet updaterun stop --resource-group $GROUP --fleet-name $FLEET --name <run-name>
您可以透過在 skip 命令的目標下指定更新階段或群組來略過更新階段或群組:
az fleet updaterun skip --resource-group $GROUP --fleet-name $FLEET --name <run-name> --targets Group:my-group-name Stage:my-stage-name
如需詳細資訊,請參閱 更新執行狀態的概念概觀,以及略過執行/階段/群組的行為 。