在 Azure Stack Hub 上使用 AKS 引擎升級 Kubernetes 叢集

AKS 引擎可讓您升級原本使用 Azure Stack Hub 上工具部署的 Kubernetes 叢集。 您可以使用 AKS 引擎來維護叢集。 維護工作與任何 IaaS 系統類似。 您應該留意新更新的可用性,並使用 AKS 引擎加以套用。

升級叢集

升級命令會更新 Kubernetes 版本和 OS 基礎映像。 每次執行升級命令時,針對叢集的每個節點,AKS 引擎都會使用與所用 aks 引擎 版本相關聯的 AKS 基底映像來建立新的 VM。

針對 AKS 引擎 0.73.0 版和更新版本,您可以使用 aks-engine upgrade 命令來維護叢集中每個主要和代理程式節點的貨幣。

針對 AKS 引擎 0.75.3 版和更新版本,您可以使用 aks-engine-azurestack upgrade 命令來維護叢集中每個主要和代理程式節點的貨幣。

Microsoft 不會管理您的叢集。 但是 Microsoft 會提供工具和 VM 映像供您用來管理叢集。

針對已部署的叢集,升級涵蓋:

  • Kubernetes
  • Azure Stack Hub Kubernetes 提供者
  • 基底 OS

在升級生產叢集時,請考慮:

  • 針對目標叢集所使用的叢集規格 (apimodel.json) 和資源群組是否正確?
  • 您是否使用可靠的機器讓用戶端電腦執行 AKS 引擎,以及從中執行升級作業的機器?
  • 請確定您有備份叢集,而且該叢集可以運作。
  • 可以的話,請從 Azure Stack Hub 環境內的 VM 執行命令,以減少網路躍點和潛在的連線失敗。
  • 請確定訂用帳戶有足夠的空間可執行整個程序。 此程序會在程序進行期間配置新的 VM。
  • 未規劃任何系統更新或排程的工作。
  • 在和生產叢集具有相同設定的叢集上設定分段升級,並在其中測試升級,然後才在生產叢集中進行升級

升級至較新 Kubernetes 版本的步驟

注意

如果您使用較新版本的 aks 引擎,且映像可在市集中使用,也會升級 AKS 基底映射。

下列指示會使用最少的步驟來執行升級。 如果您想要更多詳細數據,請參閱 升級 Kubernetes 叢集一文。

  1. 您必須先判斷可作為升級目標的版本。 此版本取決於您目前擁有的版本,然後使用該版本值來執行升級。 您可以執行下列命令來列出 AKS 引擎所支援的 Kubernetes 版本:

    注意

    針對 AKSe 0.75.3 版和更新版本,取得 AKS 引擎版本的命令為 aks-engine-azurestack get-versions

    aks-engine get-versions --azure-env AzureStackCloud
    

    如需 AKS 引擎、AKS 基底映像和 Kubernetes 版本的完整對應,請參閱 支援的 AKS 引擎版本

  2. 收集執行 upgrade 命令所需的資訊。 upgrade此指令會使用下列參數:

    參數 範例 描述
    azure-env AzureStackCloud 向 AKS 引擎指出目標平台是使用 AzureStackCloud 的 Azure Stack Hub。
    location local Azure Stack Hub 的區域名稱。 針對 ASDK,區域會設定為 local
    resource-group kube-rg 輸入新資源群組的名稱,或選取現有的資源群組。 資源名稱必須是小寫的英數字元。
    subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 輸入訂用帳戶識別碼。 如需詳細資訊,請參閱訂閱供應項目
    api-model ./kubernetes-azurestack.json 叢集設定檔的路徑或 API 模型。
    client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 輸入服務主體 GUID。 當 Azure Stack Hub 系統管理員建立服務主體時,用戶端識別碼已識別為應用程式識別碼。
    client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 輸入服務主體祕密。 這是您建立服務時所設定的用戶端密碼。
    identity-system adfs 選擇性。 如果您要使用 Active Directory 同盟服務 (AD FS),請指定身分識別管理解決方案。
  3. 準備好您的值,然後執行下列命令:

    注意

    針對 AKSe 0.75.3 版和更新版本,升級 AKS 引擎的命令為 aks-engine-azurestack upgrade

    aks-engine upgrade \
    --azure-env AzureStackCloud \
    --location <for an ASDK is local> \
    --resource-group kube-rg \
    --subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --api-model kube-rg/apimodel.json \
    --upgrade-version 1.18.15 \
    --client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
    --identity-system adfs # required if using AD FS
    
  4. 如果基於任何原因,升級作業發生失敗,您可以在解決問題之後重新執行 upgrade 命令。 AKS 引擎會繼續先前失敗的作業。

