GKE on AWS 的記錄與監控功能

本主題說明如何將 GKE on AWS 使用者叢集的記錄和指標匯出至 Cloud Logging 和 Cloud Monitoring。

總覽

使用 GKE on AWS 時,有多種記錄和監控選項。GKE Enterprise 可與 Cloud Logging 和 Cloud Monitoring 整合。由於 GKE Enterprise 是以開放原始碼 Kubernetes 為基礎,因此許多開放原始碼和第三方工具都相容。

記錄和監控選項

您可以透過下列幾種方式記錄及監控 GKE Enterprise 叢集:

  1. 部署 Cloud Logging 和 Cloud Monitoring 代理程式,在 Google Cloud 控制台中監控及查看工作負載的記錄。本主題將說明這項解決方案。

  2. 使用 Prometheus、Grafana 和 Elasticsearch 等開放原始碼工具。本主題並未說明這項解決方案。

  3. 使用 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/scrapeprometheus.io/pathprometheus.io/port 等設定註解,則 Pod 的應用程式指標。

您隨時可以停用代理程式。詳情請參閱清除所用資源一節。您可以像管理及刪除其他指標和記錄資料一樣,管理及刪除代理程式收集的資料,詳情請參閱 Cloud MonitoringCloud 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 存放區。

必要條件

  1. 啟用計費功能的 Google Cloud 專案。如要進一步瞭解費用,請參閱 Google Cloud Observability 定價

    專案也必須啟用 Cloud Logging 和 Cloud Monitoring API。如要啟用這些 API,請執行下列指令:

    gcloud services enable logging.googleapis.com
    gcloud services enable monitoring.googleapis.com
    
  2. GKE on AWS 環境,包括已向 Connect 註冊的使用者叢集。執行下列指令,確認叢集已註冊。

    gcloud container fleet memberships list
    

    如果叢集已註冊,Google Cloud CLI 會列印叢集的名稱和 ID。

    NAME       EXTERNAL_ID
    cluster-0  1abcdef-1234-4266-90ab-123456abcdef
    

    如果未列出叢集,請參閱「使用 Connect 連線至叢集」。

  3. 在電腦上安裝 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 會在公用子網路中加入堡壘主機。

如要連線至管理服務,請按照下列步驟操作:

  1. 切換至 GKE on AWS 設定所在的目錄。 您在安裝管理服務時建立了這個目錄。

    cd anthos-aws

  2. 如要開啟通道,請執行 bastion-tunnel.sh 指令碼。通道會轉送至 localhost:8118

    如要開啟防禦主機的通道,請執行下列指令:

    ./bastion-tunnel.sh -N
    

    這個視窗會顯示來自 SSH 通道的訊息。準備好關閉連線時,請使用 Control+C 停止程序,或關閉視窗。

  3. 開啟新的終端機,然後變更為 anthos-aws 目錄。

    cd anthos-aws
  4. 確認您可以使用 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_LOGGINGtruefalse,指出控制平面節點是否已啟用 Cloud Logging。
  • ENABLE_MONITORINGtruefalse,控制層節點是否已啟用 Cloud Monitoring。

接著,請按照「建立自訂使用者叢集」一文中的步驟操作。

工作節點上的 Cloud Logging 和 Cloud Monitoring

移除舊版

如果您已設定舊版記錄和監控代理程式 (包括 stackdriver-log-aggregator (Fluentd) 和 stackdriver-prometheus-k8s (Prometheus)),建議先解除安裝這些代理程式,再繼續操作。

安裝記錄轉寄程式

在本節中,您將在叢集上安裝 Stackdriver Log Forwarder

  1. anthos-samples/aws-logging-monitoring/ 目錄變更為 logging/ 目錄。

    cd logging/
    
  2. 修改 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
  3. (選用) 視工作負載、叢集中的節點數和每個節點的 Pod 數而定,您可能需要設定記憶體和 CPU 資源要求。詳情請參閱「建議的 CPU 和記憶體配置」。

  4. anthos-aws 目錄中,使用 anthos-gke 將環境切換至使用者叢集。

    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    CLUSTER_NAME 替換為使用者叢集名稱。

  5. 建立 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
    
  6. 使用 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 中。

安裝這項工作負載前,您可以驗證網頁伺服器負載產生器的資訊清單。

  1. 將網路伺服器和負載產生器部署到叢集。

    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
    
  2. 如要確認您可以在 Cloud Logging 資訊主頁中查看叢集的記錄,請前往 Google Cloud 控制台的記錄檔探索工具:

    前往記錄檔探索工具

  3. 將下列範例查詢複製到「Query builder」(查詢建立工具) 欄位。

    resource.type="k8s_container" resource.labels.cluster_name="CLUSTER_NAME"
    

    CLUSTER_NAME 替換為叢集名稱。

  4. 按一下 [Run query] (執行查詢)。「Query results」(查詢結果) 下方應會顯示最近的叢集記錄。

    Google Cloud Observability 中的叢集記錄

  5. 確認查詢結果中顯示記錄後,請移除負載產生器和網頁伺服器。

    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。

  1. anthos-samples/aws-logging-monitoring/logging/ 目錄變更為 anthos-samples/aws-logging-monitoring/monitoring/ 目錄。

    cd ../monitoring
    
  2. 修改 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
  3. (選用) 視工作負載、叢集中的節點數和每個節點的 Pod 數而定,您可能需要設定記憶體和 CPU 資源要求。詳情請參閱「建議的 CPU 和記憶體配置」。

  4. 建立 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
    
  5. 使用 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
    
  6. 如要確認叢集指標是否正在匯出至 Cloud Monitoring,請前往 Google Cloud 控制台的 Metrics Explorer:

    前往「Metrics Explorer」

  7. 在指標探索工具中,按一下「查詢編輯器」,然後複製下列指令:

    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
  8. 按一下 [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 資訊主頁,監控叢集中的容器狀態。

  1. anthos-samples/aws-logging-monitoring/monitoring/ 目錄變更為 anthos-samples/aws-logging-monitoring/monitoring/dashboards 目錄。

    cd dashboards
    
  2. pod-status.json 中的 CLUSTER_NAME 字串執行個體替換為叢集名稱。

    sed -i "s/CLUSTER_NAME/CLUSTER_NAME/g" pod-status.json
    

    CLUSTER_NAME 替換為叢集名稱。

  3. 執行下列指令,使用設定檔建立自訂資訊主頁:

    gcloud monitoring dashboards create --config-from-file=pod-status.json
    
  4. 如要確認資訊主頁已建立,請前往 Google Cloud 控制台的 Cloud Monitoring 資訊主頁。

    前往資訊主頁

    開啟新建立的資訊主頁,名稱格式為 CLUSTER_NAME (Anthos cluster on AWS) pod status

正在清除所用資源

在本節中,您將從叢集中移除記錄和監控元件。

  1. 在Google Cloud 控制台的「資訊主頁」清單檢視畫面中,按一下與資訊主頁名稱相關聯的刪除按鈕,即可刪除監控資訊主頁。

  2. 變更至 anthos-samples/aws-logging-monitoring/ 目錄。

    cd anthos-samples/aws-logging-monitoring
    
  3. 如要移除本指南中建立的所有資源,請執行下列指令:

    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

後續步驟

瞭解 Cloud Logging:

瞭解 Cloud Monitoring: