升級叢集

本頁面說明如何升級或降級 Google Kubernetes Engine 叢集執行的 Kubernetes 版本。

請參閱版本管理與升級,以瞭解我們如何決定叢集主要執行個體和節點可用的 Kubernetes 版本。如要進一步瞭解叢集,請參閱叢集架構

事前準備

如要為這個工作做好準備,請執行下列步驟:

  • 確認您已啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 確認您已安裝 Cloud SDK
  • 設定預設的專案 ID
    gcloud config set project [PROJECT_ID]
  • 如果您使用區域叢集,請設定預設的運算區域
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 如果您使用地區叢集,請設定預設的運算地區
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud 更新到最新版本:
    gcloud components update

關於升級叢集

叢集的主要執行個體節點會分開升級。

支援的版本

如要尋找可用於升級和降級的受支援 Kubernetes 主要執行個體和節點版本,請執行下列指令:

gcloud container get-server-config

降級叢集

我們不建議您降級叢集。節點可以降級為比主要執行個體版本還舊的「修補程式版本」,不過您無法將次要版本的叢集降級為另一個次要版本。舉例來說,如果叢集正在執行 GKE 1.11.5 版,則您可將這個叢集降級為 1.11.4 版 (若該版本仍可供使用),但無法繼續降級為 1.10.9 版。如果您這麼做,系統會產生如下的錯誤訊息:

ERROR: (gcloud.container.clusters.upgrade) ResponseError: code=400,
message=Master cannot be upgraded to "1.10.9-gke.7": specified version is not
newer than the current version.

如要將叢集降級至先前的修補程式版本,請使用 gcloud 指令列工具來更新叢集主要執行個體版本。

我們會按照支援的版本中的時間表推出 GKE 版本,但版本推出作業需要幾天的時間才會在所有區域執行完畢。您可以使用 gcloud container get-server-config,查看在區域或地區中可用的版本。

您無法將節點集區降級,但您可以建立採用所需版本的新節點集區,然後把工作負載遷移過去。如果您啟用節點集區的節點自動升級功能,節點就會升級到主要執行個體的版本。

將您的資料儲存到永久磁碟

請在升級節點集區之前,確保您要保留的資料都已經儲存在 Pod 中,且該 Pod 必須要使用位於永久磁碟中的永久磁碟區。因為在升級期間,永久磁碟只會遭到卸載,而不是遭到清除,且裡面的資料會在不同的 Pod 之間傳遞。

永久磁碟的使用會受到以下限制:

  • 執行 Pod 的節點必須是 Compute Engine VM
  • 這些 VM 所屬的 Compute Engine 專案和區域,必須與永久磁碟的相同

如要瞭解如何將永久磁碟新增到現有的節點執行個體,請參閱新增永久磁碟或調整永久磁碟的大小

升級主要執行個體

在接下來的幾個小節中,您可以把「升級」替換成「降級」。請務必要在將叢集或節點集區降級之前,瞭解降級叢集的警告

自動升級主要執行個體

Google 會自動升級叢集主要執行個體。如要進一步掌控叢集會升級到哪個版本,請在發布版本中註冊該叢集。

如要進一步瞭解如何管理叢集的 GKE 版本,請參閱版本管理與升級

當新版本推出之後,您隨時可以進行手動升級

手動升級主要執行個體

當您啟動叢集主要執行個體的升級作業之後,會有好幾分鐘的時間無法修改叢集的設定,直到您可以再次存取控制層為止。如果您必須避免在主要執行個體升級期間發生停機的問題,請考慮使用地區叢集

您可以使用 GCP Console 或 gcloud 指令列工具,手動升級主要執行個體。當您將叢集的主要執行個體升級之後,即可將節點升級到相同的版本。如果您已經啟用節點自動升級功能,Google 會在升級控制層之後為您的節點升級。

您沒有辦法 (或沒有必要) 手動為已在發布版本中註冊的叢集升級。

gcloud

如要升級叢集主要執行個體的版本,請先執行下列指令查看可用的版本:

gcloud container get-server-config

如要升級到最新版本,請執行下列指令:

gcloud container clusters upgrade [CLUSTER_NAME] --master

如要升級到非預設的特定版本,請執行下列指令:

gcloud container clusters upgrade [CLUSTER_NAME] --master --cluster-version [CLUSTER_VERSION]

請參閱 gcloud container clusters upgrade 說明文件。

Console

如要手動更新叢集主要執行個體,請執行下列步驟:

  1. 前往 Google Cloud Platform Console 的「Google Kubernetes Engine」選單。

    前往「Google Kubernetes Engine」選單

  2. 選取需要的叢集。

  3. 按一下「Master version」(主要執行個體版本) 旁的 [Upgrade available] (可升級) 連結。

  4. 選取需要的版本,然後按一下 [Change] (變更)

  5. 按一下畫面頂端的箭頭,以返回叢集總覽頁面。

升級節點

當您升級叢集節點時,GKE 會停止將新的 Pod 排定到正在升級的節點上,並嘗試將這些 Pod 重新排定到不同的節點上。系統會重新建立替代節點,並採用與遭替代的節點相同的名稱,就跟其他會重新建立節點的所有事件一樣。

您沒有辦法 (或沒有必要) 手動為其叢集已在發布版本中註冊的節點升級。當您使用發布版本時,叢集與其節點會使用相同的版本,除了在系統自動為叢集與其節點升級的短暫期間以外。

如要進一步瞭解在節點停止運作期間通常會發生什麼事,請參閱關於 Pod 的文章。

