升級節點集區時略過版本

升級使用者叢集控制層後,您可以使用略過版本升級功能,在升級 worker 節點集區時略過子版本,減少節點耗盡和重新啟動週期的次數。舉例來說,如果 worker 節點集區的版本為 1.29,您可以將使用者叢集控制層升級至 1.30,再升級至 1.31,然後直接將 worker 節點集區從 1.29 升級至 1.31。進階和非進階叢集都支援這項功能,但 1.31 版進階叢集和 1.28 以下版本的 Google Distributed Cloud 軟體 (僅限 VMware) 除外。

開始之前,請務必熟悉升級總覽、升級版本規則、升級最佳做法和升級叢集。

限制

以下是略過版本升級的限制:

  • Ubuntu 和 Container-Optimized OS 節點集區支援略過版本升級,但 Windows 節點集區不支援。

  • 1.31 版:進階叢集不支援這項功能。

  • 1.32 以上版本:進階叢集可使用這項功能。

  • 負載平衡器節點集區 (具有 enableLoadBalancer: true 的節點集區) 不支援略過版本升級或版本偏差。負載平衡器節點集區的版本必須與叢集版本相符。

  • 根據 Kubernetes 限制,使用者叢集的控制層一次只能升級一個子版本。不過請注意,相較於升級執行工作負載的節點集區,僅升級控制層所需的時間大幅減少,風險也較低。

跳過版本升級的好處

本節說明使用略過版本升級功能的一些優點。

更輕鬆地將叢集維持在支援的版本

Google Distributed Cloud 每四個月會推出新的子版本,每個子版本都有一年的支援期。為確保叢集在支援期間內,您必須大約每四個月執行一次子版本升級,如下所示:

12 月

1 月

2 月

3 月

4 月

5 月

6 月

7 月

8 月

9 月

10 月

11 月

12 月

1 月

2 月

3 月

4 月

5 月

6 月

7 月

8 月

9 月

10 月

11 月

12 月

1 月

2 月

3 月

1.14 升級
1.15 升級
1.16 升級
1.28 升級
1.29 升級

如果您需要較長的驗證時間來驗證新的子版本,以及較短的維護期間來將叢集升級至新的子版本,這項規定就會造成挑戰。為克服這些挑戰,您可以使用略過版本升級,每八個月升級一次叢集,而非每四個月升級一次,讓叢集保持在支援期間內。下表顯示略過 1.15 版升級作業,代表您在八個月後才升級,而非四個月。

12 月

1 月

2 月

3 月

4 月

5 月

6 月

7 月

8 月

9 月

10 月

11 月

12 月

1 月

2 月

3 月

4 月

5 月

6 月

7 月

8 月

9 月

10 月

11 月

12 月

1 月

2 月

3 月

1.14 升級
1.15
1.16 升級
1.28
1.29

升級節點集區時,如果略過一個子版本,就能減少升級次數,同時維持在支援的版本。此外,您也不需要驗證略過的子版本,因為控制層只會暫時使用該版本。

維護期間較短

使用略過版本升級功能,就不必延長維護期間。升級節點集區時,略過子版本所需的時間與升級至下一個子版本相同,因為節點集區中的每個節點都會清空並重新建立一次。因此,跳過版本升級可節省整體時間,並減少工作負載中斷。

摘要

總之,跳過版本升級有下列好處:

  • 將叢集升級至支援的版本:Google Distributed Cloud 支援最近的三個子版本。如果叢集使用不支援的版本,視叢集版本而定,在升級節點集區時略過子版本,可讓叢集以較少的升級次數升級至支援的版本。

  • 節省時間:升級節點集區時,略過子版本所需的時間,與將節點集區升級至下一個子版本所需的時間相同。因此,跳過版本升級所需的時間,大約是升級節點集區兩次的一半。同樣地,跳過版本升級只有一個驗證時間範圍,而一般升級則有兩個。

  • 減少中斷:升級間隔時間更長,升級和驗證時間更短,代表工作負載執行時間更長,中斷次數更少。

