排解叢集自動配置器無法向上擴充的問題

如果 Google Kubernetes Engine (GKE) 中的 Pod 卡在 Pending 狀態,且未新增節點,通常表示叢集自動配置器的擴充功能發生問題。這項問題可能會導致應用程式無法擴充以滿足需求、延遲部署作業,以及影響服務可用性。

您可以使用這個頁面診斷及解決常見問題,避免叢集自動配置器無法新增節點。修正這些問題後,Kubernetes 排程器就能及時安排工作負載,並協助叢集適應增加的負載。

應用程式開發人員需要確保應用程式和服務能可靠地排程及執行,而平台管理員和操作人員則負責確保叢集能動態佈建資源,以滿足工作負載需求並維持服務水準,因此這項資訊對他們來說非常重要。如要進一步瞭解 Google Cloud 內容中提及的常見角色和工作範例,請參閱「常見的 GKE 使用者角色和工作」。

瞭解叢集自動配置器何時會擴充節點

在進行疑難排解步驟之前,建議您先瞭解叢集自動配置器何時會嘗試擴充節點。只有在現有資源不足時,叢集自動配置器才會新增節點。

叢集自動配置器每 10 秒會檢查是否有無法排程的 Pod。如果 Kubernetes 調度器因資源不足、節點限制或 Pod 需求未滿足,而無法將 Pod 放在任何現有節點上,Pod 就會變成無法指派。

當叢集自動配置器發現無法指派的 Pod 時,會評估新增節點是否能讓 Pod 順利指派。如果新增節點可讓 Pod 排定,叢集自動配置器就會在代管執行個體群組 (MIG) 中新增節點。Kubernetes 排程器接著可以在新佈建的節點上排定 Pod。

檢查是否有無法排定的 Pod

如要判斷叢集是否需要向上擴充,請檢查是否有未排定的 Pod:

  1. 前往 Google Cloud 控制台的「Workloads」(工作負載) 頁面。

    前往「Workloads」(工作負載)

  2. 在 「Filter」(篩選器) 欄位中,輸入 unschedulable,然後按下 Enter 鍵。

    如果畫面上列出任何 Pod,表示有無法排定的 Pod。如要排解無法排程的 Pod 問題,請參閱「錯誤:Pod 無法排程」。解決 Pod 無法排程的根本原因,通常就能讓叢集自動配置器向上擴充。如要找出並解決叢集自動配置器特有的錯誤,請參閱下列各節。

    如果沒有列出任何 Pod,叢集自動配置器就不需要向上擴充,且會正常運作。

檢查先前是否有無法排定的 Pod

如要調查叢集自動配置器過去失敗的原因,請檢查先前無法排定的 Pod:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往 Logs Explorer

  2. 指定要查看的記錄項目日期範圍。

  3. 在查詢窗格中輸入下列查詢:

    logName="projects/PROJECT_ID/logs/events"
    jsonPayload.source.component="default-scheduler"
    jsonPayload.reason="FailedScheduling"
    

    將 PROJECT_ID 替換為專案 ID。

  4. 點選「執行查詢」。

    如果畫面上列出任何結果,代表在您指定的日期範圍內,有無法指派的 Pod。

確認問題是否由限制造成

確認有未排定的 Pod 後,請確認叢集自動配置器的問題並非由叢集自動配置器的限制所造成。

分析 Cloud Monitoring 指標,找出擴充問題

GKE 叢集自動配置器會將指標公開至 Cloud Monitoring,提供決策相關洞察資訊,尤其是與 ComputeClasses 相關的決策。這些指標適用於 GKE 1.37 以上版本,包括:

  • 待處理 Pod:kubernetes.io/autoscaler/cluster_pending_pods_per_ccc 顯示自動配置器嘗試排定的 Pod。
  • 佈建嘗試:kubernetes.io/autoscaler/cluster_node_provisioning_attempts_count_per_ccc 追蹤自動配置器嘗試新增節點的頻率。
  • 佈建失敗:kubernetes.io/autoscaler/cluster_node_provisioning_failed_attempts_count_per_ccc 顯示節點建立失敗的嘗試和原因。

