將現有節點移轉至適用於 Azure Kubernetes Service (AKS) 的 Azure Container Linux (ACL)

在本文中,您將學習如何將現有的 AKS 節點池遷移到 Azure Container Linux (ACL) for AKS。 您可以使用下列其中一種方法移轉現有節點:

  • 原地作業系統 SKU 遷移:將現有節點池的作業系統 SKU 改為 ACL,這樣會自動重映像節點。
  • 移除現有節點池並新增新的 ACL 節點池:建立新的 ACL 節點池,移動你的工作負載,並移除舊的節點池。

Important

如果你在 AKS 上使用 Azure 容器 Linux (ACL),請務必檢視以下考量與限制:

原地作業系統 SKU 遷移限制

除了一般的 ACL 限制外,以下事項特別適用於原地作業系統 SKU 遷移:

  • OS SKU 移轉功能無法透過 PowerShell 或 Azure 入口網站取得。
  • OS SKU 移轉功能不支援重新命名現有的節點集區。
  • 啟用 UseGPUDedicatedVHD 的節點池無法執行作業系統 SKU 遷移。
  • Windows 節點池無法遷移到 ACL。

先決條件

  • 一個已有的 AKS 叢集,至少有一個 Linux 節點池。
  • Azure CLI 版本 2.86.0 或更後版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱 安裝 Azure CLI。
  • 我們建議您在遷移生產叢集前,先在開發或暫存環境中 部署 ACL 叢集 ,確認您的工作負載是否能在 ACL 上順利運行。
  • 在生產叢集上使用該程序之前,在測試/開發中確保移轉功能對您可運作。
  • 確保您的 Pod 具有足夠的 Pod 中斷預算 (PDB),讓 AKS 可以在移轉期間能在 VM 之間移動 Pod。

新增 ACL 節點池並移除現有的節點池

  1. 用指令 az aks nodepool add 新增一個新的 ACL 節點池。 使用 --mode System 新池作為系統代理池,讓你在下一步刪除原本的節點池。

    az aks nodepool add \
        --resource-group <resource-group> \
        --cluster-name <cluster-name> \
        --name <new-node-pool-name> \
        --os-sku AzureContainerLinux \
        --mode System \
        --node-count 3
    

    輸出範例:

    {
      "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/nodePools/myNewNodePool",
      "name": "myNewNodePool",
      "osSku": "AzureContainerLinux",
      "provisioningState": "Succeeded"
    }
    
  2. 用這個 az aks nodepool delete 指令移除你現有的節點池。

    az aks nodepool delete \
        --resource-group <resource-group> \
        --cluster-name <cluster-name> \
        --name <existing-node-pool-name>
    

就地 OS SKU 移轉

你可以透過更改節點池的作業系統 SKU 來將現有的 Linux 節點池遷移到 ACL,這樣叢集就會經過標準的節點映像升級流程。 此方法不需要建立新的節點池;取而代之的是,你現有的節點池會自動重新映像。

執行就地 OS SKU 移轉

Important

ACL 需要啟用 Trusted Launch。 遷移到 --enable-secure-boot OS SKU 時必須包含 --enable-vtpm 和 AzureContainerLinux 。 你的節點池虛擬機(VM)大小也必須支援可信啟動。 如果你目前的虛擬機容量不支援,你需要在遷移前重新調整或重建支援的虛擬機容量的節點池。

用指令 az aks nodepool update 將你的節點池的作業系統 SKU 遷移到 ACL。 此指令會觸發節點池的重映像檔,並將作業系統 SKU 更新為 AzureContainerLinux。 OS SKU 變更會觸發立即升級作業,這需要幾分鐘的時間才能完成。

az aks nodepool update \
    --resource-group <resource-group> \
    --cluster-name <cluster-name> \
    --name <existing-node-pool-name> \
    --os-sku AzureContainerLinux \
    --enable-secure-boot \
    --enable-vtpm

輸出範例:

{
  "id": "/subscriptions/xxxxx/resourceGroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/nodePools/nodepool1",
  "name": "nodepool1",
  "osSku": "AzureContainerLinux",
  "provisioningState": "Succeeded"
}

Note

如果您在 OS SKU 移轉期間遇到問題,您可以復原為先前的 OS SKU。

驗證 OS SKU 移轉

Tip

我們建議在遷移生產叢集前,先監控服務健康狀況幾週。

一旦測試叢集的遷移完成,我們建議先監控叢集和工作負載幾週,以確保一切正常運作,再進行生產叢集的遷移。 請使用以下指令驗證遷移並監控您的叢集:

  1. 請用指令 kubectl get nodes -o wide 確認新節點是否執行 ACL。 輸出應該會顯示 ACL OS 映像檔。

    kubectl get nodes -o wide
    
  2. 用指令 kubectl get pods -o wide -A 確認你所有的 pod 和 daemonset 都在新的節點池上運行。

    kubectl get pods -o wide -A
    
  3. 用指令 kubectl get nodes --show-labels 確認升級後的節點池中所有節點標籤都是你預期的。

    kubectl get nodes --show-labels
    
  4. 請用指令 az aks nodepool list 檢查節點映像檔版本。

    az aks nodepool list \
        --resource-group <resource-group> \
        --cluster-name <cluster-name> \
        --query '[].{name: name, osSku: osSku, nodeImageVersion: nodeImageVersion}'
    

    輸出範例:

    [
      {
        "name": "myNodePool",
        "nodeImageVersion": "AKSAzureContainerLinux-202606.01.0",
        "osSku": "AzureContainerLinux"
      }
    ]
    

復原為先前的 OS SKU

如果您在 OS SKU 移轉期間遇到問題,您可以復原為先前的 OS SKU。 要做到這點,請將作業系統 SKU 欄位改回先前的值並重新提交部署,這會觸發另一個升級操作,並將節點池映像回先前的作業系統 SKU。 如果你從 ACL 回復到先前的作業系統 SKU,節點集區預設會使用 Trusted Launch(Gen2)映像變體,除非已明確停用 Trusted Launch。

使用 az aks nodepool update 命令復原為先前的 OS SKU。 此範例會從 ACL 回復至 Azure Linux:

az aks nodepool update \
    --resource-group <resource-group> \
    --cluster-name <cluster-name> \
    --name <existing-node-pool-name> \
    --os-sku AzureLinux

欲了解更多關於 ACL 的資訊,請參見 什麼是 Azure Azure Kubernetes Service (AKS) 的容器 Linux (ACL)?