僅升級 OS 映像的步驟

  1. 檢閱 supported-kubernetes-versions 資料表,並判斷您是否有打算升級的 aks-engine 版本和 AKS 基礎映像。 如果您是在 AKS 引擎 0.73.0 版或更新版本上,若要檢視 aks 引擎執行的版本: aks-engine version。 如果您是在 AKS 引擎 0.75.3 版或更新版本上,若要檢視 aks 引擎執行的版本: aks-engine-azurestack version
  2. 在已安裝 aks-engine 的機器中,對應地升級您的 AKS 引擎:執行 ./get-akse.sh --version vx.xx.x,並以您的目標版本取代 x.xx.x
  3. 要求 Azure Stack Hub 操作員在您打算使用的 Azure Stack Hub Marketplace 中新增所需的 AKS 基礎映像版本。
  4. 使用您已在使用的相同 Kubernetes 版本來執行 aks-engine upgrade 命令,但新增 --force。 您可以在強制升級中看到範例。

將叢集更新為OS Ubuntu 20.04版的步驟

使用 AKS 引擎 0.75.3 版和更新版本,您可以將叢集 VM 從 Ubuntu 18.04 升級至 20.04。 請遵循下列步驟:

  1. 找出並編輯部署期間所產生的 api-model.json 檔案。 這應該是與用於任何透過 aks-engine 升級或調整作業的相同檔案。 在 AKS 引擎 0.75.3 版和更新版本中,使用 aks-engine-azurestack
  2. 找出 masterProfileagentPoolProfiles 的區段,在這些區段內,將 distro 的值變更為 aks-ubuntu-20.04
  3. 儲存 api-model.json 檔案,並在您的 aks-engin upgrade 命令中使用 api-model.json 檔案,就像您在升級至較新 Kubernetes 版本的步驟中所做的一樣

如果您使用 AKS 引擎 v0.70.0 和更新版本的記憶體磁碟區,升級叢集的步驟

適用於 Azure 的雲端提供者專案 (也稱為 cloud-controller-manager、樹狀結構外雲端提供者或外部雲端提供者,) 實作 Azure 雲端的 Kubernetes 雲端提供者介面。 樹狀結構外實作是取代已取代的 樹狀結構內實作。

在 Azure Stack Hub 上,從 Kubernetes v1.21 開始,AKS 引擎型叢集將獨佔使用 cloud-controller-manager。 因此,若要部署 Kubernetes v1.21+ 叢集,必須在 API 模型 (範例) 中將 設定orchestratorProfile.kubernetesConfig.useCloudControllerManagertrue為 。 AKS 引擎的升級程式會自動更新 useCloudControllerManager 旗標。

注意

升級考慮: 將 Kubernetes 叢集從 v1.20 (或更新版本) 升級至 v1.21 (或更新版本) 的程式,會導致依賴 kubernetes.io/azure-disk 樹狀結構內布建程式的工作負載停機。 升級至 Kubernetes v1.21+ 之前, 強烈建議 先執行應用程式數據的完整備份,並在 生產前環境中 驗證叢集記憶體資源 (PV 和 PVC) 可以移轉至新的磁碟區布建工具。 在這裡瞭解如何移轉至 Azure 磁碟 CSI 驅動程式。

磁碟區布建器

樹狀結構內磁碟區布建器只與樹狀結構內雲端提供者相容。 因此,如果使用者工作負載依賴持續性記憶體,v1.21+ 叢集必須包含容器記憶體介面 (CSI) Driver。 此處列出 Azure Stack Hub 上可用的一些解決方案。