這些指標使用 k8s_entity 資源類型,其中 resource.labels.entity_type 欄位的值為 ComputeClass。resource.labels.entity_name 欄位的值代表 ComputeClass 名稱。如果 entity_name 欄位的值為空字串 (""),則指標適用於與 ComputeClass 無關的叢集自動配置器決策。

使用 Metrics Explorer,依 entity_name 欄位篩選及分組結果。例如,使用 resource.labels.entity_name = "" 字串查看與 ComputeClasses 無關的活動,並使用指標標籤 (例如 reason) 瞭解擴充問題是否為 ComputeClass 專屬。

如需查詢範例,請參閱「監控節點佈建」和「監控待處理的 Pod 狀態」。

查看錯誤

您通常可以透過查看錯誤訊息,診斷擴充問題的原因:

查看通知中的錯誤

如果問題發生在 72 小時內,請在 Google Cloud 控制台查看錯誤通知。這些通知提供寶貴的深入分析資訊,說明叢集自動配置器未向上擴充的原因,並提供解決錯誤的建議,以及查看相關記錄檔以進一步調查。

如要在 Google Cloud 控制台中查看通知,請完成下列步驟:

  1. 在 Google Cloud 控制台中,前往「Kubernetes clusters」(Kubernetes 叢集) 頁面。

    前往「Kubernetes clusters」(Kubernetes 叢集)

  2. 查看「通知」欄。下列通知與擴充問題有關:

    • Can't scale up
    • Can't scale up pods
    • Can't scale up a node pool
  3. 按一下相關通知,即可查看窗格,瞭解問題原因和應變措施建議。

  4. 選用:如要查看這項事件的記錄,請按一下「記錄」。這項操作會將您導向 Logs Explorer,並預先填入查詢,協助您進一步調查資源調度事件。如要進一步瞭解擴充事件的運作方式,請參閱「查看叢集自動配置器事件」。

如果查看通知中的建議後仍有問題,請參閱錯誤訊息表格,取得進一步協助。

查看事件中的錯誤

如果觀察到的問題發生在 72 小時前,請在 Cloud Logging 中查看事件。發生錯誤時,系統通常會記錄在事件中。

如要在 Google Cloud 控制台中查看叢集自動配置器記錄檔,請完成下列步驟:

  1. 在 Google Cloud 控制台中,前往「Kubernetes clusters」(Kubernetes 叢集) 頁面。

    前往「Kubernetes clusters」(Kubernetes 叢集)

  2. 選取要調查的叢集名稱,查看「Cluster details」(叢集詳細資料) 頁面。

  3. 在「Cluster details」(叢集詳細資料) 頁面,點選「Logs」(記錄) 分頁標籤。

  4. 在「記錄」分頁中,按一下「自動配置器記錄」分頁標籤,即可查看記錄。

  5. 選用:如要套用更進階的篩選器來縮小結果範圍,請按一下頁面右側有箭頭的按鈕,在記錄檔探索工具中查看記錄。

如要進一步瞭解擴充事件的運作方式,請參閱「查看叢集自動配置器事件」。如需 Cloud Logging 的使用範例,請參閱下列疑難排解範例。

範例:排解 72 小時前發生的問題

以下範例說明如何調查及解決叢集無法擴充的問題。

情境:過去一小時內,某個 Pod 一直標示為無法指派。叢集自動配置器未佈建任何新節點來排定 Pod。

解決方法:

  1. 由於問題發生在 72 小時前,您會使用 Cloud Logging 調查問題,而不是查看通知訊息。
  2. 在 Cloud Logging 中,您可以找到叢集自動配置器事件的記錄詳細資料,如「查看事件中的錯誤」所述。
  3. 您在 triggeringPods 欄位中搜尋包含要調查的 Pod 的 scaleUp 事件。您可以篩選記錄項目,包括依特定 JSON 欄位值篩選。詳情請參閱「進階記錄查詢」。

  4. 找不到任何擴充事件。不過,如果您這麼做,可以嘗試找出與 scaleUp 事件包含相同 eventId 的 EventResult。接著,您可以查看 errorMsg 欄位,並參閱可能的 scaleUp 錯誤訊息清單。

  5. 由於您未找到任何 scaleUp 事件,因此繼續搜尋 noScaleUp 事件,並查看下列欄位:

    • unhandledPodGroups:包含 Pod (或 Pod 控制器) 的相關資訊。
    • reason:提供全域原因,說明為什麼向上擴充可能遭到封鎖。
    • skippedMigs:提供略過某些 MIG 的原因。
  6. 您找到 Pod 的 noScaleUp 事件,且 rejectedMigs 欄位中的所有 MIG 都有相同的 "no.scale.up.mig.failing.predicate" 原因訊息 ID,並包含兩個參數:"NodeAffinity" 和 "node(s) did not match node selector"。

