![](/img/trans.png)
[英]GKE Instance Metadata pod logging "Unable to sync sandbox" millions of times
[英]GKE Metadata server errors
我有一個啟用了工作負載身份的 GKE。 我們的大多數工作負載都使用 Cloud Storage 或 Cloud logging GCP 包,這意味着實際上使用 Workload 身份進行 GCP 訪問。
最近,我們開始將 Secret Manager 添加到堆棧中,並開始在工作負載啟動時遇到元數據服務器的隨機錯誤。 它發生在不同的框架上。
Python:
File "/venv/lib/python3.8/site-packages/google/auth/compute_engine/credentials.py", line 117, in refresh six.raise_from(new_exc, caught_exc) File "<string>", line 3, in raise_from google.auth.exceptions.RefreshError: ("Failed to retrieve http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/?recursive=true from the Google Compute Enginemetadata service. Status: 404 Response:\nb'Not Found\\n'", <google.auth.transport.requests._Response object at 0x7f3a3084dd60>)
節點JS:
failed to initialize. exiting. Error: 16 UNAUTHENTICATED: Failed to retrieve auth metadata with error: Could not refresh access token: network timeout at: http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token?scopes=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform at Object
我試圖理解為什么會這樣。
首先, 404 Not Found 意味着我們正在嘗試獲取不存在/已刪除的元數據。 問題是它會在幾秒鍾后恢復,所以我不確定到底如何。
根據文檔,有時元數據服務器需要一些時間才能可用,因此之后會出現“恢復”的錯誤。 所以建議在應用程序代碼上添加延遲或使用 init Containers 直到元數據服務器運行。
我想知道這是否真的是最好的方法,向我們所有的工作負載添加一個 init 容器,以及它是否真的是我們的用例,因為錯誤代碼有點誤導。 另外,不太清楚為什么它只在添加秘密管理器時才開始。
這有時是由於元數據服務器上的 OOM 問題而發生的。 您可以使用以下命令檢查運行元數據服務器的 pod 的狀態:
kubectl -n kube-system describe pods <pod_name>
您可以使用以下方法獲取pod_name
:
kubectl get pods --namespace kube-system
。 pod 名稱將以前綴gke-metadata-server-
如果您在描述 pod 時在 output 中看到類似以下內容:
Last State: Terminated
Reason: OOMKilled
那么這將表明OOM問題。
您可以嘗試一些緩解措施:
/etc/kubernetes/addons/
下找到元數據服務器的定義。 如果可以,請更新 memory 以增加它並應用更新的配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.