本文說明如何為 Google Distributed Cloud (僅限軟體) for VMware 中的系統元件設定記錄和監控功能。
預設會啟用 Cloud Logging、Cloud Monitoring 和 Google Cloud Managed Service for Prometheus。
如要進一步瞭解這些選項,請參閱「記錄和監控總覽」。
受控資源
受監控資源是 Google 代表叢集、節點、Pod 和容器等資源的方式。詳情請參閱 Cloud Monitoring 的受監控資源類型說明文件。
如要查詢記錄和指標,您至少需要瞭解下列資源標籤:
project_id
:叢集記錄和監控專案的專案 ID。您在叢集設定檔的stackdriver.projectID
欄位中提供這個值。location
:您要轉送及儲存 Cloud Monitoring 指標的 Google Cloud 區域。您可以在叢集設定檔的stackdriver.clusterLocation
欄位中指定安裝期間的區域。建議您選擇靠近內部部署資料中心的區域。您可以在記錄檔路由器設定中,指定 Cloud Logging 記錄的路由和儲存位置。如要進一步瞭解記錄檔轉送功能,請參閱「轉送和儲存空間總覽」。
cluster_name
:您在建立叢集時選擇的叢集名稱。您可以檢查 Stackdriver 自訂資源,擷取管理員或使用者叢集的
cluster_name
值:kubectl get stackdriver stackdriver --namespace kube-system \ --kubeconfig CLUSTER_KUBECONFIG --output yaml | grep 'clusterName:'
其中
CLUSTER_KUBECONFIG
是管理員叢集或使用者叢集的 kubeconfig 檔案路徑,需要提供叢集名稱。
記錄檔和指標的路由
Stackdriver 記錄轉送程式 (stackdriver-log-forwarder
) 會將每個節點機器的記錄傳送至 Cloud Logging。同樣地,GKE 指標代理程式 (gke-metrics-agent
) 會將每個節點機器的指標傳送至 Cloud Monitoring。傳送記錄和指標前,Stackdriver 運算子 (stackdriver-operator
) 會將 stackdriver
自訂資源中的 clusterLocation
欄位值附加至每個記錄項目和指標,然後再將這些項目和指標傳送至 Google Cloud。此外,記錄和指標會與 stackdriver
自訂資源規格 (spec.projectID
) 中指定的 Google Cloud 專案相關聯。stackdriver
資源會從叢集建立時的 Cluster 資源 clusterOperations
區段中,取得 clusterLocation
和 projectID
欄位的值。stackdriver.clusterLocation
stackdriver.projectID
Stackdriver 代理程式傳送的所有指標和記錄項目都會轉送至全域擷取端點。接著,資料會轉送至最近的可連線區域 Google Cloud 端點,確保資料傳輸的可靠性。
全域端點收到指標或記錄項目後,接下來的動作會因服務而異:
記錄檔轉送的設定方式:記錄端點收到記錄訊息時,Cloud Logging 會透過記錄檔路由器傳送訊息。記錄路由器設定中的接收器和篩選器會決定訊息的轉送方式。您可以將記錄項目轉送至目的地,例如儲存記錄項目的地區 Logging bucket,或是 Pub/Sub。如要進一步瞭解記錄檔路徑的運作方式和設定方法,請參閱「轉送和儲存空間總覽」一文。
在此路由程序中,系統不會考量
stackdriver
自訂資源中的clusterLocation
欄位,也不會考量叢集規格中的clusterOperations.location
欄位。如果是記錄,clusterLocation
只會用於標記記錄項目,有助於在記錄探索工具中篩選記錄。指標路由設定方式:指標端點收到指標項目時,Cloud Monitoring 會自動將項目路由至指標指定的位置。指標中的位置來自
stackdriver
自訂資源中的clusterLocation
欄位。規劃設定:設定 Cloud Logging 和 Cloud Monitoring 時,請設定記錄檔路由器,並指定適當的
clusterLocation
和位置,以滿足您的需求。舉例來說,如要將記錄和指標傳送至相同位置,請將clusterLocation
設為記錄路由器用於 Google Cloud 專案的 Google Cloud 地區。視需要更新設定:您可以隨時變更記錄和指標的目的地設定,以因應業務需求,例如災害復原計畫。在
stackdriver
自訂資源的 Google Cloud 和clusterLocation
欄位中變更記錄路由器設定,會快速生效。
使用 Cloud Logging
您不需要採取任何行動,即可為叢集啟用 Cloud Logging。
不過,您必須指定要查看記錄的 Google Cloud 專案。在叢集設定檔中,您可以在 stackdriver
區段中指定 Google Cloud 專案。
您可以使用 Google Cloud 控制台中的記錄檔探索工具存取記錄。舉例來說,如要存取容器的記錄,請執行下列步驟:
- 在專案的 Google Cloud 控制台中開啟記錄檔探索工具。
- 您可以透過下列方式尋找容器記錄:
- 按一下左上方的記錄目錄下拉式方塊,然後選取「Kubernetes 容器」。
- 依序選取叢集名稱、命名空間和階層中的容器。
查看啟動叢集中控制器的記錄
-
前往 Google Cloud 控制台的「Logs Explorer」頁面:
如果您是使用搜尋列尋找這個頁面,請選取子標題為「Logging」的結果。
如要查看啟動程序叢集中控制器的所有記錄,請在查詢編輯器中執行下列查詢:
"ADMIN_CLUSTER_NAME" resource.type="k8s_container" resource.labels.cluster_name="gkectl-bootstrap-cluster"
如要查看特定 Pod 的記錄,請編輯查詢,加入該 Pod 的名稱:
resource.type="k8s_container" resource.labels.cluster_name="gkectl-bootstrap-cluster" resource.labels.pod_name="POD_NAME"
使用 Cloud Monitoring
您不必採取任何行動,即可為叢集啟用 Cloud Monitoring。
不過,您必須指定要查看指標的 Google Cloud 專案。
在叢集設定檔中,您會在 stackdriver
區段中指定 Google Cloud 專案。
您可以使用 Metrics Explorer,從超過 1,500 個指標中進行選擇。 如要存取 Metrics Explorer,請按照下列步驟操作:
在 Google Cloud 控制台中選取「Monitoring」,或使用下列按鈕:
依序選取 [Resources] > [Metrics Explorer]。
您也可以在 Google Cloud 控制台的資訊主頁中查看指標。如要瞭解如何建立資訊主頁及查看指標,請參閱建立資訊主頁。
查看機群層級的監控資料
如要透過 Cloud Monitoring 資料全面掌握機群的資源用量 (包括 Google Distributed Cloud 叢集),請使用 Google Cloud 控制台中的 Google Kubernetes Engine 總覽。詳情請參閱「透過 Google Cloud 控制台管理叢集」。
Cloud Monitoring 預設配額限制
Google Distributed Cloud 監控服務的預設限制為每個專案每分鐘 6000 次 API 呼叫。如果超過上限,系統可能不會顯示指標。 如要提高監控上限,請透過 Google Cloud 主控台提出要求。
使用 Managed Service for Prometheus
Google Cloud Managed Service for Prometheus 是 Cloud Monitoring 的一部分,預設為啟用。Managed Service for Prometheus 的優點包括:
您可以繼續使用現有的 Prometheus 型監控功能,無須變更快訊和 Grafana 資訊主頁。
如果您同時使用 GKE 和 Google Distributed Cloud,可以對所有叢集的指標使用相同的 PromQL。您也可以在 Google Cloud 控制台的指標探索工具中,使用 PromQL 分頁。
啟用及停用 Managed Service for Prometheus
從 Google Distributed Cloud 1.30.0-gke.1930 版開始,Managed Service for Prometheus 一律會啟用。在舊版中,您可以編輯 Stackdriver 資源 stackdriver
,啟用或停用 Managed Service for Prometheus。如要為 1.30.0-gke.1930 之前的叢集版本停用 Managed Service for Prometheus,請將 stackdriver
資源中的 spec.featureGates.enableGMPForSystemMetrics
設為 false
。
查看指標資料
啟用 Managed Service for Prometheus 後,下列元件的指標在 Cloud Monitoring 中的儲存和查詢格式會有所不同:
- kube-apiserver
- kube-scheduler
- kube-controller-manager
- kubelet 和 cadvisor
- kube-state-metrics
- node-exporter
在新格式中,您可以使用 PromQL 或 Monitoring Query Language (MQL) 查詢上述指標。
PromQL 範例:
histogram_quantile(0.95, sum(rate(apiserver_request_duration_seconds_bucket[5m])) by (le))
如要使用 MQL,請將受監控的資源設為 prometheus_target
,並在指標後方加上 Prometheus 類型做為後置字元。
MQL 範例:
fetch prometheus_target | metric 'kubernetes.io/anthos/apiserver_request_duration_seconds/histogram' | align delta(5m) | every 5m | group_by [], [value_histogram_percentile: percentile(value.histogram, 95)]
使用 Managed Service for Prometheus 設定 Grafana 資訊主頁
如要使用 Grafana 處理 Managed Service for Prometheus 的指標資料,請按照「使用 Grafana 查詢」一節中的步驟進行驗證,並設定 Grafana 資料來源,以便查詢 Managed Service for Prometheus 的資料。
GitHub 上的 anthos-samples 存放區提供一組 Grafana 資訊主頁範例。如要安裝範本資訊主頁,請按照下列步驟操作:
下載範例
.json
檔案:git clone https://github.com/GoogleCloudPlatform/anthos-samples.git cd anthos-samples/gmp-grafana-dashboards
如果 Grafana 資料來源的名稱與
Managed Service for Prometheus
不同,請變更所有.json
檔案中的datasource
欄位:sed -i "s/Managed Service for Prometheus/[DATASOURCE_NAME]/g" ./*.json
將 [DATASOURCE_NAME] 改為 Grafana 中指向 Prometheus
frontend
服務的資料來源名稱。在瀏覽器中存取 Grafana UI,然後選取「資訊主頁」選單下方的「+ 匯入」。
上傳
.json
檔案,或複製並貼上檔案內容,然後選取「載入」。檔案內容載入完成後,請選取「匯入」。您也可以選擇在匯入前變更資訊主頁名稱和 UID。如果 Google Distributed Cloud 和資料來源設定正確,匯入的資訊主頁應可順利載入。舉例來說,下圖顯示由
cluster-capacity.json
設定的資訊主頁。
其他資源
如要進一步瞭解 Managed Service for Prometheus,請參閱下列資源:
使用 Prometheus 和 Grafana
從 1.16 版開始,新建立的叢集將無法使用 Prometheus 和 Grafana。建議您使用 Managed Service for Prometheus,取代叢集內監控功能。
如果您將已啟用 Prometheus 和 Grafana 的1.15 叢集升級至 1.16,Prometheus 和 Grafana 會繼續照常運作,但不會更新或取得安全性修補程式。
如要在升級至 1.16 後刪除所有 Prometheus 和 Grafana 資源,請執行下列指令:
kubectl --kubeconfig KUBECONFIG delete -n kube-system \ statefulsets,services,configmaps,secrets,serviceaccounts,clusterroles,clusterrolebindings,certificates,deployments \ -l addons.gke.io/legacy-pg=true
您可以改用開放原始碼社群版本的 Prometheus 和 Grafana,取代 Google Distributed Cloud 舊版內含的 Prometheus 和 Grafana 元件。
已知問題
在使用者叢集中,Prometheus 和 Grafana 會在升級期間自動停用。不過,設定和指標資料不會遺失。
如要解決這個問題,請在升級後開啟 monitoring-sample
進行編輯,並將 enablePrometheus
設為 true
。
從 Grafana 資訊主頁存取監控指標
Grafana 會顯示從叢集收集的指標。如要查看這些指標,請存取 Grafana 的資訊主頁:
取得使用者叢集
kube-system
命名空間中執行的 Grafana Pod 名稱:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system get pods
其中 [USER_CLUSTER_KUBECONFIG] 是使用者叢集的 kubeconfig 檔案。
Grafana Pod 有一個 HTTP 伺服器,監聽 TCP 本機主機通訊埠 3000。將本機通訊埠轉送至 Pod 中的通訊埠 3000,以便透過網路瀏覽器查看 Grafana 的資訊主頁。
舉例來說,假設 Pod 的名稱為
grafana-0
。如要將通訊埠 50000 轉送至 Pod 中的通訊埠 3000,請輸入下列指令:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system port-forward grafana-0 50000:3000
使用網路瀏覽器前往
http://localhost:50000
。在登入頁面中,輸入
admin
做為使用者名稱和密碼。如果登入成功,系統會提示您變更密碼。變更預設密碼後,使用者叢集的 Grafana 首頁資訊主頁應會載入。
如要存取其他資訊主頁,請按一下頁面左上角的「首頁」下拉式選單。
如需使用 Grafana 的範例,請參閱「建立 Grafana 資訊主頁」。
存取快訊
Prometheus Alertmanager 會從 Prometheus 伺服器收集快訊。您可以在 Grafana 資訊主頁中查看這些快訊。如要查看快訊,請存取資訊主頁:
alertmanager-0
Pod 中的容器會監聽 TCP 通訊埠 9093。將本機通訊埠轉送至 Pod 中的通訊埠 9093:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward \ -n kube-system alertmanager-0 50001:9093
使用網路瀏覽器前往
http://localhost:50001
。
變更 Prometheus Alertmanager 設定
如要變更 Prometheus Alertmanager 的預設設定,請編輯使用者叢集的 monitoring.yaml
檔案。如要將快訊導向特定目的地,而不是保留在資訊主頁中,請執行這項操作。如要瞭解如何在 Prometheus 中設定 Alertmanager,請參閱設定說明文件。
如要變更 Alertmanager 設定,請執行下列步驟:
複製使用者叢集的
monitoring.yaml
資訊清單檔案:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] -n kube-system \ get monitoring monitoring-sample -o yaml > monitoring.yaml
如要設定 Alertmanager,請變更
spec.alertmanager.yml
下方的欄位。完成後,請儲存變更後的資訊清單。將資訊清單套用至叢集:
kubectl apply --kubeconfig [USER_CLUSTER_KUBECONIFG] -f monitoring.yaml
建立 Grafana 資訊主頁
您已部署會公開指標的應用程式,並確認指標已公開,以及 Prometheus 會剪輯指標。現在您可以將應用程式層級指標新增至自訂 Grafana 資訊主頁。
如要建立 Grafana 資訊主頁,請執行下列步驟:
- 如有需要,請取得 Grafana 的存取權。
- 在首頁資訊主頁中,按一下頁面左上角的「首頁」下拉式選單。
- 按一下右側選單中的「新增資訊主頁」。
- 在「New panel」(新面板) 部分,按一下「Graph」(圖表)。系統會顯示空白的圖表資訊主頁。
- 按一下「面板標題」,然後按一下「編輯」。底部會開啟「圖表」面板,並顯示「指標」分頁。
- 在「資料來源」下拉式選單中,選取「使用者」。按一下「新增查詢」,然後在「搜尋」欄位中輸入
foo
。 - 按一下畫面右上角的「返回資訊主頁」按鈕。畫面上會顯示資訊主頁。
- 如要儲存資訊主頁,請按一下畫面右上角的「儲存資訊主頁」。選擇資訊主頁的名稱,然後按一下「儲存」。
停用 Prometheus 和 Grafana
從 1.16 版開始,Prometheus 和 Grafana 不再由 monitoring-sample
物件中的 enablePrometheus
欄位控制。詳情請參閱「使用 Prometheus 和 Grafana」。
範例:將應用程式層級指標新增至 Grafana 資訊主頁
以下各節將逐步說明如何為應用程式新增指標。在本節中,您將完成下列工作:
- 部署會公開名為
foo
指標的範例應用程式。 - 確認 Prometheus 會公開及抓取指標。
- 建立自訂 Grafana 資訊主頁。
部署範例應用程式
範例應用程式會在單一 Pod 中執行。Pod 的容器會公開指標 foo
,其常數值為 40
。
建立下列 Pod 資訊清單 pro-pod.yaml
:
apiVersion: v1 kind: Pod metadata: name: prometheus-example annotations: prometheus.io/scrape: 'true' prometheus.io/port: '8080' prometheus.io/path: '/metrics' spec: containers: - image: registry.k8s.io/prometheus-dummy-exporter:v0.1.0 name: prometheus-example command: - /bin/sh - -c - ./prometheus_dummy_exporter --metric-name=foo --metric-value=40 --port=8080
然後將 Pod 資訊清單套用至使用者叢集:
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] apply -f pro-pod.yaml
確認指標已公開並經過擷取
prometheus-example
Pod 中的容器會監聽 TCP 通訊埠 8080。將本機通訊埠轉送至 Pod 中的通訊埠 8080:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-example 50002:8080
如要確認應用程式是否公開指標,請執行下列指令:
curl localhost:50002/metrics | grep foo
指令傳回下列結果:
# HELP foo Custom metric # TYPE foo gauge foo 40
prometheus-0
Pod 中的容器會監聽 TCP 通訊埠 9090。將本機通訊埠轉送至 Pod 中的通訊埠 9090:kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] port-forward prometheus-0 50003:9090
如要確認 Prometheus 是否正在抓取指標,請前往 http://localhost:50003/targets,這應該會將您帶往
prometheus-io-pods
目標群組下的prometheus-0
Pod。如要在 Prometheus 中查看指標,請前往 http://localhost:50003/graph。 在「搜尋」欄位中輸入
foo
,然後按一下「執行」。頁面應顯示指標。
設定 Stackdriver 自訂資源
建立叢集時,Google Distributed Cloud 會自動建立 Stackdriver 自訂資源。您可以編輯自訂資源中的規格,覆寫 Stackdriver 元件的 CPU 和記憶體要求與限制預設值,也可以分別覆寫預設儲存空間大小和儲存空間類別。
覆寫 CPU 和記憶體要求與限制的預設值
如要覆寫這些預設值,請按照下列步驟操作:
在指令列編輯器中開啟 Stackdriver 自訂資源:
kubectl --kubeconfig=KUBECONFIG -n kube-system edit stackdriver stackdriver
其中 KUBECONFIG 是指叢集的 kubeconfig 檔案路徑,可以是管理員叢集或使用者叢集。
在 Stackdriver 自訂資源中,於
spec
區段下方新增resourceAttrOverride
欄位:resourceAttrOverride: POD_NAME_WITHOUT_RANDOM_SUFFIX/CONTAINER_NAME: LIMITS_OR_REQUESTS: RESOURCE: RESOURCE_QUANTITY
請注意,
resourceAttrOverride
欄位會覆寫您指定元件的所有現有預設限制和要求。resourceAttrOverride
支援下列元件:- gke-metrics-agent/gke-metrics-agent
- stackdriver-log-forwarder/stackdriver-log-forwarder
- stackdriver-metadata-agent-cluster-level/metadata-agent
- node-exporter/node-exporter
- kube-state-metrics/kube-state-metrics
範例檔案如下所示:
apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: my-project clusterName: my-cluster clusterLocation: us-west-1a resourceAttrOverride: gke-metrics-agent/gke-metrics-agent: requests: cpu: 110m memory: 240Mi limits: cpu: 200m memory: 4.5Gi
儲存變更並結束指令列編輯器。
檢查 Pod 的健康狀態:
kubectl --kubeconfig=KUBECONFIG -n kube-system get pods | grep gke-metrics-agent
舉例來說,運作正常的 Pod 如下所示:
gke-metrics-agent-4th8r 1/1 Running 0 5d19h
檢查元件的 Pod 規格,確認資源設定正確無誤。
kubectl --kubeconfig=KUBECONFIG -n kube-system describe pod POD_NAME
其中
POD_NAME
是您剛變更的 Pod 名稱。例如:stackdriver-prometheus-k8s-0
回應如下所示:
Name: gke-metrics-agent-4th8r Namespace: kube-system ... Containers: gke-metrics-agent: Limits: cpu: 200m memory: 4.5Gi Requests: cpu: 110m memory: 240Mi ...
覆寫預設儲存空間大小
如要覆寫這些預設值,請按照下列步驟操作:
在指令列編輯器中開啟 Stackdriver 自訂資源:
kubectl --kubeconfig=KUBECONFIG -n kube-system edit stackdriver stackdriver
在
spec
區段下方新增storageSizeOverride
欄位。您可以使用stackdriver-prometheus-k8s
或stackdriver-prometheus-app
元件。該節的格式如下:storageSizeOverride: STATEFULSET_NAME: SIZE
本範例使用 statefulset
stackdriver-prometheus-k8s
和大小120Gi
。apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: my-project clusterName: my-cluster clusterLocation: us-west-1a storageSizeOverride: stackdriver-prometheus-k8s: 120Gi
儲存並結束指令列編輯器。
檢查 Pod 的健康狀態:
舉例來說,運作正常的 Pod 如下所示:kubectl --kubeconfig=KUBECONFIG -n kube-system get pods | grep stackdriver
stackdriver-prometheus-k8s-0 2/2 Running 0 5d19h
檢查元件的 Pod 規格,確認儲存空間大小已正確覆寫。
kubectl --kubeconfig=KUBECONFIG -n kube-system describe statefulset STATEFULSET_NAME
回應如下所示:
Volume Claims: Name: my-statefulset-persistent-volume-claim StorageClass: my-storage-class Labels: Annotations: Capacity: 120Gi Access Modes: [ReadWriteOnce]
覆寫預設儲存空間級別
必要條件
您必須先建立要使用的 StorageClass。
如要覆寫記錄和監控元件所聲明的永久磁碟區預設儲存空間級別,請按照下列步驟操作:
在指令列編輯器中開啟 Stackdriver 自訂資源:
kubectl --kubeconfig=KUBECONFIG -n kube-system edit stackdriver stackdriver
其中 KUBECONFIG 是指叢集的 kubeconfig 檔案路徑,可以是管理員叢集或使用者叢集。
在
spec
區段下方新增storageClassName
欄位:storageClassName: STORAGECLASS_NAME
請注意,
storageClassName
欄位會覆寫現有的預設儲存空間類別,並套用至所有聲明永久磁碟區的記錄和監控元件。範例檔案如下所示:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: my-project clusterName: my-cluster clusterLocation: us-west-1a proxyConfigSecretName: my-secret-name enableVPC:
optimizedMetrics: true storageClassName: my-storage-class 儲存變更。
檢查 Pod 的健康狀態:
kubectl --kubeconfig=KUBECONFIG -n kube-system get pods | grep stackdriver
舉例來說,運作正常的 Pod 如下所示:
stackdriver-prometheus-k8s-0 1/1 Running 0 5d19h
檢查元件的 Pod 規格,確認儲存空間類別設定正確無誤。
kubectl --kubeconfig=KUBECONFIG -n kube-system describe statefulset STATEFULSET_NAME
舉例來說,使用有狀態集
stackdriver-prometheus-k8s
時,回應會如下所示:Volume Claims: Name: stackdriver-prometheus-data StorageClass: my-storage-class Labels: Annotations: Capacity: 120Gi Access Modes: [ReadWriteOnce]
停用最佳化指標
根據預設,叢集中執行的指標代理程式會收集並向 Stackdriver 回報經過最佳化的容器、Kubelet 和 kube-state-metrics 指標。如需其他指標,建議您從 GKE Enterprise 指標清單中尋找替代指標。
以下列舉幾個可用的替代字詞:
已停用的指標 | 更換 |
---|---|
kube_pod_start_time |
container/uptime |
kube_pod_container_resource_requests |
container/cpu/request_cores container/memory/request_bytes |
kube_pod_container_resource_limits |
container/cpu/limit_cores container/memory/limit_bytes |
如要停用最佳化 kube-state-metrics 指標的預設設定 (不建議),請執行下列操作:
在指令列編輯器中開啟 Stackdriver 自訂資源:
kubectl --kubeconfig=KUBECONFIG -n kube-system edit stackdriver stackdriver
其中 KUBECONFIG 是指叢集的 kubeconfig 檔案路徑,可以是管理員叢集或使用者叢集。
將
optimizedMetrics
欄位設為false
:apiVersion: addons.gke.io/v1alpha1 kind: Stackdriver metadata: name: stackdriver namespace: kube-system spec: projectID: my-project clusterName: my-cluster clusterLocation: us-west-1a proxyConfigSecretName: my-secret-name enableVPC:
optimizedMetrics: false storageClassName: my-storage-class 儲存變更,然後結束指令列編輯器。
已知問題:Cloud Monitoring 錯誤條件
(問題 ID 159761921)
在特定情況下,每個新叢集預設部署的預設 Cloud Monitoring Pod 可能會停止回應。舉例來說,升級叢集時,如果 statefulset/prometheus-stackdriver-k8s
中的 Pod 重新啟動,儲存空間資料可能會損毀。
具體來說,如果資料損毀導致 prometheus-stackdriver-sidecar
無法寫入叢集儲存空間 PersistentVolume
,監控 Pod stackdriver-prometheus-k8s-0
就可能會陷入迴圈。
你可以按照下列步驟手動診斷及修正錯誤。
診斷 Cloud Monitoring 失敗問題
如果監控 Pod 失敗,記錄會回報下列內容:
{"log":"level=warn ts=2020-04-08T22:15:44.557Z caller=queue_manager.go:534 component=queue_manager msg=\"Unrecoverable error sending samples to remote storage\" err=\"rpc error: code = InvalidArgument desc = One or more TimeSeries could not be written: One or more points were written more frequently than the maximum sampling period configured for the metric.: timeSeries[0-114]; Unknown metric: kubernetes.io/anthos/scheduler_pending_pods: timeSeries[196-198]\"\n","stream":"stderr","time":"2020-04-08T22:15:44.558246866Z"}
{"log":"level=info ts=2020-04-08T22:15:44.656Z caller=queue_manager.go:229 component=queue_manager msg=\"Remote storage stopped.\"\n","stream":"stderr","time":"2020-04-08T22:15:44.656798666Z"}
{"log":"level=error ts=2020-04-08T22:15:44.663Z caller=main.go:603 err=\"corruption after 29032448 bytes: unexpected non-zero byte in padded page\"\n","stream":"stderr","time":"2020-04-08T22:15:44.663707748Z"}
{"log":"level=info ts=2020-04-08T22:15:44.663Z caller=main.go:605 msg=\"See you next time!\"\n","stream":"stderr","time":"2020-04-08T22:15:44.664000941Z"}
從 Cloud Monitoring 錯誤中復原
如要手動復原 Cloud Monitoring,請按照下列步驟操作:
停止叢集監控。縮減
stackdriver
運算子,防止監控和解:kubectl --kubeconfig /ADMIN_CLUSTER_KUBCONFIG --namespace kube-system scale deployment stackdriver-operator --replicas 0
刪除監控管道工作負載:
kubectl --kubeconfig /ADMIN_CLUSTER_KUBCONFIG --namespace kube-system delete statefulset stackdriver-prometheus-k8s
刪除監控管道 PersistentVolumeClaim (PVC):
kubectl --kubeconfig /ADMIN_CLUSTER_KUBCONFIG --namespace kube-system delete pvc -l app=stackdriver-prometheus-k8s
重新啟動叢集監控功能。擴大 stackdriver 運算子,重新安裝新的監控管道並繼續協調:
kubectl --kubeconfig /ADMIN_CLUSTER_KUBCONFIG --namespace kube-system scale deployment stackdriver-operator --replicas=1