解析度:

查看錯誤訊息清單後,您發現叢集自動配置器無法向上擴充節點集區,因為待處理 Pod 的排程述詞失敗。參數是失敗述詞的名稱和失敗原因。

為解決這個問題,您查看 Pod 的資訊清單,發現其節點選取器與叢集中的任何 MIG 都不相符。您從 Pod 的資訊清單中刪除選取器,並重新建立 Pod。叢集自動配置器會新增節點,並排定 Pod。

解決擴充錯誤

如果您使用自訂 ComputeClass,且擴充問題與 ComputeClass 中定義的特定節點設定有關,請參閱「排解自訂 ComputeClass 問題」。

找出錯誤後,請參閱下表,瞭解錯誤原因和解決方法。

ScaleUp 錯誤

您可以在對應的 eventResult 事件中,找到 scaleUp 事件的事件錯誤訊息,位於 resultInfo.results[].errorMsg 欄位。

如果擴充作業因超出配額而失敗,則會發生節點建立錯誤,觸發系統輪詢延遲期,最長可達 30 分鐘。詳情請參閱「輪詢間隔時間」。

訊息 詳細資料 參數 緩解措施
"scale.up.error.out.of.resources" 當您嘗試在某個可用區要求新資源,但該可用區目前無法提供 Compute Engine 資源 (例如 GPU 或 CPU),因而無法滿足您的要求時,就會發生資源錯誤。 失敗的 MIG ID。 請按照 Compute Engine 說明文件中的資源可用性疑難排解步驟操作。
"scale.up.error.quota.exceeded" Compute Engine 配額已達上限,無法增加部分代管執行個體群組,因此 scaleUp 事件失敗。 失敗的 MIG ID。 在 Google Cloud 控制台中,查看 MIG 的「Errors」(錯誤) 分頁,瞭解超出哪項配額。確認超出哪項配額後,請按照操作說明要求提高配額。
"scale.up.error.waiting.for.instances.timeout" 代管執行個體群組因逾時而無法向上擴充。 失敗的 MIG ID。 如果執行個體可以啟動,但無法向控制層註冊,請按照「找出無法註冊節點的執行個體」一節的步驟操作。如需其他原因,請參閱「MIG 執行個體未及時顯示」。這通常是暫時性錯誤。 如果錯誤持續發生,請與 Cloud Customer Care 團隊聯絡,以便進一步調查。
"scale.up.error.ip.space.exhausted" 部分代管執行個體群組中的執行個體用盡 IP,因此無法向上擴充。這表示叢集沒有足夠的未分配 IP 位址空間,無法用於新增節點或 Pod。 失敗的 MIG ID。 請按照「Pod 的可用 IP 位址空間不足」中的疑難排解步驟操作。
"scale.up.error.service.account.deleted" 服務帳戶已刪除,因此無法向上擴充。 失敗的 MIG ID。 請嘗試取消刪除服務帳戶。 如果上述程序無法解決問題,請與 Cloud Customer Care 團隊聯絡,以便進一步調查。

noScaleUp 事件的原因

如果叢集內有無法排定的 Pod,且叢集自動配置器無法擴充叢集來排定 Pod,系統就會定期發出 noScaleUp 事件。noScaleUp 事件會盡可能提供,但無法涵蓋所有可能情況。

NoScaleUp 頂層原因

noScaleUp 事件的最上層原因訊息會顯示在 noDecisionStatus.noScaleUp.reason 欄位中。訊息會包含叢集自動配置器無法向上擴充叢集的頂層原因。

