GKE の指標を管理する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Google Kubernetes Engine(GKE)では、Cloud Monitoring に指標を簡単に送信できます。Cloud Monitoring に指標を取り込み、カスタム ダッシュボードでの表示、アラートの生成、サービスレベル目標の設定を行うことができます。また、Cloud Monitoring API を使用してサードパーティのモニタリング サービスから指標を取得することもできます。

GKE にはいくつかの指標のソースが用意されています。

  • システム指標: 重要なシステム コンポーネントの指標。CPU、メモリ、ストレージなどの低レベルのリソースを記述します。
  • Managed Service for Prometheus: Prometheus を大規模に手動で管理、運用しなくても、Prometheus を使用してワークロードのモニタリングや、アラートの送信を行うことができます。
  • コントロール プレーンの指標: API サーバーやスケジューラなどの特定のコントロール プレーン コンポーネントからエクスポートされた指標。
  • ワークロード指標(非推奨): GKE ワークロード(CronJob やアプリケーションの Deployment など)によって公開される指標。

システム指標

クラスタが作成されると、GKE では、デフォルトでシステム コンポーネントによって出力された特定の指標が収集されます。

GKE クラスタから Cloud Monitoring に指標を送信するかどうかを選択できます。Cloud Monitoring に指標を送信する場合は、システム指標を送信する必要があります。

すべての GKE システム指標は、接頭辞 kubernetes.io を付けて Cloud Monitoring に取り込まれます。

料金

Cloud Monitoring は、GKE のシステム指標の取り込みに対して課金しません。詳細については、Cloud Monitoring の料金をご覧ください。

システム指標の収集の構成

システム指標の収集を有効にするには、SYSTEM 値を gcloud container clusters create または gcloud container clusters update コマンドの --monitoring フラグと一緒に実行します。

システム指標の収集を無効にするには、--monitoring フラグに NONE 値を使用します。システム指標の収集が無効になっている場合、クラスタの CPU 使用率、メモリ使用量、ディスク使用量などの基本情報は、Google Cloud コンソールの [オブザーバビリティ] タブまたは GKE のセクションで利用できません。また、Cloud Monitoring GKE ダッシュボードにはクラスタに関する情報は表示されません。

Cloud Monitoring と GKE のインテグレーションの詳細については、Cloud Operations for GKE の構成をご覧ください。

Terraform を使用してシステム指標の収集を構成するには、google_container_cluster の Terraform レジストリmonitoring_config ブロックをご覧ください。Terraform と Google Cloud を使用する場合の一般的な情報については、Google Cloud での Terraform をご覧ください。

システム指標の一覧

システム指標には、Kubernetes のコア機能に重要なシステム コンポーネントの指標が含まれます。これらの指標のリストについては、GKE システム指標をご覧ください。

システム指標のトラブルシューティング

Cloud Monitoring でシステム指標が予期したとおりに表示されない場合は、次の手順で問題を解決できます。

指標エージェントに十分なメモリがあることを確認する

