自動升級節點

本頁面說明如何在 Google Kubernetes Engine (GKE) 中設定節點自動升級功能。

總覽

系統代您更新控制層時,節點自動升級功能可協助您更新叢集中的節點,與叢集控制層版本保持一致。使用 Cloud de Confiance 控制台或 gcloud 指令建立新的叢集或節點集區時,系統預設會啟用節點自動升級功能。

您可以進一步瞭解叢集和節點升級

節點自動升級具有以下優點:

  • 降低管理負擔:當控制層代替您升級時,您不必手動追蹤和更新節點。
  • 更高的安全性:有時系統會發佈新的二進位檔以修正安全性問題。有了自動升級功能,GKE 會確保自動套用安全性更新,保持在最新狀態。
  • 使用方便:提供自動方式,讓節點保持在最新狀態,擁有 Kubernetes 的最新功能。

節點集區啟用自動升級功能後,只要符合選取條件 (請參閱版本資訊),就會排程進行升級。為確保叢集和機群穩定性,我們會在數週內分階段推出這項功能。執行升級時,節點會被清空並重新建立,以符合目前的控制層版本。節點重新建立之後,您先前對該節點 VM 開機磁碟所做的變更便會失效。如要讓重新建立的節點沿用原有變更,請使用 DaemonSet

Alpha 版叢集無法使用節點自動升級功能。如果您使用的叢集含有 Windows Server 節點集區,請先參閱「升級 Windows Server 節點集區」,再啟用節點自動升級功能。

事前準備

開始之前,請務必先完成下列工作:

  • 啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 如要使用 Google Cloud CLI 執行這項工作,請安裝初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行 gcloud components update 指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
  • 確認您有現有的標準叢集。使用 Cloud de Confiance 控制台或 Google Cloud CLI 指令建立新叢集時,系統預設會啟用節點自動升級功能。如要建立標準叢集,請參閱「建立區域叢集」。

檢查現有節點集區的自動升級狀態

節點集區預設會啟用節點自動升級功能。

依據排除的維護時間設定

如要為叢集中的所有節點集區停用節點自動升級功能,請使用範圍為「No minor or node upgrades」(不升級次要版本或節點) 的叢集維護排除條件。或者,如果叢集的部分節點集區要停用自動升級功能,但其他節點集區仍要啟用,請使用節點集區維護排除項目。如果叢集已註冊發布管道,可以使用任一類型的排除條件。如要查看是否已設定這些排除時段,請查看叢集的維護政策

如節點自動升級欄位所設定

雖然這是舊版設定,不建議使用,但您也可以為個別節點集區設定 autoUpgrade 欄位,停用節點自動升級功能。您可以使用 Cloud de Confiance 控制台或 gcloud 指令,透過這個欄位檢查節點集區是否已啟用或停用自動升級功能。

gcloud

如要檢查節點集區的自動升級狀態,請執行下列指令:

gcloud container node-pools describe NODE_POOL_NAME \
  --cluster CLUSTER_NAME \
  --location CONTROL_PLANE_LOCATION

更改下列內容:

  • NODE_POOL_NAME:節點集區的名稱。
  • CLUSTER_NAME:節點集區所在叢集的名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供區域,或為區域叢集提供可用區。

在輸出內容中找出 autoUpgrade 欄位,即可查看節點集區是否啟用或停用自動升級功能。

management:
  autoUpgrade: true

控制台

如要檢查節點集區的自動升級狀態,請執行下列操作:

  1. 前往 Cloud de Confiance 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下要查看的叢集名稱。

  3. 按一下「Nodes」(節點) 分頁標籤。

  4. 在「Node Pools」(節點集區) 下方,按一下要查看的節點集區名稱。

  5. 在「Node pool details」(節點集區詳細資料) 頁面中,查看「管理」下「自動升級」欄位的值。

啟用現有節點集區的節點自動升級功能

使用 Cloud de Confiance 控制台或 gcloud 指令建立新叢集時,系統預設會啟用節點自動升級功能。

如果節點自動升級功能已停用,您可以啟用。請注意,這不會影響維護排除時段的設定,建議您使用維護排除時段,避免 GKE 自動升級節點。如要進階控制節點何時可自動升級,建議您設定維護期間和排除的時段

