全部產品
Search
文件中心

Container Service for Kubernetes:擴縮容節點池

更新時間:Oct 11, 2024

ACK叢集通過調整節點池的期望節點數實現節點池擴縮容,將節點數目維持在期望數量。擴容節點池功能可以保證節點數量足夠支撐業務運行,縮容節省成本。擴縮容節點池均可自動化執行,提升了營運效率。

前提條件

節點池擴縮容介紹

期望節點數是指節點池應該維持的節點數量,代表節點池終態的節點數。指定節點池的期望節點數後,節點池將會根據當前節點池內節點數自動觸發擴容或縮容,將節點數目維持在期望數量,無需人工幹預。

擴容節點池

設定期望節點數大於當前節點池的節點數時,系統將觸發節點池擴容。推薦您通過增大期望節點數的方式擴容節點池。在出現彈出節點失敗的情況下,系統也會自動進行重試,直至節點池現有節點數滿足期望節點數。

說明

彈出節點的配置將取決於節點池的配置,具體彈出的執行個體規格和可用性區域與節點池擴縮容策略相關。關於擴縮容策略,請參見擴縮容策略

節點池擴容包含兩個步驟。

  1. 彈出ECS執行個體:ACK節點池底層依賴ESS(Auto Scaling服務)彈出節點。調整期望節點數後,ACK會修改ESS伸縮組期望執行個體數執行擴容,節點池將顯示為擴容中。ESS成功彈出ECS執行個體後,節點池將顯示為已啟用。關於期望執行個體數的更多資訊,請參見期望執行個體數

    重要

    神龍裸金屬GPU執行個體(ecs規格類型系列為ebmgn7、ebmgn7e)不支援自動MIG清理,因此ACK添加該類型節點時會對已有的MIG設定進行重設。由於重設時間不定,可能會出現重設時間過長導致自動添加節點失敗。

  2. 將ECS執行個體添加到叢集:ESS彈出ECS執行個體後,執行個體將自動運行cloud-init指令碼(由ACK維護),對節點進行初始化,並將節點加入到節點池。啟動並執行日誌將儲存到節點/var/log/messages檔案中。您可以登入節點執行grep cloud-init /var/log/messages查看執行日誌。

    說明
    • 如果節點成功加入到節點池,將會自動清除/var/log/messages中的日誌資訊,因此日誌僅作為節點添加到叢集失敗的參考資訊。

    • 如果添加節點到叢集失敗,/var/log/messages中的日誌資訊也將被截取關鍵資訊到Task結果中。您可以單擊目的地組群,在叢集任務頁簽查看原因。

縮容節點池

設定期望節點數小於當前節點池的節點數,系統將觸發節點池的縮容並移除節點。

  • 縮容節點時:

    • 如果節點池擴縮容策略選擇優先順序策略,系統會選擇最新建立的執行個體進行縮容。

    • 如果節點池擴縮容策略選擇均衡分布策略,系統會按照均衡發布策略篩選ECS執行個體的可用性區域,再選擇最新建立的執行個體進行縮容,使移出ECS執行個體後伸縮組各可用性區域的ECS執行個體數量大致相當。

    • 如果節點池擴縮容策略選擇成本最佳化策略,系統縮容時會按照vCPU單價從高到低嘗試移出ECS執行個體。

  • 通到期望節點數縮容節點,即使節點排水失敗,節點仍會被移除。若您對節點排水有強需求,請使用指定節點移除。具體操作,請參見移除節點

  • 縮容節點時,訂用帳戶的ECS執行個體不會被釋放,如果需要釋放訂用帳戶的執行個體,請登入ECS管理主控台,將訂用帳戶的執行個體轉換為隨用隨付的節點後再嘗試釋放。關於如何將訂用帳戶執行個體轉隨用隨付,請參見訂用帳戶轉隨用隨付