在升級期間控管控制層和節點集區版本

在使用者叢集設定檔中,nodePools[i].gkeOnPremVersion 欄位可讓特定節點集區使用與頂層 gkeOnPremVersion 欄位不同的版本。變更 nodePools[i].gkeOnPremVersion 欄位的值,即可控制執行 gkectl upgrade cluster 時升級節點集區的時間。如果您未在設定 檔中加入 nodePools[i].gkeOnPremVersion,或將該欄位設為空字串,節點集區會升級 至您在 gkeOnPremVersion 中指定的相同目標版本。

略過版本升級序列

升級管理員和使用者叢集的順序,取決於要升級至哪個叢集版本,也就是「目標版本」:

1.32 以上

如果目標版本為 1.32 以上,請使用這個序列。假設使用者叢集控制層和所有節點集區都採用子版本 1.N。大致來說,使用略過版本升級功能將叢集從 1.N 升級至 1.N+2 的運作方式如下:

  1. 將管理員叢集從 1.N 版升級至中繼版本 1.N+1。
  2. 將管理員叢集從中繼版本 1.N+1 升級至目標版本 1.N+2。
  3. 僅將使用者叢集控制層從來源版本 1.N 升級至中繼版本 1.N+1。將節點集區保留在來源版本。控制層必須一次升級一個子版本,因此需要中繼版本。
  4. 將控制層和節點集區升級至目標版本 1.N+2。

1.31

如果使用者叢集版本為 1.29,則目標版本為 1.31,請使用這個特殊序列。如果使用者叢集版本為 1.29,管理該使用者叢集的管理員叢集版本可能是 1.16、1.28 或 1.29。

  1. 如果管理員叢集版本為 1.16,請升級至 1.28。
  2. 如果管理員叢集版本為 1.28,請升級至 1.29。
  3. 僅將使用者叢集控制層從來源版本 1.29 升級至中繼版本 1.30。將節點集區保留在來源版本。控制層一次只能升級一個子版本,因此需要中繼 1.30 版。
  4. 將管理員叢集從 1.29 版升級至中繼版本 1.30。
  5. 將管理員叢集升級至目標版本 1.31。
  6. 將使用者叢集控制層和節點集區升級至目標版本 1.31。

1.30 以下版本

如果目標版本為 1.30 以下,請使用這個序列。

假設使用者叢集控制層和所有節點集區都採用子版本 1.N。大致來說,使用略過版本升級功能將叢集從 1.N 升級至 1.N+2 的運作方式如下:

  1. 僅將控制層從來源版本 1.N 升級至中繼版本 1.N+1。將節點集區保留在來源版本。控制層必須一次升級一個子版本,因此需要中繼版本。
  2. 將控制層和節點集區升級至目標版本 1.N+2。

執行跳過版本升級

本節說明如何執行略過版本升級。

事前準備

  1. 確認叢集的目前版本 (來源版本) 為 1.16 以上版本。請務必檢查控制層 (gkeOnPremVersion) 和所有節點集區 (nodePools[i].gkeOnPremVersion) 的版本。

  2. 在 1.29 以上版本中,伺服器端預檢預設為啟用。請務必檢查防火牆規則,並視需要進行變更。

  3. 如要升級至 1.28 以上版本,您必須啟用 kubernetesmetadata.googleapis.com,並將 kubernetesmetadata.publisher Identity and Access Management (IAM) 角色授予記錄/監控服務帳戶。詳情請參閱「Google API 和 IAM 需求」。

執行升級

1.32 以上

如果目標版本為 1.32 以上,請使用這個序列。