請按照下列操作說明啟用節點自動升級功能:

gcloud

如要啟用現有節點集區的自動升級功能,請執行下列指令:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --enable-autoupgrade

更改下列內容:

  • NODE_POOL_NAME:節點集區的名稱。
  • CLUSTER_NAME:節點集區所在叢集的名稱。
  • CONTROL_PLANE_LOCATION:叢集控制層的 Compute Engine 位置。為地區叢集提供區域,或為區域叢集提供可用區。

控制台

如要啟用現有節點集區的自動升級功能,請執行下列步驟:

  1. 前往 Cloud de Confiance 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下您要修改的叢集名稱。

  3. 按一下「Nodes」(節點) 分頁標籤。

  4. 在「Node Pools」(節點集區) 下方,按一下要修改的節點集區名稱。

  5. 在「Node pool details」(節點集區詳細資料) 頁面中,按一下 「Edit」(編輯)

  6. 在「Management」(管理) 下方,勾選「Enable auto-upgrade」(啟用自動升級功能) 核取方塊。

  7. 按一下 [儲存]

查看節點升級狀態

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

查看叢集中所有執行中和已完成的作業清單,最多可顯示過去 12 天的作業 (如果作業少於 5,000 項),或最近 5,000 項作業:

gcloud container operations list \
    --location=CONTROL_PLANE_LOCATION

每個作業都會獲派一個「作業 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 container operations describe OPERATION_ID \
    --location=CONTROL_PLANE_LOCATION

例如:

gcloud 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

如果升級作業已取消或失敗,但部分作業已完成,您可以繼續復原升級作業。

檢查節點集區升級設定

您可以使用 gcloud container node-pools describe 指令,查看節點集區使用的節點升級策略詳細資料。如果是藍綠升級,這項指令也會傳回升級的目前階段

執行下列指令:

gcloud container node-pools describe NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

更改下列內容:

  • NODE_POOL_NAME:要說明的節點集區名稱。
  • CLUSTER_NAME:要說明節點集區的叢集名稱。
  • CONTROL_PLANE_LOCATION:控制層的位置 (區域或地帶),例如 us-central1us-central1-a

這項指令會輸出目前的升級設定。以下範例顯示使用藍綠升級策略時的輸出內容。

upgradeSettings:
  blueGreenSettings:
    nodePoolSoakDuration: 1800s
    standardRolloutPolicy:
      batchNodeCount: 1
      batchSoakDuration: 10s
  strategy: BLUE_GREEN

如果您使用藍綠升級策略,輸出內容也會包含藍綠升級設定和目前中間階段的詳細資料。以下範例顯示檔案可能看起來的樣子:

updateInfo:
  blueGreenInfo:
    blueInstanceGroupUrls:
    - https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/zones/{LOCATION}/instanceGroupManagers/{BLUE_INSTANCE_GROUP_NAME}
    bluePoolDeletionStartTime: {BLUE_POOL_DELETION_TIME}
    greenInstanceGroupUrls:
    - https://www.googleapis.com/compute/v1/projects/{PROJECT_ID}/zones/{LOCATION}/instanceGroupManagers/{GREEN_INSTANCE_GROUP_NAME} 
    greenPoolVersion: {GREEN_POOL_VERSION}
    phase: DRAINING_BLUE_POOL

停用節點自動升級功能

如要手動管理該節點集區的節點升級作業,可以停用現有節點集區的節點自動升級功能。如要為叢集中的所有節點集區停用節點自動升級功能,建議使用範圍為「不升級次要版本或節點」的叢集維護排除項目。如果叢集的部分節點集區要停用自動升級功能,請使用節點集區維護排除項目。如果叢集已註冊發布管道,可以使用任一類型的排除條件。

雖然我們不建議使用這個方法,但您也可以按照本節的指示,為個別節點集區停用節點自動升級功能。

停用節點自動升級功能前,請先瞭解下列注意事項。

停用節點自動升級功能前的注意事項

如果您使用任何可用方法為節點集區停用節點自動升級功能,GKE 就不會更新節點版本,除非在支援期結束時更新至下一個子版本。選擇停用節點自動升級功能,也不會阻止 GKE 升級叢集的控制層。