訊息 詳細資料 緩解措施
"no.scale.up.in.backoff" 不向上擴充,因為向上擴充處於輪詢延遲期間 (暫時封鎖)。如果擴充事件涉及大量 Pod,就可能出現這則訊息。 這則訊息應該只是暫時出現。請過幾分鐘後再查看這項錯誤。 如果持續看到這則訊息,請與 Cloud Customer Care 團隊聯絡,以便進一步調查。

NoScaleUp 頂層自動佈建節點原因

noScaleUp 事件的頂層自動佈建節點原因訊息會顯示在 noDecisionStatus.noScaleUp.napFailureReason 欄位中。訊息中會說明叢集自動配置器無法佈建新節點集區的主要原因。

訊息 詳細資料 緩解措施
"no.scale.up.nap.disabled"

叢集層級未啟用節點自動佈建功能,因此無法向上擴充。

如果停用自動佈建節點功能,當待處理的 Pod 有任何現有節點集區無法滿足的需求時,系統就不會自動佈建新節點。

請檢查叢集設定,並考慮啟用自動佈建節點功能。

NoScaleUp MIG 層級原因

noScaleUp 事件的 MIG 層級原因訊息會顯示在 noDecisionStatus.noScaleUp.skippedMigs[].reason 和 noDecisionStatus.noScaleUp.unhandledPodGroups[].rejectedMigs[].reason 欄位中。訊息會說明叢集自動配置器無法增加特定 MIG 大小的原因。

訊息 詳細資料 參數 緩解措施
"no.scale.up.mig.skipped" 模擬期間略過 MIG,因此無法向上擴充。 略過 MIG 的原因 (例如缺少 Pod 需求)。 查看錯誤訊息中的參數,並解決 MIG 遭到略過的原因。
"no.scale.up.mig.failing.predicate" 無法排定待處理 Pod 的述詞,因此無法擴充節點集區。 失敗述詞的名稱和失敗原因。 查看 Pod 規定,例如相依性規則、taint 或容許條件,以及資源需求。

NoScaleUp Pod 群組層級自動佈建節點原因

noScaleUp 事件的 Pod 群組層級自動佈建節點原因訊息會顯示在 noDecisionStatus.noScaleUp.unhandledPodGroups[].napFailureReasons[] 欄位中。訊息會說明叢集自動配置器無法佈建新節點集區,來排定特定 Pod 群組的原因。

訊息 詳細資料 參數 緩解措施
"no.scale.up.nap.pod.gpu.no.limit.defined" 待處理的 Pod 有 GPU 要求,但未在叢集層級定義 GPU 資源限制,因此自動佈建節點功能無法佈建任何節點群組。 要求的 GPU 類型。 查看待處理 Pod 的 GPU 要求,並更新叢集層級自動佈建節點設定的 GPU 限制。
"no.scale.up.nap.pod.gpu.type.not.supported" Pod 要求不明的 GPU 類型,因此自動佈建節點功能未佈建任何節點群組。 要求的 GPU 類型。 檢查待處理 Pod 的 GPU 類型設定,確保符合支援的 GPU 類型。
"no.scale.up.nap.pod.zonal.resources.exceeded" 節點自動佈建功能並未針對這個可用區內的 Pod 佈建任何節點群組,因為這麼做會違反整個叢集的資源上限、超出可用區內的可用資源,或沒有符合要求的機型。 考量區域的名稱。 查看及更新整個叢集的資源上限、Pod 資源要求,或自動佈建節點的可用可用區。
"no.scale.up.nap.pod.zonal.failing.predicates" 由於述語不能正常運作,自動佈建節點功能並未針對這個可用區中的 Pod 佈建任何節點群組。 考量區域的名稱,以及述詞失敗的原因。 查看待處理 Pod 的需求,例如相依性規則、taint、容許條件或資源需求。

進一步調查

下列各節說明如何使用 Logs Explorer 和 gcpdiag,進一步瞭解錯誤。

在 Logs Explorer 中調查錯誤