開始之前,請確認管理員叢集的子版本至少與使用者叢集相同 (1.N)。如果使用者叢集版本為 1.30,管理員叢集版本為 1.28 或 1.29,請逐一升級管理員叢集的子版本,直到升至 1.30 為止。如果您已將管理員叢集升級至 1.N+1 或 1.N+2 (例如在升級其他使用者叢集時),請略過已完成的管理員叢集升級步驟。

  1. 在下列預留位置變數中,定義來源版本 (1.N)、中繼版本 (1.N+1) 和目標版本 (1.N+2)。請以 X.Y.Z-gke.N 格式指定完整版本號碼,例如 1.34.1000-gke.111:

    說明 版本
    取得目前的使用者叢集版本。這是來源版本 (1.N)。 SOURCE_VERSION
    選取中繼版本 (1.N+1)。 INTERMEDIATE_VERSION
    從目標子版本 (1.N+2) 選取建議的修補程式。 TARGET_VERSION
  2. 將管理員工作站和管理員叢集從來源版本 (1.N) 升級至中繼版本 (1.N+1):

    1. 將管理員工作站升級至中繼版本 INTERMEDIATE_VERSION,並等待升級完成。

    2. 將中繼套件中的 OS 映像檔匯入 vSphere:

      gkectl prepare \
          --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-INTERMEDIATE_VERSION.tgz \
          --kubeconfig ADMIN_CLUSTER_KUBECONFIG
      

      將 ADMIN_CLUSTER_KUBECONFIG 替換為管理員叢集 kubeconfig 檔案的路徑。

    3. 將管理員叢集設定檔中的 bundlePath 欄位設為中繼套件:

      bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-INTERMEDIATE_VERSION.tgz"
      
    4. 將管理員叢集升級至中繼版本:

      gkectl upgrade admin \
          --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          --config ADMIN_CLUSTER_CONFIG_FILE
      

      將 ADMIN_CLUSTER_CONFIG_FILE 替換為管理員叢集設定檔的路徑。

  3. 將管理員工作站和管理員叢集從中繼版本 (1.N+1) 升級至目標版本 (1.N+2):

    1. 將管理員工作站升級至目標版本 TARGET_VERSION,並等待升級完成。

    2. 將目標套件中的 OS 映像檔匯入 vSphere:

      gkectl prepare \
          --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
          --kubeconfig ADMIN_CLUSTER_KUBECONFIG
      
    3. 將管理員叢集設定檔中的 bundlePath 欄位設為目標套件:

      bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz"
      
    4. 將管理員叢集升級至目標版本:

      gkectl upgrade admin \
          --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          --config ADMIN_CLUSTER_CONFIG_FILE
      
  4. 僅將使用者叢集控制層從來源版本 (1.N) 升級至中繼版本 (1.N+1):

    1. 在使用者叢集設定檔中進行下列變更:

      • 將 gkeOnPremVersion 欄位設為中繼版本 INTERMEDIATE_VERSION。

      • 將 nodePools[i].gkeOnPremVersion 中的所有 worker 節點集區版本設為來源版本 SOURCE_VERSION。如果叢集有負載平衡器節點集區 (enableLoadBalancer: true),請將其 gkeOnPremVersion 欄位設為空字串 (""),以便與控制層一起升級。

      更新設定檔後,內容應大致如下:

      gkeOnPremVersion: INTERMEDIATE_VERSION
      # Omitted fields
      nodePools:
      - name: pool-1
        gkeOnPremVersion: SOURCE_VERSION
        # Omitted fields
      - name: pool-2
        gkeOnPremVersion: SOURCE_VERSION
        # Omitted fields
      
    2. 升級使用者叢集控制層:

      gkectl upgrade cluster \
          --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          --config USER_CLUSTER_CONFIG_FILE
      

      將 USER_CLUSTER_CONFIG_FILE 替換為使用者叢集設定檔的路徑。

  5. 將使用者叢集控制層和 worker 節點集區升級至目標版本 (1.N+2):

    1. 在使用者叢集設定檔中進行下列變更:

      • 將 gkeOnPremVersion 欄位設為目標版本 TARGET_VERSION。

      • 將每個節點集區的 nodePools[i].gkeOnPremVersion 設為空字串 ("")。

      更新設定檔後,內容應大致如下:

      gkeOnPremVersion: TARGET_VERSION
      # Omitted fields
      nodePools:
      - name: pool-1
        gkeOnPremVersion: ""
        # Omitted fields
      - name: pool-2
        gkeOnPremVersion: ""
        # Omitted fields
      
    2. 升級使用者叢集控制層和節點集區:

      gkectl upgrade cluster \
          --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          --config USER_CLUSTER_CONFIG_FILE
      