停用後,系統不會更新版本,但仍會執行部分維護工作

停用節點自動升級功能只會阻止 GKE 更新節點版本,但不會阻止 GKE 啟動其他維護工作。舉例來說,即使停用節點自動升級功能,只要在叢集上觸發 IP 位址輪替Cloud DNS啟用網路政策PSC 遷移,系統就會重新建立所有節點。如要控管維護時間點,請使用維護期間和排除時段

停用後,您必須負責確保控制層節點相容性

如果停用節點集區的節點自動升級功能,您應確保叢集節點執行的版本與叢集的控制層版本相容,並遵守 GKE 版本差異政策。停用節點自動升級功能後,節點集區只會停止升級,直到標準支援期結束為止。如果節點執行的版本已停用,GKE 會升級節點,確保叢集健康狀態。

如要瞭解終止支援的確切時間,請參閱「預估發布管道時間表」。如果節點執行的版本不受支援,系統可能不會在支援期限結束後立即升級,實際時間可能因 Google 的決定而異。

停用不會停止執行中的作業

停用節點自動升級功能後,節點集區中節點的升級作業不會停止或取消。如要取消或停止進行中的升級作業,請按照「取消節點升級」一文的說明操作。如果發現工作負載在升級的節點上失敗,且想避免進一步中斷,取消節點升級就很有幫助。

如果整個節點集區的升級作業已完全完成,則無法復原或取消升級。如要降級節點集區,請參閱「降級節點集區」。

停用現有節點集區的節點自動升級功能

如要停用現有節點集區的節點自動升級功能,建議使用節點集區維護排除時段。如需操作說明,請參閱「為現有節點集區新增節點集區維護排除項目」。如要為叢集中的所有節點集區停用節點自動升級功能,請使用範圍為「不升級次要版本或節點」的叢集維護排除項目。

您也可以按照下列操作說明,停用現有節點集區的節點自動升級功能,但我們不建議這麼做。

gcloud

若要停用現有節點集區的自動升級功能,請執行下列指令:

gcloud container node-pools update NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --no-enable-autoupgrade

主控台

若要停用現有節點集區的自動升級功能,請執行下列步驟:

  1. 前往 Cloud de Confiance 控制台的「Google Kubernetes Engine」頁面。

    前往「Google Kubernetes Engine」

  2. 在叢集清單中,按一下您要修改的叢集名稱。

  3. 按一下「Nodes」(節點) 分頁標籤。

  4. 在「Node Pools」(節點集區) 下方,按一下要修改的節點集區名稱。

  5. 在「Node pool details」(節點集區詳細資料) 頁面中,按一下 「Edit」(編輯)

  6. 在「管理」下方,取消勾選「啟用自動升級功能」核取方塊。

  7. 再按一次 [Save] (儲存) 即可修改叢集。

建立啟用節點自動升級功能的節點集區

GKE 節點集區預設會啟用自動升級功能。不過,如要明確指定這項預設設定,請按照下列指示操作:

gcloud

如要建立啟用自動升級功能的節點集區,請在 gcloud container node-pools create 指令中指定 --enable-autoupgrade 旗標:

gcloud container node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location CONTROL_PLANE_LOCATION \
    --enable-autoupgrade

控制台

如需建立叢集和節點集區的操作說明,請參閱「建立叢集」或「新增及管理節點集區」。

接收升級通知

GKE 會將升級通知發布至 Pub/Sub,您可以透過這個管道接收 GKE 發送的叢集相關資訊。

詳情請參閱「接收叢集升級通知」。

變更節點數擴充升級參數

如要進一步瞭解如何變更節點數擴充升級參數,請參閱「設定節點數擴充升級」。

在節點集區升級期間進行控管

在自動升級和手動啟動的節點集區升級期間,您可以採取下列動作。

設定節點集區的並行升級作業

根據預設,GKE 會一次自動升級一個節點集區。如果叢集有多個節點集區,您可以設定並行升級節點集區,縮短升級叢集所需的總時間。如要設定這項功能,請指定 GKE 可同時自動升級的節點集區數量上限。在標準叢集中,這項設定會決定標準節點集區和 Autopilot 代管節點集區的節點升級並行程度。在 Autopilot 叢集中,這項設定會決定節點群組的節點升級並行程度。

