本主題說明如何將 GKE on AWS 使用者叢集的記錄和指標匯出至 Cloud Logging 和 Cloud Monitoring。
總覽
使用 GKE on AWS 時,有多種記錄和監控選項。GKE Enterprise 可與 Cloud Logging 和 Cloud Monitoring 整合。由於 GKE Enterprise 是以開放原始碼 Kubernetes 為基礎,因此許多開放原始碼和第三方工具都相容。
記錄和監控選項
您可以透過下列幾種方式記錄及監控 GKE Enterprise 叢集:
部署 Cloud Logging 和 Cloud Monitoring 代理程式,在 Google Cloud 控制台中監控及查看工作負載的記錄。本主題將說明這項解決方案。
使用 Prometheus、Grafana 和 Elasticsearch 等開放原始碼工具。本主題並未說明這項解決方案。
使用 Datadog 等第三方解決方案。這個主題並未說明這項解決方案。
Cloud Logging 和 Cloud Monitoring
透過 GKE Enterprise、Cloud Logging 和 Cloud Monitoring,您可以建立資訊主頁、傳送快訊、監控及查看叢集上執行的工作負載記錄。您必須設定 Cloud Logging 和 Cloud Monitoring 代理程式,才能將記錄檔和指標收集到 Google Cloud專案中。如未設定這些代理程式,AWS 上的 GKE 就不會收集記錄或監控資料。
我們會蒐集哪些資料
設定完成後,代理程式會從叢集和叢集上執行的工作負載收集記錄和指標資料。這些資料會儲存在您的Google Cloud 專案中。安裝記錄轉送器時,您會在設定檔的 project_id
欄位中設定專案 ID。
收集的資料包括:
- 每個工作節點上系統服務的記錄。
- 叢集上所有工作負載的應用程式記錄。
- 叢集和系統服務的指標。如要進一步瞭解特定指標,請參閱 GKE Enterprise 指標。
- 如果應用程式已設定 Prometheus 抓取目標,並使用
prometheus.io/scrape
、prometheus.io/path
和prometheus.io/port
等設定註解,則 Pod 的應用程式指標。
您隨時可以停用代理程式。詳情請參閱清除所用資源一節。您可以像管理及刪除其他指標和記錄資料一樣,管理及刪除代理程式收集的資料,詳情請參閱 Cloud Monitoring 和 Cloud Logging 說明文件。
系統會根據您設定的保留規則儲存記錄資料。指標資料的保留期限會因類型而異。
記錄和監控元件
如要將叢集層級的遙測資料從 GKE on AWS 匯出至Google Cloud,請在叢集中部署下列元件:
- Stackdriver Log Forwarder (stackdriver-log-forwarder-*)。Fluentbit DaemonSet,可將每個 Kubernetes 節點的記錄轉送至 Cloud Logging。
- GKE 指標代理程式 (gke-metrics-agent-*):以 OpenTelemetry Collector 為基礎的 DaemonSet,可收集指標資料並轉送至 Cloud Monitoring。
這些元件的資訊清單位於 GitHub 的 anthos-samples 存放區。
必要條件
啟用計費功能的 Google Cloud 專案。如要進一步瞭解費用,請參閱 Google Cloud Observability 定價。
專案也必須啟用 Cloud Logging 和 Cloud Monitoring API。如要啟用這些 API,請執行下列指令:
gcloud services enable logging.googleapis.com gcloud services enable monitoring.googleapis.com
GKE on AWS 環境,包括已向 Connect 註冊的使用者叢集。執行下列指令,確認叢集已註冊。
gcloud container fleet memberships list
如果叢集已註冊,Google Cloud CLI 會列印叢集的名稱和 ID。
NAME EXTERNAL_ID cluster-0 1abcdef-1234-4266-90ab-123456abcdef
如果未列出叢集,請參閱「使用 Connect 連線至叢集」。
在電腦上安裝
git
指令列工具。
設定 Google Cloud Observability 的權限
記錄和監控代理程式會使用 Fleet Workload Identity 與 Cloud Logging 和 Cloud Monitoring 通訊。該身分必須具備在專案中寫入記錄和指標的權限。如要新增權限,請執行下列指令:
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver]" \
--role=roles/logging.logWriter
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:PROJECT_ID.svc.id.goog[kube-system/stackdriver]" \
--role=roles/monitoring.metricWriter
將 PROJECT_ID
替換為您的 Google Cloud 專案。
連線至防禦主機
如要連線至 GKE on AWS 資源,請按照下列步驟操作。選取您是否已有 AWS 虛擬私有雲 (或直接連線至虛擬私有雲),或是在建立管理服務時建立了專屬虛擬私有雲。
現有 VPC
如果您已透過直接連線或 VPN 連線至現有虛擬私有雲,請從本主題的指令中省略 env HTTP_PROXY=http://localhost:8118
行。
專用虛擬私有雲
在專屬虛擬私有雲中建立管理服務時,GKE on AWS 會在公用子網路中加入堡壘主機。
如要連線至管理服務,請按照下列步驟操作:
切換至 GKE on AWS 設定所在的目錄。 您在安裝管理服務時建立了這個目錄。
cd anthos-aws
如要開啟通道,請執行
bastion-tunnel.sh
指令碼。通道會轉送至localhost:8118
。如要開啟防禦主機的通道,請執行下列指令:
./bastion-tunnel.sh -N
這個視窗會顯示來自 SSH 通道的訊息。準備好關閉連線時,請使用 Control+C 停止程序,或關閉視窗。
開啟新的終端機,然後變更為
anthos-aws
目錄。cd anthos-aws
確認您可以使用
kubectl
連線至叢集。env HTTPS_PROXY=http://localhost:8118 \ kubectl cluster-info
輸出內容會包含管理服務 API 伺服器的網址。
控制層節點上的 Cloud Logging 和 Cloud Monitoring
使用 GKE on AWS 1.8.0 以上版本建立新的使用者叢集時,系統會自動設定控制層節點的 Cloud Logging 和 Cloud Monitoring。如要啟用 Cloud Logging 或 Cloud Monitoring,請填寫 AWSCluster
設定的 controlPlane.cloudOperations
區段。
cloudOperations:
projectID: PROJECT_ID
location: GC_REGION
enableLogging: ENABLE_LOGGING
enableMonitoring: ENABLE_MONITORING
更改下列內容:
PROJECT_ID
:您的專案 ID。GC_REGION
:您要儲存記錄的 Google Cloud 區域。選擇靠近 AWS 區域的區域。 詳情請參閱「全球據點 - 區域和可用區」,例如us-central1
。ENABLE_LOGGING
:true
或false
,指出控制平面節點是否已啟用 Cloud Logging。ENABLE_MONITORING
:true
或false
,控制層節點是否已啟用 Cloud Monitoring。
接著,請按照「建立自訂使用者叢集」一文中的步驟操作。
工作節點上的 Cloud Logging 和 Cloud Monitoring
移除舊版
如果您已設定舊版記錄和監控代理程式 (包括 stackdriver-log-aggregator
(Fluentd) 和 stackdriver-prometheus-k8s
(Prometheus)),建議先解除安裝這些代理程式,再繼續操作。
安裝記錄轉寄程式
在本節中,您將在叢集上安裝 Stackdriver Log Forwarder。
從
anthos-samples/aws-logging-monitoring/
目錄變更為logging/
目錄。cd logging/
修改
forwarder.yaml
檔案,使其符合專案設定:sed -i "s/PROJECT_ID/PROJECT_ID/g" forwarder.yaml sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" forwarder.yaml sed -i "s/CLUSTER_LOCATION/GC_REGION/g" forwarder.yaml
更改下列內容:
PROJECT_ID
:您的專案 ID。CLUSTER_NAME
:叢集名稱,例如cluster-0
GC_REGION
:您要儲存記錄的 Google Cloud 區域。選擇靠近 AWS 區域的區域。 詳情請參閱「全球據點 - 區域和可用區」,例如us-central1
。
(選用) 視工作負載、叢集中的節點數和每個節點的 Pod 數而定,您可能需要設定記憶體和 CPU 資源要求。詳情請參閱「建議的 CPU 和記憶體配置」。
在
anthos-aws
目錄中,使用anthos-gke
將環境切換至使用者叢集。 將 CLUSTER_NAME 替換為使用者叢集名稱。cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
建立
stackdriver
服務帳戶 (如不存在),並將記錄轉送器部署至叢集。env HTTPS_PROXY=http://localhost:8118 \ kubectl create serviceaccount stackdriver -n kube-system env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f forwarder.yaml
使用
kubectl
確認 Pod 已啟動。env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods -n kube-system | grep stackdriver-log
在節點集區中,每個節點都應該有一個轉送器 Pod。舉例來說,在 6 節點叢集中,您應該會看到六個轉送器 Pod。
stackdriver-log-forwarder-2vlxb 2/2 Running 0 21s stackdriver-log-forwarder-dwgb7 2/2 Running 0 21s stackdriver-log-forwarder-rfrdk 2/2 Running 0 21s stackdriver-log-forwarder-sqz7b 2/2 Running 0 21s stackdriver-log-forwarder-w4dhn 2/2 Running 0 21s stackdriver-log-forwarder-wrfg4 2/2 Running 0 21s
測試記錄轉送功能
在本節中,您會將包含基本 HTTP 網路伺服器和負載產生器的負載,部署至叢集。接著測試記錄檔是否顯示在 Cloud Logging 中。
安裝這項工作負載前,您可以驗證網頁伺服器和負載產生器的資訊清單。
將網路伺服器和負載產生器部署到叢集。
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml
如要確認您可以在 Cloud Logging 資訊主頁中查看叢集的記錄,請前往 Google Cloud 控制台的記錄檔探索工具:
將下列範例查詢複製到「Query builder」(查詢建立工具) 欄位。
resource.type="k8s_container" resource.labels.cluster_name="CLUSTER_NAME"
將 CLUSTER_NAME 替換為叢集名稱。
按一下 [Run query] (執行查詢)。「Query results」(查詢結果) 下方應會顯示最近的叢集記錄。
確認查詢結果中顯示記錄後,請移除負載產生器和網頁伺服器。
env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/loadgen/loadgen.yaml env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/istio-samples/master/sample-apps/helloserver/server/server.yaml
安裝指標收集器
在本節中,您將安裝代理程式,將資料傳送至 Cloud Monitoring。
從
anthos-samples/aws-logging-monitoring/logging/
目錄變更為anthos-samples/aws-logging-monitoring/monitoring/
目錄。cd ../monitoring
修改
gke-metrics-agent.yaml
檔案,使其符合專案設定:sed -i "s/PROJECT_ID/PROJECT_ID/g" gke-metrics-agent.yaml sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" gke-metrics-agent.yaml sed -i "s/CLUSTER_LOCATION/GC_REGION/g" gke-metrics-agent.yaml
更改下列內容:
PROJECT_ID
:您的專案 ID。CLUSTER_NAME
:叢集名稱,例如cluster-0
GC_REGION
:要儲存記錄的 Google Cloud 區域。選擇靠近 AWS 區域的區域。 詳情請參閱「全球據點 - 區域和可用區」,例如us-central1
。
(選用) 視工作負載、叢集中的節點數和每個節點的 Pod 數而定,您可能需要設定記憶體和 CPU 資源要求。詳情請參閱「建議的 CPU 和記憶體配置」。
建立
stackdriver
服務帳戶 (如果不存在),並將指標代理程式部署至叢集。env HTTPS_PROXY=http://localhost:8118 \ kubectl create serviceaccount stackdriver -n kube-system env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f gke-metrics-agent.yaml
使用
kubectl
工具確認gke-metrics-agent
Pod 正在執行中。env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods -n kube-system | grep gke-metrics-agent
您應該會看到每個節點集區的每個節點都有一個代理程式 Pod。舉例來說,在 3 節點叢集中,您應該會看到三個代理程式 Pod。
gke-metrics-agent-gjxdj 2/2 Running 0 102s gke-metrics-agent-lrnzl 2/2 Running 0 102s gke-metrics-agent-s6p47 2/2 Running 0 102s
如要確認叢集指標是否正在匯出至 Cloud Monitoring,請前往 Google Cloud 控制台的 Metrics Explorer:
在指標探索工具中,按一下「查詢編輯器」,然後複製下列指令:
fetch k8s_container | metric 'kubernetes.io/anthos/otelcol_exporter_sent_metric_points' | filter resource.project_id == 'PROJECT_ID' && (resource.cluster_name =='CLUSTER_NAME') | align rate(1m) | every 1m
更改下列內容:
PROJECT_ID
:您的專案 ID。CLUSTER_NAME
:您在建立使用者叢集時使用的叢集名稱,例如cluster-0
。
按一下 [Run query] (執行查詢)。系統會顯示從叢集中每個
gke-metrics-agent
Pod 傳送至 Cloud Monitoring 的指標點數比率。其他值得嘗試的指標包括但不限於:
kubernetes.io/anthos/container_memory_working_set_bytes
:容器記憶體用量;kubernetes.io/anthos/container_cpu_usage_seconds_total
:容器 CPU 使用率;kubernetes.io/anthos/apiserver_aggregated_request_total
:kube-apiserver 要求計數,僅在控制層啟用 Cloud Monitoring 時提供。
如要查看可用指標的完整清單,請參閱「Anthos 指標」。如要瞭解如何使用使用者介面,請參閱「Metrics Explorer」。
在 Cloud Monitoring 中建立資訊主頁
在本節中,您將建立 Cloud Monitoring 資訊主頁,監控叢集中的容器狀態。
從
anthos-samples/aws-logging-monitoring/monitoring/
目錄變更為anthos-samples/aws-logging-monitoring/monitoring/dashboards
目錄。cd dashboards
將
pod-status.json
中的CLUSTER_NAME
字串執行個體替換為叢集名稱。sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" pod-status.json
將
CLUSTER_NAME
替換為叢集名稱。執行下列指令,使用設定檔建立自訂資訊主頁:
gcloud monitoring dashboards create --config-from-file=pod-status.json
如要確認資訊主頁已建立,請前往 Google Cloud 控制台的 Cloud Monitoring 資訊主頁。
開啟新建立的資訊主頁,名稱格式為
CLUSTER_NAME (Anthos cluster on AWS) pod status
。
正在清除所用資源
在本節中,您將從叢集中移除記錄和監控元件。
在Google Cloud 控制台的「資訊主頁」清單檢視畫面中,按一下與資訊主頁名稱相關聯的刪除按鈕,即可刪除監控資訊主頁。
變更至
anthos-samples/aws-logging-monitoring/
目錄。cd anthos-samples/aws-logging-monitoring
如要移除本指南中建立的所有資源,請執行下列指令:
env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f logging/ env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f monitoring/
建議的 CPU 和記憶體分配
本節提供記錄和監控作業所用個別元件的建議 CPU 和分配量。下表列出各種節點大小的叢集 CPU 和記憶體要求。您可以在表格列出的檔案中,為元件設定資源要求。
詳情請參閱「Kubernetes 最佳做法:資源要求與限制」和「管理容器的資源」。
1 到 10 個節點
檔案 | 資源 | CPU 要求 | CPU 限制 | 記憶體要求 | 記憶體限制 |
---|---|---|---|---|---|
monitoring/gke-metrics-agent.yaml |
gke-metrics-agent | 30m | 100m | 50Mi | 500Mi |
logging/forwarder.yaml |
stackdriver-log-forwarder | 50 公尺 | 100m | 100Mi | 600Mi |
10 到 100 個節點
檔案 | 資源 | CPU 要求 | CPU 限制 | 記憶體要求 | 記憶體限制 |
---|---|---|---|---|---|
monitoring/gke-metrics-agent.yaml |
gke-metrics-agent | 50 公尺 | 100m | 50Mi | 500Mi |
logging/forwarder.yaml |
stackdriver-log-forwarder | 60 公尺 | 100m | 100Mi | 600Mi |
超過 100 個節點
檔案 | 資源 | CPU 要求 | CPU 限制 | 記憶體要求 | 記憶體限制 |
---|---|---|---|---|---|
monitoring/gke-metrics-agent.yaml |
gke-metrics-agent | 50 公尺 | 100m | 100Mi | 不適用 |
logging/forwarder.yaml |
stackdriver-log-forwarder | 60 公尺 | 100m | 100Mi | 600Mi |