AKS 引擎預設 不會 在 Azure Stack Hub 上啟用任何 CSI 驅動程式。 對於需要 CSI 驅動程式的工作負載,您可以明確啟用azuredisk-csi-driver僅限 Linux 的叢集 (附加元件) ,或使用 Helm 來安裝 azuredisk-csi-driver (linux 和/或 Windows 叢集) 的圖表。

將永續性記憶體遷移至 Azure 磁碟 CSI 驅動程式

將 AKS 引擎型叢集從 v1.20 (或更新版本) 升級至 v1.21 (或更新版本) 的程式,會導致依賴樹狀結構內磁碟區布建器的工作負載 kubernetes.io/azure-disk 停機,因為此佈建工具不是 Azure 雲端提供者的一部分。

如果應該保留基礎 Azure 磁碟記憶體保存的數據,則在叢集升級程式完成之後,需要執行下列額外步驟:

  1. 安裝 Azure 磁碟 CSI 驅動程式
  2. 拿掉已取代的樹狀結構內儲存類別
  3. 重新建立永續性磁碟區和宣告

1.手動安裝 Azure 磁碟 CSI 驅動程式

下列文稿會使用 Helm 來安裝 Azure 磁碟 CSI 驅動程式:

DRIVER_VERSION=v1.10.0
helm repo add azuredisk-csi-driver https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/charts
helm install azuredisk-csi-driver azuredisk-csi-driver/azuredisk-csi-driver \
  --namespace kube-system \
  --set cloud=AzureStackCloud \
  --set controller.runOnMaster=true \
  --version ${DRIVER_VERSION}

2.取代記憶體類別

kube-addon-manager會在手動刪除樹狀結構記憶體類別 () 之後,自動 () 建立 Azure 磁碟 CSI 驅動程式記憶體類別disk.csi.azure.comkubernetes.io/azure-disk

IN_TREE_SC="default managed-premium managed-standard"

# Delete deprecated "kubernetes.io/azure-disk" storage classes
kubectl delete storageclasses ${IN_TREE_SC}

# Wait for addon manager to create the "disk.csi.azure.com" storage class resources
kubectl get --watch storageclasses

3.重新建立永續性磁碟區

安裝 Azure 磁碟 CSI 驅動程式並取代記憶體類別之後,下一個步驟是使用 Azure 磁碟 CSI 驅動程式 (或替代 CSI 解決方案) ,在 PV) 和永續性磁碟區宣告 (PV) 重新建立 (永續性磁碟區。

這是一個多步驟程序,視這些資源一開始的部署方式而定,可能會有所不同。 高階步驟如下:

  • 視需要) 刪除參考 PV + PVC 配對的部署或具狀態集,以移轉 (備份資源定義。
  • 確定 PVs 的 persistentVolumeReclaimPolicy 屬性設定為值 Retain , (範例) 。
  • 視需要刪除 PV + PVC 配對以移轉 (備份資源定義) 。
  • 若要移轉,請移除 物件並 azureDisk 新增 csi 參考至原始 AzureDisk (範例) 的物件,以更新 PV 的資源定義。
  • 依下列順序重新建立 PV 資源/秒、PV 資源/秒,視需要 () ,最後是部署或具狀態集。

下列移轉 腳本 會以範本的形式提供。

執行移轉文本之後,如果 Pod 卡住「無法連結或掛接磁碟區」錯誤,請確定 已安裝 Azure 磁碟 CSI 驅動程式重新建立記憶體類別

強制升級

在某些情況下,您可以強制升級叢集。 例如,在第一天,您使用最新的 Kubernetes 版本,在已中斷連線的環境中部署叢集。 隔天,Ubuntu 發行了弱點的修補程式,而 Microsoft 對此產生了新的 AKS 基底映像。 您可以使用您已部署的相同 Kubernetes 版本來強制升級,以套用新的映像。

注意

針對 AKSe 0.75.3 版和更新版本,升級 AKS 引擎的命令為 aks-engine-azurestack upgrade

aks-engine upgrade \
--azure-env AzureStackCloud   
--location <for an ASDK is local> \
--resource-group kube-rg \
--subscription-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--api-model kube-rg/apimodel.json \
--upgrade-version 1.18.15 \
--client-id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--client-secret xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
--force

如需指示,請參閱強制升級

後續步驟