1.31

如果使用者叢集版本為 1.29,表示目標版本為 1.31,請使用這個特殊序列。由於版本規則在 1.31 版有所變更,因此必須採用這個順序。

如果使用者叢集版本為 1.29,管理該使用者叢集的管理員叢集版本可能是 1.16、1.28 或 1.29。

  1. 如果管理員叢集為 1.16 版,請按照步驟升級管理員工作站,並將管理員叢集升級至 1.28 版。

  2. 如果管理員叢集為 1.28 版,請按照步驟升級管理員工作站,並將管理員叢集升級至 1.29 版。

  3. 如要節省管理員工作站的空間,請移除下載的套件:

    rm /var/lib/gke/bundles/gke-onprem-vsphere-*.tgz
    

管理員叢集和所有使用者叢集都升級至 1.29 版後,即可開始略過版本升級。

  1. 在下列預留位置變數中,定義來源版本 (1.29)、中繼版本 (1.30) 和目標版本 (1.31)。所有版本都必須是完整版本號碼,格式為 x.y.z-gke.N,例如 1.29.700-gke.110。

    版本
    取得目前使用者叢集的 1.29 版本。這是來源版本。 SOURCE_VERSION
    選擇中繼 1.30 版本。 INTERMEDIATE_VERSION
    選擇 1.31 目標版本。從 1.31 子版本中選取建議的修補程式。 TARGET_VERSION
  2. 將管理員工作站升級至中繼 1.30 版本 INTERMEDIATE_VERSION。等待系統顯示升級成功的訊息。

  3. 安裝對應的套件組合:

    gkectl prepare \
        --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-INTERMEDIATE_VERSION.tgz \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    
  4. 再次升級管理員工作站,但這次要升級至目標 1.31 版本 TARGET_VERSION。等待系統顯示升級成功的訊息。

  5. 安裝對應的套件組合:

    gkectl prepare \
        --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    
  6. 僅將使用者叢集控制層升級至中繼版本,如下所示:

    1. 在使用者叢集設定檔中進行下列變更:

      • 將 gkeOnPremVersion 欄位設為中繼版本 INTERMEDIATE_VERSION。

      • 將 nodePools[i].gkeOnPremVersion 中的所有節點集區版本設為來源版本 SOURCE_VERSION。

      更新設定檔後,內容應大致如下:

      gkeOnPremVersion: INTERMEDIATE_VERSION
      ...
      nodePools:
      - name: pool-1
        gkeOnPremVersion: SOURCE_VERSION
        ...
      - name: pool-2
        gkeOnPremVersion: SOURCE_VERSION
        ...
      
    2. 升級控制層:

      gkectl upgrade cluster \
          --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          --config USER_CLUSTER_CONFIG_FILE
      

      將 USER_CLUSTER_CONFIG 替換為使用者叢集設定檔的路徑。

  7. 將管理員叢集設定檔中的 bundlePath 欄位設為套件的中繼 1.30 版本:

    bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-INTERMEDIATE_VERSION.tgz"
    
  8. 將管理員叢集升級至中繼 1.30 版本:

    gkectl upgrade admin \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config ADMIN_CLUSTER_CONFIG_FILE
    
  9. 將管理員叢集設定檔中的 bundlePath 欄位設為套件的目標 1.31 版本:

    bundlePath: "/var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz"
    
  10. 將管理員叢集升級至目標 1.31 版本:

    gkectl upgrade admin \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
        --config ADMIN_CLUSTER_CONFIG_FILE
    
  11. 請按照下列步驟,將控制層和節點集區升級至目標版本:

    1. 在使用者叢集設定檔中進行下列變更:

      • 將 gkeOnPremVersion 欄位設為目標版本 TARGET_VERSION。

      • 將所有 nodePools[i].gkeOnPremVersion 設為空白字串。

      更新設定檔後,內容應大致如下:

      gkeOnPremVersion: TARGET_VERSION
      ...
      nodePools:
      - name: pool-1
        gkeOnPremVersion: ""
        ...
      - name: pool-2
        gkeOnPremVersion: ""
        ...
      
    2. 升級控制層和節點集區:

      gkectl upgrade cluster \
          --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          --config USER_CLUSTER_CONFIG_FILE
      

