如果 Google Kubernetes Engine (GKE) 中的 Pod 卡在 Pending 狀態,且未新增節點,通常表示叢集自動配置器的擴充功能發生問題。這項問題可能會導致應用程式無法擴充以滿足需求、延遲部署作業,以及影響服務可用性。
您可以使用這個頁面診斷及解決常見問題,避免叢集自動配置器無法新增節點。修正這些問題後,Kubernetes 排程器就能及時安排工作負載,並協助叢集適應增加的負載。
應用程式開發人員需要確保應用程式和服務能可靠地排程及執行,而平台管理員和操作人員則負責確保叢集能動態佈建資源,以滿足工作負載需求並維持服務水準,因此這項資訊對他們來說非常重要。如要進一步瞭解 Google Cloud 內容中提及的常見角色和工作範例,請參閱「常見的 GKE 使用者角色和工作」。
瞭解叢集自動配置器何時會擴充節點
在進行疑難排解步驟之前,建議您先瞭解叢集自動配置器何時會嘗試擴充節點。只有在現有資源不足時,叢集自動配置器才會新增節點。
叢集自動配置器每 10 秒會檢查是否有無法排程的 Pod。如果 Kubernetes 調度器因資源不足、節點限制或 Pod 需求未滿足,而無法將 Pod 放在任何現有節點上,Pod 就會變成無法指派。
當叢集自動配置器發現無法指派的 Pod 時,會評估新增節點是否能讓 Pod 順利指派。如果新增節點可讓 Pod 排定,叢集自動配置器就會在代管執行個體群組 (MIG) 中新增節點。Kubernetes 排程器接著可以在新佈建的節點上排定 Pod。
檢查是否有無法排定的 Pod
如要判斷叢集是否需要向上擴充,請檢查是否有未排定的 Pod:
前往 Google Cloud 控制台的「Workloads」(工作負載) 頁面。
在 「Filter」(篩選器) 欄位中,輸入
unschedulable,然後按下 Enter 鍵。如果畫面上列出任何 Pod,表示有無法排定的 Pod。如要排解無法排程的 Pod 問題,請參閱「錯誤:Pod 無法排程」。解決 Pod 無法排程的根本原因,通常就能讓叢集自動配置器向上擴充。如要找出並解決叢集自動配置器特有的錯誤,請參閱下列各節。
如果沒有列出任何 Pod,叢集自動配置器就不需要向上擴充,且會正常運作。
檢查先前是否有無法排定的 Pod
如要調查叢集自動配置器過去失敗的原因,請檢查先前無法排定的 Pod:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
指定要查看的記錄項目日期範圍。
在查詢窗格中輸入下列查詢:
logName="projects/PROJECT_ID/logs/events" jsonPayload.source.component="default-scheduler" jsonPayload.reason="FailedScheduling"將
PROJECT_ID替換為專案 ID。點選「執行查詢」。
如果畫面上列出任何結果,代表在您指定的日期範圍內,有無法指派的 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 控制台中查看錯誤通知。
- 超過 72 小時的問題:在 Cloud Logging 中查看事件錯誤。
查看通知中的錯誤
如果問題發生在 72 小時內,請在 Google Cloud 控制台查看錯誤通知。這些通知提供寶貴的深入分析資訊,說明叢集自動配置器未向上擴充的原因,並提供解決錯誤的建議,以及查看相關記錄檔以進一步調查。
如要在 Google Cloud 控制台中查看通知,請完成下列步驟:
在 Google Cloud 控制台中,前往「Kubernetes clusters」(Kubernetes 叢集) 頁面。
查看「通知」欄。下列通知與擴充問題有關:
Can't scale upCan't scale up podsCan't scale up a node pool
按一下相關通知,即可查看窗格,瞭解問題原因和應變措施建議。
選用:如要查看這項事件的記錄,請按一下「記錄」。這項操作會將您導向 Logs Explorer,並預先填入查詢,協助您進一步調查資源調度事件。如要進一步瞭解擴充事件的運作方式,請參閱「查看叢集自動配置器事件」。
如果查看通知中的建議後仍有問題,請參閱錯誤訊息表格,取得進一步協助。
查看事件中的錯誤
如果觀察到的問題發生在 72 小時前,請在 Cloud Logging 中查看事件。發生錯誤時,系統通常會記錄在事件中。
如要在 Google Cloud 控制台中查看叢集自動配置器記錄檔,請完成下列步驟:
在 Google Cloud 控制台中,前往「Kubernetes clusters」(Kubernetes 叢集) 頁面。
選取要調查的叢集名稱,查看「Cluster details」(叢集詳細資料) 頁面。
在「Cluster details」(叢集詳細資料) 頁面,點選「Logs」(記錄) 分頁標籤。
在「記錄」分頁中,按一下「自動配置器記錄」分頁標籤,即可查看記錄。
選用:如要套用更進階的篩選器來縮小結果範圍,請按一下頁面右側有箭頭的按鈕,在記錄檔探索工具中查看記錄。
如要進一步瞭解擴充事件的運作方式,請參閱「查看叢集自動配置器事件」。如需 Cloud Logging 的使用範例,請參閱下列疑難排解範例。
範例:排解 72 小時前發生的問題
以下範例說明如何調查及解決叢集無法擴充的問題。
情境:過去一小時內,某個 Pod 一直標示為無法指派。叢集自動配置器未佈建任何新節點來排定 Pod。
解決方法:
- 由於問題發生在 72 小時前,您會使用 Cloud Logging 調查問題,而不是查看通知訊息。
- 在 Cloud Logging 中,您可以找到叢集自動配置器事件的記錄詳細資料,如「查看事件中的錯誤」所述。
您在
triggeringPods欄位中搜尋包含要調查的 Pod 的scaleUp事件。您可以篩選記錄項目,包括依特定 JSON 欄位值篩選。詳情請參閱「進階記錄查詢」。找不到任何擴充事件。不過,如果您這麼做,可以嘗試找出與
scaleUp事件包含相同eventId的EventResult。接著,您可以查看errorMsg欄位,並參閱可能的 scaleUp 錯誤訊息清單。由於您未找到任何
scaleUp事件,因此繼續搜尋noScaleUp事件,並查看下列欄位:unhandledPodGroups:包含 Pod (或 Pod 控制器) 的相關資訊。reason:提供全域原因,說明為什麼向上擴充可能遭到封鎖。skippedMigs:提供略過某些 MIG 的原因。
您找到 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 中調查錯誤
如要進一步調查錯誤訊息,請查看錯誤專屬的記錄:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在查詢窗格中輸入下列查詢:
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。點選「執行查詢」。
使用 gcpdiag 對部分錯誤進行偵錯
gcpdiag 是在 Google Cloud技術工程師支援下建立的開放原始碼工具。這項產品並未獲得官方支援。 Google Cloud
如果看到下列任一錯誤訊息,可以使用 gcpdiag 協助排解問題:
scale.up.error.out.of.resourcesscale.up.error.quota.exceededscale.up.error.waiting.for.instances.timeoutscale.up.error.ip.space.exhaustedscale.up.error.service.account.deleted
如需所有 gcpdiag 工具旗標的清單和說明,請參閱 gcpdiag 使用說明。
解決複雜的擴充錯誤
以下各節可協助您解決需要多個步驟,或沒有叢集自動配置器相關事件訊息的錯誤。
Pod 不適合節點
問題:
Pod 仍處於 Pending 狀態,並顯示 PodUnschedulable 錯誤訊息,或叢集顯示 Pods unschedulable 錯誤訊息,且叢集自動配置器未向上擴充來新增節點。
原因:
只有在機型為待處理 Pod 提供足夠的資源 (例如 CPU、GPU、記憶體和儲存空間) 時,叢集自動配置器才會將節點新增至節點集區。如果 Pod 的資源要求超過單一節點的資源,叢集自動配置器就不會向上擴充,因為 Pod 仍無法容納在新節點中。
此外,節點的可分配資源少於總資源,因為系統元件會保留部分資源。如要進一步瞭解 GKE 如何計算可分配的資源,請參閱「節點可分配資源」。
解析度:
如要檢查 Pod 的資源要求是否超出節點提供的資源,並解決問題,請完成下列步驟。這個範例會檢查 CPU 資源,但同樣的步驟也適用於 GPU、記憶體和儲存空間資源:
前往 Google Cloud 控制台的「Workloads」(工作負載) 頁面。
按一下「
PodUnschedulable」錯誤訊息。在「Details」(詳細資料) 窗格中,按一下 Pod 名稱。如果有多個 Pod,請從第一個 Pod 開始,並對每個 Pod 重複下列程序。
在「Pod details」(Pod 詳細資料) 頁面上,按一下「YAML」分頁標籤。
請記下 Pod 中每個容器的資源要求,以找出資源要求總量。舉例來說,在下列 Pod 設定中,Pod 需要 2 個 vCPU:
resources: limits: cpu: "3" requests: cpu: "2"查看含有未排程 Pod 的叢集節點集區詳細資料:
在 Google Cloud 控制台中,前往「Kubernetes clusters」(Kubernetes 叢集) 頁面。
按一下顯示
Pods unschedulable錯誤訊息的叢集名稱。在「Cluster details」(叢集詳細資料) 頁面中,按一下「Nodes」(節點) 分頁標籤。
在「Node pools」(節點集區) 區段中,記下「Machine type」(機器類型) 欄中的值,例如
n1-standard-1。
比較資源要求與機器類型提供的 vCPU。舉例來說,如果 Pod 要求 2 個 vCPU,但可用節點使用
n1-standard-1機型,則節點只有 1 個 vCPU。在這種設定下,叢集自動配置器不會觸發向上擴充,因為 Pod 仍無法容納在新節點中。如要進一步瞭解可用的機型,請參閱 Compute Engine 說明文件中的機器家族資源和比較指南。請根據工作負載需求解決不相符的問題:
- 如果 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。 - 網路延遲:網路延遲時間過長,導致新節點的建立或可用性延遲。
解析度:
如要找出逾時原因,請列出 MIG 中的執行個體錯誤,然後查看結果:
- MIG 未列出失敗時的錯誤:Compute Engine 已建立節點,但節點未在逾時前向控制層註冊。在下一個步驟中,請從「Failed node registration」開始。如果節點已註冊,但耗時過長,請參閱「網路延遲」。
MIG 會列出失敗時的錯誤:Compute Engine 無法建立節點。請使用錯誤代碼和錯誤訊息,在下一個步驟中找出原因。常見的錯誤代碼包括:
QUOTA_EXCEEDED:超出專案配額IP_SPACE_EXHAUSTED:無法使用的 IP 位址ZONE_RESOURCE_POOL_EXHAUSTED:資源不足
部分錯誤代碼有
_WITH_DETAILS後置字串,錯誤訊息中會包含更多資訊。如果錯誤訊息回報的資源不存在 (例如來源映像檔),請參閱「執行個體範本無效」項目。
請根據問題原因,採取對應的解決方法:
節點註冊失敗:請按照「找出節點註冊失敗的執行個體」中的步驟操作。您也可以查看最近的設定變更:
防火牆規則:如要檢查最近是否建立、更新或刪除防火牆規則,請在 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/的污點,請移除該污點。
後續步驟
- 請參閱 Kubernetes 叢集自動配置器常見問題。
- 觀看 YouTube 影片,瞭解如何排解及解決資源調度問題。
如果說明文件無法解決您的問題,請參閱「取得支援」一文,進一步瞭解如何取得協助,包括下列主題的建議:
- 與 Cloud Customer Care 聯絡,建立客服案件。
- 在 StackOverflow 提問,並使用
google-kubernetes-engine標記搜尋類似問題,向社群尋求支援。您也可以加入#kubernetes-engineSlack 頻道,取得更多社群支援。 - 使用公開 Issue Tracker 提出問題或功能要求。