只有在所有節點都重新建立完畢且叢集處於所需狀態的情況下,升級作業才算完成。當剛升級的節點向主要執行個體註冊之後,GKE 就會將該節點標記為可排定。

新的節點執行個體會執行所需的 Kubernetes 版本,以及:

節點自動升級功能

新的叢集預設會啟用節點自動升級功能。節點自動升級功能啟用之後,Google 會確保節點上的 GKE 版本會與在主要執行個體上執行的 GKE 版本相同。

如要啟用節點自動升級功能,請參閱自動升級節點說明文件。發布版本能讓您進一步控制每個叢集會接收到的自動升級作業。

手動升級節點

您只能把節點集區的版本升級到主要執行個體的版本,或是升級到仍然可用,且與主要執行個體相容的較舊版本。Kubernetes 保證,主要執行個體會與低於自己兩個次要版本之內的節點相容。舉例來說,Kubernetes 1.13 的主要執行個體就會與 Kubernetes 1.11 的節點相容。

您無法將節點集區降級,但您可以建立採用較舊版本的新節點集區,然後將工作負載遷移過去。

您可以使用 Google Cloud Platform Console 或 gcloud 指令列工具,手動將節點升級至與主要執行個體相容的版本。

您沒有辦法 (或沒有必要) 手動為其叢集已在發布版本中註冊的節點升級。當您使用發布版本時,叢集與其節點會使用相同的版本,除了在系統自動為叢集與其節點升級的短暫期間以外。

gcloud

以下指令可將節點升級為主要執行個體執行的版本:

gcloud container clusters upgrade [CLUSTER_NAME] --node-pool=[NODE-POOL-NAME]

其中 [CLUSTER_NAME] 是要升級的叢集名稱。

如要在節點上指定不同版本的 GKE,請使用選用的 --cluster-version 標記:

gcloud container clusters upgrade [CLUSTER_NAME] --node-pool=[NODE-POOL-NAME] --cluster-version [CLUSTER_VERSION]

其中 [CLUSTER_VERSION] 是節點升級的目標 Kubernetes 版本。例如 --cluster-version=1.7.2cluster-version=latest

如要進一步瞭解如何指定版本,請參閱版本管理與升級說明文件。

詳情請參閱 gcloud container clusters upgrade 說明文件。

Console

如要使用 GCP Console 升級節點集區,請執行下列步驟:

  1. 前往 GCP Console 的「Google Kubernetes Engine」選單。

    前往「Google Kubernetes Engine」選單

  2. 按一下鉛筆形狀的叢集 [Edit] (編輯) 按鈕。

  3. 在「Node Pools」(節點集區) 區段中,展開揭露箭頭以查看要升級的節點集區。

  4. 按一下「Node version」(節點版本) 旁的 [Change] (變更) 連結。

  5. 選取需要的版本,然後按一下 [Change] (變更)

  6. 按一下 [Save] (儲存)

查看節點升級狀態

您可以使用 gcloud beta container operations 查看升級作業的狀態。

如要查看叢集中所有執行中和已完成作業的清單,請執行下列指令:

gcloud beta container operations list

每個作業都會獲派一個「作業 ID」和作業類型,還有開始和結束時間、目標叢集和狀態。清單看起來類似以下範例:

NAME                              TYPE                ZONE           TARGET              STATUS_MESSAGE  STATUS  START_TIME                      END_TIME
operation-1505407677851-8039e369  CREATE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT16:47:57.851933021Z  20xx-xx-xxT16:50:52.898305883Z
operation-1505500805136-e7c64af4  UPGRADE_CLUSTER     us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:40:05.136739989Z  20xx-xx-xxT18:41:09.321483832Z
operation-1505500913918-5802c989  DELETE_CLUSTER      us-west1-a     my-cluster                          DONE    20xx-xx-xxT18:41:53.918825764Z  20xx-xx-xxT18:43:48.639506814Z

如要取得某個特定作業的詳細資訊,請使用下列指令來指定作業 ID:

gcloud beta container operations describe [OPERATION_ID]

例如:

gcloud beta container operations describe operation-1507325726639-981f0ed6
endTime: '20xx-xx-xxT21:40:05.324124385Z'
name: operation-1507325726639-981f0ed6
operationType: UPGRADE_CLUSTER
selfLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/operations/operation-1507325726639-981f0ed6
startTime: '20xx-xx-xxT21:35:26.639453776Z'
status: DONE
targetLink: https://container.googleapis.com/v1/projects/.../kubernetes-engine/docs/zones/us-central1-a/clusters/...
zone: us-central1-a

取消節點升級

您可隨時取消升級。當您取消升級時:

  • 已開始升級作業的節點會完成升級
  • 尚未開始升級的節點不會進行升級
  • 「已成功完成」升級作業的節點不會受到影響,也不會復原到之前的版本

首先,請使用下列指令取得升級作業的「作業 ID」

gcloud container operations list

然後,請執行下列指令來取消升級:

gcloud beta container operations cancel [OPERATION_ID]

請參閱 gcloud container operations cancel 說明文件。

將已升級的節點復原

節點集區升級失敗或已取消升級時,您可以復原到之前的 Kubernetes 版本。節點集區成功升級後就不能復原。尚未開始升級的節點不受影響。

如要復原升級,請執行下列指令:

gcloud container node-pools rollback [POOL_NAME] --cluster [CLUSTER_NAME]

其中:

  • [POOL_NAME] 是要復原的節點集區名稱
  • [CLUSTER_NAME] 是要復原的節點集區所屬的叢集名稱
  • [COMPUTE_ZONE] 是您專案的運算區域

請參閱 gcloud container node-pools rollback 說明文件。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件