ほとんどの場合、GKE 指標エージェントのリソースはデフォルトの割り当てで十分です。ただし、DaemonSet が頻繁にクラッシュする場合は、次の手順で終了の理由を確認できます。

  1. GKE 指標エージェントの Pod の名前を取得します。

    kubectl get pods -n kube-system -l component=gke-metrics-agent
    

    ステータスが CrashLoopBackOff の Pod を見つけます。

    出力は次のようになります。

    NAME                    READY STATUS           RESTARTS AGE
    gke-metrics-agent-5857x 0/1   CrashLoopBackOff 6        12m
    
  2. ステータスが CrashLoopBackOff の Pod の説明を取得します。

    kubectl describe pod POD_NAME -n kube-system
    

    POD_NAME は、前の手順の Pod の名前に置き換えます。

    Pod の終了の理由が OOMKilled の場合、エージェントに追加のメモリが必要です。

    出力は次のようになります。

      containerStatuses:
      ...
      lastState:
        terminated:
          ...
          exitCode: 1
          finishedAt: "2021-11-22T23:36:32Z"
          reason: OOMKilled
          startedAt: "2021-11-22T23:35:54Z"
    
  3. 失敗した指標エージェントを含むノードにノードラベルを追加します。永続的または一時的なノードラベルを使用できます。 20 MB を追加してみることをおすすめします。それでもエージェントがクラッシュし続ける場合は、より大容量の追加メモリをリクエストするノードラベルに置き換えて、もう一度このコマンドを実行します。

    永続ラベルを持つノードプールを更新するには、次のコマンドを実行します。

    gcloud container node-pools update NODEPOOL_NAME \
     --cluster=CLUSTER_NAME \
     --node-labels=ADDITIONAL_MEMORY_NODE_LABEL \
     --zone ZONE
    

    次のように置き換えます。

    • NODEPOOL_NAME: ノードプールの名前。
    • CLUSTER_NAME: 既存のクラスタの名前。
    • ADDITIONAL_MEMORY_NODE_LABEL: 追加するメモリのノードラベル。次のいずれかを使用します。
      • 10 MB を追加するには: cloud.google.com/gke-metrics-agent-scaling-level=10
      • 20 MB を追加するには: cloud.google.com/gke-metrics-agent-scaling-level=20
      • 50 MB を追加するには: cloud.google.com/gke-metrics-agent-scaling-level=50
      • 100 MB を追加するには: cloud.google.com/gke-metrics-agent-scaling-level=100
      • 200 MB を追加するには: cloud.google.com/gke-metrics-agent-scaling-level=200
      • 500 MB を追加するには: cloud.google.com/gke-metrics-agent-scaling-level=500
    • ZONE: クラスタが実行されているゾーン。

    または、次のコマンドを使用して、アップグレード後に保持されない一時的なノードラベルを追加することもできます。

    kubectl label node/NODE_NAME \
    ADDITIONAL_MEMORY_NODE_LABEL --overwrite
    

    次のように置き換えます。

    • NODE_NAME は、影響を受ける指標エージェントのノードの名前に置き換えます。
    • ADDITIONAL_MEMORY_NODE_LABEL: 追加するメモリのノードラベル。上記の例のいずれかの値を使用します。

コントロール プレーンの指標

Kubernetes API サーバー、スケジューラ、コントローラ マネージャーによって出力された特定の指標を Cloud Monitoring に送信するように GKE クラスタを構成できます。

要件

Kubernetes コントロール プレーン コンポーネントによって出力された指標を Cloud Monitoring に送信するには、GKE コントロール プレーン バージョン 1.22.13 以降が必要です。また、システム指標の収集が有効になっている必要があります。

コントロール プレーン指標の収集の構成

既存の GKE クラスタで Kubernetes コントロール プレーンの指標を有効にする手順は次のとおりです。

コンソール

  1. Google Cloud コンソールで、GKE クラスタのリストに移動します。

    Kubernetes クラスタに移動

  2. クラスタの名前をクリックします。

  3. Cloud Monitoring」というラベルの付いた行で、編集アイコンをクリックします。

  4. 表示された [Cloud Monitoring の編集] ダイアログ ボックスで、[Cloud Monitoring を有効にする] が選択されていることを確認します。

  5. [コンポーネント] プルダウン メニューで、指標を収集するコントロール プレーン コンポーネントを選択します。API サーバースケジューラ または Controller Manager を使用します。

  6. [OK] をクリックします。

  7. [変更を保存] をクリックします。

gcloud

  1. Google Cloud SDK と Google Cloud CLI がインストールされているデバイスでターミナル ウィンドウを開きます。操作を行う 1 つの方法として、Cloud Shell を使用します。

  2. Google Cloud コンソールで、「Cloud Shell をアクティブにする」をクリックします。

    Cloud Shell をアクティブにする

    Google Cloud コンソールの下部で Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。

  3. API_SERVERSCHEDULERCONTROLLER_MANAGER のうち 1 つ以上の値を、gcloud container clusters create コマンドまたは gcloud container clusters update コマンドの --monitoring フラグに渡します。

    たとえば、API サーバー、スケジューラ、コントローラ マネージャーから指標を収集するには、次のコマンドを実行します。

    gcloud container clusters update [CLUSTER_ID] \
      --zone=[ZONE] \
      --project=[PROJECT_ID] \
      --monitoring=SYSTEM,API_SERVER,SCHEDULER,CONTROLLER_MANAGER
    