1.30 以下版本

如果目標版本為 1.30 以下,請使用這個序列。

  1. 在下列預留位置變數中,定義來源版本 (1.N)、中繼版本 (1.N+1) 和目標版本 (1.N+2)。所有版本都必須是完整版本號碼,格式為 x.y.z-gke.N,例如 1.16.11-gke.25。

    版本
    取得目前的叢集版本。這是來源版本 (1.N)。 SOURCE_VERSION
    選擇中繼版本 (1.N+1)。 INTERMEDIATE_VERSION
    選擇目標版本 (1.N+2)。從目標子版本中選取建議的修補程式。 TARGET_VERSION
  2. 將管理員工作站升級至中繼版本 INTERMEDIATE_VERSION。等待系統顯示升級成功的訊息。

  3. 安裝對應的套件組合:

    gkectl prepare \
        --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-INTERMEDIATE_VERSION.tgz \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    

    將 ADMIN_CLUSTER_KUBECONFIG 替換為管理員叢集 kubeconfig 檔案的路徑。

  4. 再次升級管理員工作站,但這次要升級至目標版本 TARGET_VERSION。等待系統顯示升級成功的訊息。

  5. 安裝對應的套件:

    gkectl prepare \
        --bundle-path /var/lib/gke/bundles/gke-onprem-vsphere-TARGET_VERSION.tgz \
        --kubeconfig ADMIN_CLUSTER_KUBECONFIG
    
  6. 僅將控制層升級至中繼版本,如下所示:

    1. 在使用者叢集設定檔中進行下列變更:

      • 將 gkeOnPremVersion 欄位設為中繼版本 INTERMEDIATE_VERSION。

      • 將 nodePools[i].gkeOnPremVersion 中的所有節點集區版本設為來源版本 SOURCE_VERSION。

      更新設定檔後,內容應大致如下:

      gkeOnPremVersion: INTERMEDIATE_VERSION
      ...
      nodePools:
      - name: pool-1
        gkeOnPremVersion: SOURCE_VERSION
        ...
      - name: pool-2
        gkeOnPremVersion: SOURCE_VERSION
        ...
      
    2. 升級控制層:

      gkectl upgrade cluster \
          --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          --config USER_CLUSTER_CONFIG_FILE
      

      將 USER_CLUSTER_CONFIG 替換為使用者叢集設定檔的路徑。

  7. 請按照下列步驟,將控制層和節點集區升級至目標版本:

    1. 在使用者叢集設定檔中進行下列變更:

      • 將 gkeOnPremVersion 欄位設為目標版本 TARGET_VERSION。

      • 將所有 nodePools[i].gkeOnPremVersion 設為空白字串。

      更新設定檔後,內容應大致如下:

      gkeOnPremVersion: TARGET_VERSION
      ...
      nodePools:
      - name: pool-1
        gkeOnPremVersion: ""
        ...
      - name: pool-2
        gkeOnPremVersion: ""
        ...
      
    2. 升級控制層和節點集區:

      gkectl upgrade cluster \
          --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
          --config USER_CLUSTER_CONFIG_FILE
      

如果沒有其他使用者叢集需要升級,請從管理員工作站移除套件,以節省空間:

rm /var/lib/gke/bundles/gke-onprem-vsphere-*.tgz

後續步驟