如要進一步調查錯誤訊息,請查看錯誤專屬的記錄:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往 Logs Explorer

  2. 在查詢窗格中輸入下列查詢:

    resource.type="k8s_cluster"
    log_id("container.googleapis.com/cluster-autoscaler-visibility")
    jsonPayload.resultInfo.results.errorMsg.messageId="ERROR_MESSAGE"
    

    將 ERROR_MESSAGE 替換為要調查的訊息。例如:scale.up.error.out.of.resources。

  3. 點選「執行查詢」。

使用 gcpdiag 對部分錯誤進行偵錯

gcpdiag 是在 Google Cloud技術工程師支援下建立的開放原始碼工具。這項產品並未獲得官方支援。 Google Cloud

如果看到下列任一錯誤訊息,可以使用 gcpdiag 協助排解問題:

  • scale.up.error.out.of.resources
  • scale.up.error.quota.exceeded
  • scale.up.error.waiting.for.instances.timeout
  • scale.up.error.ip.space.exhausted
  • scale.up.error.service.account.deleted

如需所有 gcpdiag 工具旗標的清單和說明,請參閱 gcpdiag 使用說明。

解決複雜的擴充錯誤

以下各節可協助您解決需要多個步驟,或沒有叢集自動配置器相關事件訊息的錯誤。

Pod 不適合節點

問題:

Pod 仍處於 Pending 狀態,並顯示 PodUnschedulable 錯誤訊息,或叢集顯示 Pods unschedulable 錯誤訊息,且叢集自動配置器未向上擴充來新增節點。

原因:

只有在機型為待處理 Pod 提供足夠的資源 (例如 CPU、GPU、記憶體和儲存空間) 時,叢集自動配置器才會將節點新增至節點集區。如果 Pod 的資源要求超過單一節點的資源,叢集自動配置器就不會向上擴充,因為 Pod 仍無法容納在新節點中。

此外,節點的可分配資源少於總資源,因為系統元件會保留部分資源。如要進一步瞭解 GKE 如何計算可分配的資源,請參閱「節點可分配資源」。

解析度:

如要檢查 Pod 的資源要求是否超出節點提供的資源,並解決問題,請完成下列步驟。這個範例會檢查 CPU 資源,但同樣的步驟也適用於 GPU、記憶體和儲存空間資源:

  1. 前往 Google Cloud 控制台的「Workloads」(工作負載) 頁面。

    前往「Workloads」(工作負載)

  2. 按一下「PodUnschedulable」錯誤訊息。

  3. 在「Details」(詳細資料) 窗格中,按一下 Pod 名稱。如果有多個 Pod,請從第一個 Pod 開始,並對每個 Pod 重複下列程序。

  4. 在「Pod details」(Pod 詳細資料) 頁面上,按一下「YAML」分頁標籤。

  5. 請記下 Pod 中每個容器的資源要求,以找出資源要求總量。舉例來說,在下列 Pod 設定中,Pod 需要 2 個 vCPU:

    resources:
      limits:
        cpu: "3"
      requests:
        cpu: "2"
    
  6. 查看含有未排程 Pod 的叢集節點集區詳細資料:

    1. 在 Google Cloud 控制台中,前往「Kubernetes clusters」(Kubernetes 叢集) 頁面。

      前往「Kubernetes clusters」(Kubernetes 叢集)

    2. 按一下顯示 Pods unschedulable 錯誤訊息的叢集名稱。

    3. 在「Cluster details」(叢集詳細資料) 頁面中,按一下「Nodes」(節點) 分頁標籤。

    4. 在「Node pools」(節點集區) 區段中,記下「Machine type」(機器類型) 欄中的值,例如 n1-standard-1。

  7. 比較資源要求與機器類型提供的 vCPU。舉例來說,如果 Pod 要求 2 個 vCPU,但可用節點使用 n1-standard-1 機型,則節點只有 1 個 vCPU。在這種設定下,叢集自動配置器不會觸發向上擴充,因為 Pod 仍無法容納在新節點中。如要進一步瞭解可用的機型,請參閱 Compute Engine 說明文件中的機器家族資源和比較指南。

  8. 請根據工作負載需求解決不相符的問題:

    • 如果 Pod 需要要求的資源:建立節點集區,並使用可支援 Pod 資源要求的機型。
    • 如果 Pod 的資源要求不正確:請更新 Pod 的定義,讓 Pod 能容納在現有節點中。