操作步驟

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

  3. 在目標節點池列表的操作列,單擊更多 > 擴縮容

  4. (可選)如果您之前沒有為OOS營運編排服務授權,需要進行此步驟。通過建立AliyunOOSLifecycleHook4CSRole角色,為OOS營運編排服務授權。

    1. 單擊AliyunOOSLifecycleHook4CSRole

      說明
      • 如果當前帳號是阿里雲帳號,單擊AliyunOOSLifecycleHook4CSRole即可授權。

      • 如果當前帳號是RAM使用者,請先確保對應的阿里雲帳號已授權AliyunOOSLifecycleHook4CSRole,並為RAM使用者授予AliyunRAMReadOnlyAccess系統策略。具體操作,請參見為RAM使用者授權

    2. 雲資源訪問授權頁面,單擊同意授權

  5. 填寫期望節點數,按頁面提示提交配置。

    • 在節點池列表的狀態列,若顯示擴容中,表明節點池正在擴容中。若顯示已啟用,表明擴容已完成。

      重要

      叢集擴容節點時,如果安全性群組拒絕訪問100.64.0.0/10,會導致節點無法正常加入到叢集。

    • 在節點池列表的狀態列,若顯示移除節點中,表明節點池正在縮容中,若顯示已啟用,表明縮容已完成。

非標操作及處理建議

期望節點數是指節點池應該維持的節點數量。一些非標準操作可能會導致節點池未按照預期擴容,從而帶來資產損失。常見的非標操作及對應建議如下。

重要

不推薦您進行任何非標操作。

非標操作

節點池行為

建議

直接通過kubectl delete node方式移除節點。

期望節點數僅感知ESS伸縮組內ECS執行個體數量,不感知叢集內Node數量。

通過API Server移除節點,由於ECS沒有被釋放,因此節點池節點數不會有任何變化。但由於節點已經移出了叢集,所以節點池節點列表中的節點狀態會顯示為未知

  • 如果您已執行了該操作,您可以在節點池頁面單擊節點池名稱,在節點管理頁簽通過移除節點,將該節點從節點池中釋放。

    說明

    因為節點已經移出了叢集,所以不需要選擇自動排空節點(drain)。請您按需選擇是否同時釋放ECS

  • 以下節點不會被釋放,移除節點後,請登入ECS控制台手動處理。

    • 手動添加到叢集的節點。

    • 訂用帳戶的節點。

通過ECS控制台或者OpenAPI釋放ECS。

節點池會感知到ECS的釋放,並自動彈出新ECS執行個體,補充到期望節點數數量。

  • ACK會通到期望節點數檢測到節點的釋放並補充新的執行個體,造成資產損失。請優先通過ACK控制台移除節點。具體操作,請參見移除節點

  • 以下節點不會被釋放,移除節點後,請登入ECS控制台手動處理。

    • 手動添加到叢集的節點。

    • 訂用帳戶的節點。

通過ESS將ECS執行個體移除伸縮組並且不修改期望執行個體數。

節點池會感知到ECS的釋放,並自動彈出新ECS執行個體,補充到期望節點數數量。

請勿直接動作節點池相關的伸縮組,以免造成節點池行為異常。

訂用帳戶ECS執行個體到期釋放。

節點池會感知到ECS的釋放,並自動彈出新ECS執行個體,補充到期望節點數數量。

ACK會通到期望節點數檢測到節點的釋放並補充新的執行個體,造成資產損失。請及時處理即將到期的ECS執行個體,您可以移除節點,或對訂用帳戶ECS執行個體進行續約。

通過Auto Scaling控制台或OpenAPI手動開啟ESS伸縮組執行個體的健全狀態檢查。

ESS伸縮組開啟健全狀態檢查後,每當檢測到存在不健康執行個體(如停機)時,會自動彈出新的ECS執行個體。

ACK預設不開啟ESS健全狀態檢查,僅在節點被釋放時才會補充新的ECS執行個體。請勿直接動作節點池的ESS伸縮組,否則可能會造成節點池行為異常。

擴縮容失敗錯誤碼及解決方案