Terraform

コントロール プレーンの指標の使用

次の情報については、コントロール プレーンの指標を使用するをご覧ください。

Google Cloud コンソールの GKE の [オブザーバビリティ] タブで利用可能なコントロール プレーン指標を可視化するダッシュボード。これらのダッシュボードの詳細については、オブザーバビリティの指標を表示するをご覧ください。

料金

GKE コントロール プレーンの指標は Google Cloud Managed Service for Prometheus を使用して、Cloud Monitoring に指標を取り込みます。Cloud Monitoring では、取り込まれたサンプルの数に基づいて GKE コントロール プレーン指標の取り込みに対して課金されます。詳細については、Cloud Monitoring の料金をご覧ください。

Monitoring の料金について

取り込まれるサンプル数が最も多いコントロール プレーン指標を特定するには、monitoring.googleapis.com/collection/attribution/write_sample_count 指標を使用します。

  1. Google Cloud コンソールで [Monitoring] を選択します。

    [Monitoring] に移動

  2. [Monitoring] のナビゲーション パネルで、[Metrics Explorer] をクリックします。

  3. [Metric] フィールドで [monitoring.googleapis.com/collection/attribution/write_sample_count] を選択します。

  4. [フィルタを追加] をクリックします。

  5. [Label] フィールドで attribution_dimension を選択します。

  6. [Comparison] フィールドで [= (equals)] を選択します。

  7. [Value] に「cluster」と入力します。

  8. [DONE] をクリックします。

  9. 必要に応じて、特定の指標のみをフィルタします。特に、API サーバーの指標は指標名に「apiserver」が含まれ、スケジューラの指標は指標名に「scheduler」が含まれているため、この文字列を含む指標に限定できます。

    • [フィルタを追加] をクリックします。

    • [Label] フィールドで metric_type を選択します。

    • [Comparison] フィールドで [=~ (equals regex)] を選択します。

    • [Value] に「.*apiserver.*」または「.*scheduler.*」と入力します。

    • [DONE] をクリックします。

  10. 必要に応じて、取り込まれたサンプル数を GKE リージョンまたはプロジェクトでグループ化します。

    • [Group by] をクリックします。

    • metric_type が選択されていることを確認します。

    • GKE リージョンでグループ化するには、[location] を選択します。

    • プロジェクトでグループ化するには、[project_id] を選択します。

    • [OK] をクリックします。

  11. 必要に応じて、取り込まれたサンプル数を GKE クラスタ名でグループ化します。

    • [Group by] をクリックします。

    • GKE クラスタ名でグループ化するには、attribution_dimensionattribution_id の両方が選択されていることを確認します。

    • [OK] をクリックします。

  12. 指標のリストの上にある列ヘッダーの [Value] をクリックして、指標のリストを降順で並べ替えます。

以下の手順では、Cloud Monitoring に取り込まれたサンプルレートが最も高い指標について説明しています。GKE コントロール プレーンの指標は取り込みサンプル数に応じて課金されるため、取り込まれるサンプルが最も多い指標に注意してください。

割り当て

コントロール プレーンの指標は、Cloud Monitoring API の「1 分あたりの時系列取り込みリクエスト」の割り当てを消費します。コントロール プレーンの指標を有効にする前に、その割り当ての直近のピーク使用量を確認してください。同じプロジェクトに多くのクラスタがある場合や、すでに割り当ての上限に近づいている場合は、コントロール プレーンの指標を有効にする前に割り当ての上限の引き上げをリクエストすることができます。

その他の指標

このドキュメントのシステム指標コントロール プレーン指標に加えて、Istio の指標も GKE クラスタで使用可能です。