使用 gcloud CLI 建立新叢集或更新現有叢集時,可以設定並行限制。確認要同時自動升級的節點集區已啟用自動升級功能

如果叢集已加入自訂階段的推出作業序列 (預先發布版),就無法啟用這項功能。

如要設定節點集區並行升級,請執行下列任一指令:

  • 建立新的叢集,並設定節點集區並行升級:

    gcloud beta container clusters create CLUSTER_NAME \
        --project=PROJECT_NAME
        --location CONTROL_PLANE_LOCATION \
        --node-pool-upgrade-concurrency-config=max-count=MAX_COUNT
    
  • 更新現有叢集,同時升級節點集區:

    gcloud beta container clusters update CLUSTER_NAME \
        --project=PROJECT_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --node-pool-upgrade-concurrency-config=max-count=MAX_COUNT
    

更改下列內容:

  • CLUSTER_NAME:叢集名稱。
  • PROJECT_NAME:專案名稱。
  • LOCATION:叢集的運算位置。
  • MAX_COUNT:可同時升級的節點集區數量上限。這個值必須是介於 1100 之間的整數。如要還原為預設的循序行為,請將這個值設為 1

取消節點集區升級

您可隨時取消升級。如要進一步瞭解取消節點數擴充升級的影響,請參閱「取消節點數擴充升級」。如要進一步瞭解取消藍綠升級的影響,請參閱「取消藍綠升級」。

  1. 取得升級作業的作業 ID:

    gcloud container operations list \
          --location=CONTROL_PLANE_LOCATION
    
  2. 取消升級:

    gcloud container operations cancel OPERATION_ID \
          --location=CONTROL_PLANE_LOCATION
    

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

繼續升級節點集區

如要繼續升級,請再次手動啟動升級,並指定原始升級的目標版本。

舉例來說,如果升級失敗,或是您暫停進行中的升級作業,可以再次啟動節點集區的相同升級作業,並指定初始升級作業的目標版本,藉此繼續已取消的升級作業。

如要進一步瞭解繼續升級作業的影響,請參閱「繼續節點數擴充升級」和「藍綠升級」。

如要繼續升級,請使用下列指令:

gcloud container clusters upgrade CLUSTER_NAME \
  --node-pool=NODE_POOL_NAME \
  --location=CONTROL_PLANE_LOCATION \
  --cluster-version VERSION

更改下列內容:

  • NODE_POOL_NAME:要繼續升級的節點集區名稱。
  • CLUSTER_NAME:要繼續升級的節點集區所屬叢集名稱。
  • CONTROL_PLANE_LOCATION:控制層的位置 (區域或地帶),例如 us-central1us-central1-a
  • VERSION:取消升級節點集區的目標版本。

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

復原節點集區升級

您可以復原節點集區,將升級的節點降級至節點集區升級前的原始狀態。

如果進行中的升級已取消、升級失敗,或升級因維護期間逾時而未完成,請使用 rollback 指令。或者,如要指定版本,請按照降級節點集區的操作說明進行。

如要進一步瞭解復原節點集區升級作業的影響,請參閱復原節點數擴充升級復原藍綠升級

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

gcloud container node-pools rollback NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

更改下列內容:

  • NODE_POOL_NAME:要復原節點集區升級的節點集區名稱。
  • CLUSTER_NAME:要復原升級的節點集區叢集名稱。
  • CONTROL_PLANE_LOCATION:控制層的位置 (區域或地帶),例如 us-central1us-central1-a

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

完成節點集區升級

如果您使用藍綠升級策略,可以在浸泡階段完成節點集區升級,略過其餘浸泡時間。

如要瞭解如何完成節點集區升級作業,請參閱「完成節點集區升級作業」。

使用藍綠升級策略時,請執行下列指令來完成升級:

gcloud container node-pools complete-upgrade NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

更改下列內容:

  • NODE_POOL_NAME:要完成升級的節點集區名稱。
  • CLUSTER_NAME:要完成升級的節點集區叢集名稱。
  • CONTROL_PLANE_LOCATION:控制層的位置 (區域或地帶),例如 us-central1us-central1-a

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

後續步驟