在擴縮容節點池過程中,可能會由於庫存等原因造成擴縮容失敗。您可以在叢集列表頁面單擊目的地組群名稱,在叢集任務頁簽查看叢集工作清單,單擊查看原因查看節點池擴容失敗原因。

常見的擴容失敗錯誤碼如下。

錯誤碼

問題原因

解決方案

RecommendEmpty.InstanceTypeNoStock

當前可用性區域下ECS執行個體庫存不足。

嘗試通過節點池編輯功能為節點池增加不同可用性區域交換器(vSwitch)以及配置多種執行個體規格,提高節點建立成功率。

說明

在節點池頁面單擊目標節點池名稱,在基本資料頁簽的伸縮組後面會提示彈性強度。您可以通過彈性強度查看您節點池的擴容成功機率。

NodepoolScaleFailed.FailedJoinCluster

節點添加到ACK叢集失敗。

登入節點執行grep cloud-init /var/log/messages查看執行日誌並擷取錯誤資訊。

InvalidAccountStatus.NotEnoughBalance

您的賬戶餘額不足。

儲值後再進行操作。

InvalidParameter.NotMatch

錯誤資訊Image bootMode BIOS does not match instanceType bootMode表示指定的執行個體規格不支援指定的系統鏡像啟動模式。

修改執行個體規格。

  • 節點池的作業系統、鏡像ID等可通過單擊目標節點池所在行的詳情,在基本資料頁簽查看。

  • 系統鏡像所支援的執行個體規格可以通過OpenAPI查詢。

  • 關於ACK支援的鏡像,請參見作業系統鏡像概述

QuotaExceed.ElasticQuota

在當前地區選擇的執行個體規格建立的ECS數量超出配額上限。

您可以進行如下操作。

  • 選擇其他執行個體規格。

  • 減少當前ECS數量。

  • 前往配額中心申請提高配額上限。

InvalidResourceType.NotSupported

您指定的ECS執行個體類型在當前可用性區域下不支援使用或者無庫存。

通過查詢執行個體規格查詢該可用性區域下的執行個體規格是否存在,並修改節點池的執行個體規格。

InvalidImage.NotSupported

錯誤資訊The specified image does not support vSGX instance.表示節點池的系統鏡像不支援安全增強型執行個體。

修改執行個體規格。

  • 節點池的作業系統、鏡像ID等可通過單擊目標節點池所在行的詳情,在基本資料頁簽查看。

  • 系統鏡像所支援的執行個體規格可以通過OpenAPI查詢。

  • 關於安全增強型執行個體支援的系統鏡像,請參見通過控制台建立

InvalidParameter.NotMatch

錯誤資訊The specified instanceType only support vTPM image.表示指定的系統鏡像不支援安全增強型執行個體。

修改執行個體規格。

  • 節點池的作業系統、鏡像ID等可通過單擊目標節點池所在行的詳情,在基本資料頁簽查看。

  • 系統鏡像所支援的執行個體規格可以通過OpenAPI查詢。

  • 關於安全增強型執行個體支援的系統鏡像,請參見通過控制台建立

QuotaExceeded.PrivateIpAddress

交換器下可用的私人IP地址數量不足。

嘗試為節點池配置更多可用交換器後重試。

InvalidParameter.KmsNotEnabled

您指定的KMS密鑰為非啟用狀態。

請登入Key Management Service控制台檢查密鑰狀態。

InvalidInstanceType.NotSupported

錯誤資訊The specified instanceType is not supported by the image architecture.表示當前執行個體規格不支援指定的系統鏡像類型。

修改執行個體規格。

  • 節點池的作業系統、鏡像ID等可通過單擊目標節點池所在行的詳情,在基本資料頁簽查看。

  • 系統鏡像所支援的執行個體規格可以通過OpenAPI查詢。

  • 關於ACK支援的鏡像,請參見作業系統鏡像概述

InsufficientBalance.CreditPay

您的賬戶餘額不足。