MIG 執行個體未能及時顯示

問題:

您看到下列其中一則錯誤訊息:

  • 在 Google Cloud 控制台中,叢集會顯示下列通知:

    Can't scale up because instances in managed instance groups hosting node pools failed to appear in time
    
  • 在 Logging 中,向上擴充的 eventResult 事件包含下列錯誤訊息:

    scale.up.error.waiting.for.instances.timeout
    

原因:

Compute Engine 無法在 MIG 中建立節點,或新節點無法在擴充作業逾時前向控制層註冊。這個問題可能的原因如下:

  • 節點註冊失敗:Compute Engine 建立節點,但節點未向控制層註冊,原因是一或多項防火牆規則、最近變更私人服務存取權或虛擬私有雲網路對接,或缺少 Identity and Access Management (IAM) 服務帳戶。
  • 超過專案配額:專案超過 CPU、IP 位址或其他資源的配額,因此 MIG 中不會顯示新執行個體。
  • IP 位址不足:子網路沒有足夠的可用 IP 位址,無法建立新節點。
  • 執行個體範本無效:MIG 使用的執行個體範本無效 (例如範本缺少映像檔),導致無法擴充。
  • 資源不足:可用區沒有足夠的 Compute Engine 資源 (例如 GPU 或 CPU),無法建立新節點。
  • 無法存取 API:由於防火牆規則或 VPC Service Controls perimeter,無法存取必要的 API,例如 compute.googleapis.com。
  • 網路延遲:網路延遲時間過長,導致新節點的建立或可用性延遲。