請先儲值再進行操作。

ApiServer.InternalError

錯誤資訊an error on the server (\"Get \\\"https://192.168.xxx.xxx:xxx/api/v1/nodes\\\": dial tcp 192.168.xxx.xxx:xxx: connect: connection refused\") has prevented the request from succeeding表示訪問ACK叢集的API Server失敗。

檢查叢集API Server是否可用或者可訪問。詳細資料,請參見控制台訪問叢集異常問題排查

RecommendEmpty.InstanceTypeNotAuthorized

您指定的執行個體規格需要授權後使用。

請向Elastic Compute Service提交工單申請授權。

Account.Arrearage

您的賬戶餘額不足。

請先儲值再進行操作。

Err.QueryEndpoints

訪問ACK叢集的API Server失敗。

檢查您的叢集API Server是否可用或者可訪問。詳細資料,請參見控制台訪問叢集異常問題排查

RecommendEmpty.DiskTypeNoStock

指定可用性區域下磁碟庫存不足。

嘗試增加節點池的可用性區域(vSwitch),或者更換磁碟類型後重試。

InvalidParameter.KMSKeyId.KMSUnauthorized

沒有授權無法存取金鑰管理服務KMS。

登入ECS管理主控台為ECS配置訪問KMS服務角色AliyunECSDiskEncryptDefaultRole授權。詳細資料,請參見通過RAM角色授予訪問KMS密鑰的許可權

InvalidParameter.Conflict

錯誤資訊The specified disk category (xxxx) is not support the specified instance type.表示指定的執行個體規格不支援指定的雲端硬碟類型。

您可以嘗試更換執行個體規格或者磁碟類型後重試。

NotSupportSnapshotEncrypted.DiskCategory

系統硬碟加密僅支援ESSD類型雲端硬碟。

請更換雲端硬碟類型。關於雲端硬碟類型與加密,請參見建立節點池

ScalingActivityInProgress

當前節點池正在伸縮中,請稍後再操作。

為了避免伸縮活動衝突,請勿直接通過ESS進行節點擴縮容。

Instance.StartInstanceFailed

ECS執行個體啟動失敗。

請稍後嘗試重新操作。排查具體原因,請向Elastic Compute Service提交工單

OperationDenied.NoStock

您選擇的ECS執行個體規格在指定的可用性區域內庫存不足。

您可以選擇其他執行個體規格後重試。

彈性強度會根據即時庫存量化您節點池的擴容成功機率。詳細資料,請參見查看節點池彈性強度

RecommendEmpty.InstanceTypeNoStock

您選擇的ECS執行個體規格在指定的可用性區域內庫存不足。

您可以選擇其他執行個體規格後重試。

彈性強度會根據即時庫存量化您節點池的擴容成功機率。詳細資料,請參見查看節點池彈性強度

NodepoolScaleFailed.WaitForDesiredSizeTimeout

擴容任務逾時。

按照如下操作查看擴容詳情。

  1. 登入Container Service管理主控台,在左側導覽列單擊叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

  3. 單擊目標節點池名稱,然後在伸縮活動頁簽中查看擴容詳情。

ApiServer.TooManyRequests

擴容任務被API Server限流。

擴容任務被API Server限流,請減少API Server請求,或稍後重試。

NodepoolScaleFailed.PartialSuccess

由於庫存原因,部分節點擴容成功。

選擇其他執行個體規格後重試。

彈性強度會根據即時庫存量化您節點池的擴容成功機率。詳細資料,請參見查看節點池彈性強度

相關文檔

  • 如需將叢集中的節點移出叢集,請參見移除節點瞭解具體操作及注意事項。

  • 節點池的營運操作,例如升級節點池、節點自動回復、修複節點池OS CVE漏洞等,請參見節點池營運

  • 節點池相關的最佳實務,例如基於部署集將節點分散部署在不同的物理伺服器上以實現高可用、基於搶佔式執行個體建立節點池等,請參見節點與節點池最佳實務