解析度:

  1. 如要找出逾時原因,請列出 MIG 中的執行個體錯誤,然後查看結果:

    • MIG 未列出失敗時的錯誤:Compute Engine 已建立節點,但節點未在逾時前向控制層註冊。在下一個步驟中,請從「Failed node registration」開始。如果節點已註冊,但耗時過長,請參閱「網路延遲」。
    • MIG 會列出失敗時的錯誤:Compute Engine 無法建立節點。請使用錯誤代碼和錯誤訊息,在下一個步驟中找出原因。常見的錯誤代碼包括:

      • QUOTA_EXCEEDED:超出專案配額
      • IP_SPACE_EXHAUSTED:無法使用的 IP 位址
      • ZONE_RESOURCE_POOL_EXHAUSTED:資源不足

      部分錯誤代碼有 _WITH_DETAILS 後置字串,錯誤訊息中會包含更多資訊。如果錯誤訊息回報的資源不存在 (例如來源映像檔),請參閱「執行個體範本無效」項目。

  2. 請根據問題原因,採取對應的解決方法:

    • 節點註冊失敗:請按照「找出節點註冊失敗的執行個體」中的步驟操作。您也可以查看最近的設定變更:

      • 防火牆規則:如要檢查最近是否建立、更新或刪除防火牆規則,請在 Logs Explorer 中執行下列查詢:

        resource.type="gce_firewall_rule"
        log_id("cloudaudit.googleapis.com/activity")
        

        如果變更會封鎖節點與控制層之間或傳送至 Google API 的流量,請更新或取代防火牆規則。如要進一步瞭解必要的連線能力,請參閱「成功註冊節點的必要條件」。

      • IAM 服務帳戶:如要瞭解缺少的服務帳戶,請參閱「ScaleUp 錯誤」表格中的 scale.up.error.service.account.deleted 列。

      • 私人服務連線:如要查看稽核記錄中的近期變更,請參閱「私人服務連線稽核記錄」。

      • 虛擬私有雲網路對等互連:如要檢查最近是否新增、更新或移除對等互連,請在 Logs Explorer 中,針對每個對等互連專案執行下列查詢:

        log_id("cloudaudit.googleapis.com/activity")
        resource.type="gce_network"
        protoPayload.methodName:("compute.networks.addPeering" OR
        "compute.networks.updatePeering" OR
        "compute.networks.removePeering")
        

        如果對接變更中斷了與控制層的連線,請更新對接連線。如果連線已刪除,請參閱「虛擬私有雲網路對等互連連線意外刪除」。

    • 超過專案配額:請參閱「ScaleUp errors」(擴充錯誤) 表格中的 scale.up.error.quota.exceeded 列。

    • 無法使用的 IP 位址:請參閱「ScaleUp 錯誤」表格中的 scale.up.error.ip.space.exhausted 列。

    • 執行個體範本無效:請參閱 Compute Engine 說明文件中的「執行個體範本無效」一節。

    • 資源不足:請參閱「ScaleUp 錯誤」表格中的 scale.up.error.out.of.resources 列。

    • 無法存取的 API:在 Logs Explorer 執行查詢,檢查與防火牆規則或 VPC Service Controls 範圍相關的活動:

      • 如要確認防火牆規則最近是否有所變更,請在「節點註冊失敗」的「防火牆規則」項目中執行稽核記錄查詢。如果您為規則啟用了防火牆規則記錄,也可以執行下列查詢,查看規則拒絕的連線:

        resource.type="gce_subnetwork"
        log_id("compute.googleapis.com/firewall")
        jsonPayload.disposition="DENIED"
        

        如果記錄顯示防火牆規則封鎖了傳送至必要 Google API 的流量,請更新或取代防火牆規則,允許流量通過。如要進一步瞭解網路需求,請參閱「連線至 Google API 和服務的網路必要條件」。

      • 如果您使用 VPC Service Controls,請在 Google Cloud 控制台中選取組織,並在 Logs Explorer 中執行下列查詢,檢查最近是否新增或修改了 perimeter:

        logName="organizations/ORGANIZATION_ID/logs/cloudaudit.googleapis.com%2Factivity"
        protoPayload.serviceName="accesscontextmanager.googleapis.com"
        

        將 ORGANIZATION_ID 替換為組織 ID。

        您也可以新增下列篩選器,尋找 VPC Service Controls perimeter 的更新或建立作業:

        severity=NOTICE
        protoPayload.methodName=("google.identity.accesscontextmanager.v1.AccessContextManager.CreateServicePerimeter"
        OR "google.identity.accesscontextmanager.v1.AccessContextManager.UpdateServicePerimeter")
        

        如果新的或修改後的 perimeter 封鎖了必要 Google API 的存取權,請從稽核記錄擷取 VPC Service Controls 錯誤,找出遭封鎖的服務,並更新 service perimeter 以允許存取。如要進一步瞭解如何在 perimeter 中使用叢集自動配置器,請參閱「在啟用可存取服務和受限制服務的 perimeter 中,自動配置器無法運作」。

    • 網路延遲:暫時性的網路延遲通常會在後續的擴充嘗試中解決。如要解決持續延遲的問題,請參閱 Compute Engine 說明文件中的「排解常見網路問題」。

叢集健康狀態不良,無法向上擴充

問題:

叢集自動配置器會停止所有資源調度作業,且 cluster-autoscaler-status ConfigMap 包含類型為 Warning 的事件,並列出 ClusterUnhealthy 做為原因。

如要查看 cluster-autoscaler-status ConfigMap,請執行下列指令:

kubectl describe configmap cluster-autoscaler-status -n kube-system

原因:

如果叢集自動配置器判定叢集健康狀態不良,就不會向上擴充。叢集自動配置器會根據健康且就緒的節點比例,判斷叢集健康狀態,而非根據控制層健康狀態。如果叢集中有 45% 的節點健康狀態不佳或未就緒,叢集自動配置器會停止所有作業。

如果就緒節點具有前置字串為 ignore-taint.cluster-autoscaler.kubernetes.io/ 的污點,叢集自動配置器也會將該節點視為 NotReady。只要該污點存在,叢集自動配置器就會將節點視為 NotReady。

解析度:

如要解決這個問題,請採取下列其中一項或兩項行動,減少健康狀態不良的節點數量:

  • 調查並修復健康狀態不良或NotReady節點,讓叢集中健康狀態不良的節點少於 45%。
  • 如果就緒節點含有前置字串為 ignore-taint.cluster-autoscaler.kubernetes.io/ 的污點,請移除該污點。

後續步驟