GKE の指標を管理する

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

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

  • システム指標: 重要なシステム コンポーネントの指標。CPU、メモリ、ストレージなどの低レベルのリソースを記述します。
  • Managed Service for Prometheus: Prometheus を大規模に手動で管理、運用しなくても、Prometheus を使用してワークロードのモニタリングや、アラートの送信を行うことができます。
  • オブザーバビリティ指標のパッケージ:

    • コントロール プレーンの指標: API サーバーやスケジューラなどの特定のコントロール プレーン コンポーネントからエクスポートされた指標。
    • Kube 状態指標: Kube 状態サービスからエクスポートされた厳選された指標のセット。Pod、Deployment などの Kubernetes オブジェクトの状態のモニタリングに使用されます。完全なセットについては、Kube 状態指標を使用するをご覧ください。

      Kube 状態パッケージはマネージド ソリューションです。スクレイピング間隔の管理や他のリソースのスクレイピングが必要な場合など、より優れた柔軟性が求められる場合は、オープンソースの Kube 状態指標サービスの独自のインスタンスをデプロイします。詳細については、Google Cloud Managed Service for Prometheus エクスポータのドキュメントで Kube 状態指標をご覧ください。

システム指標

クラスタが作成されると、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 の統合の詳細については、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 コンソールで [Kubernetes Engine] を選択し、[クラスタ] を選択するか、次のボタンをクリックします。

    Kubernetes クラスタに移動

  2. クラスタの名前をクリックし、[オブザーバビリティ] タブを選択します。

  3. 機能のリストから [コントロール プレーン] を選択します。

  4. [パッケージを有効にする] をクリックします。

    コントロール プレーンの指標がすでに有効になっている場合は、コントロール プレーンの指標のグラフが表示されます。

クラスタの [詳細] タブでコントロール プレーンの指標を有効にするには、次の操作を行います。

  1. Google Cloud コンソールで [Kubernetes Engine] を選択し、[クラスタ] を選択するか、次のボタンをクリックします。

    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 がインストールされているデバイスでターミナル ウィンドウを開きます。操作を行う一つの方法として、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

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

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

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

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

パッケージ: Kube 状態指標

厳選された Kube 状態指標のセットを Prometheus 形式で Cloud Monitoring に送信するように GKE クラスタを構成できます。この Kube 状態指標のパッケージには、Pod、Deployment、StatefulSet、DaemonSet、HorizontalPodAutoscaler、永続ボリューム、永続ボリュームの要求の指標が含まれています。

要件

Kube 状態指標を収集するには、GKE クラスタが次の要件を満たしている必要があります。

Kube 状態指標のパッケージを有効にすると同時に、システム指標と Managed Service for Prometheus を有効にできます。新しいクラスタでは、Managed Service for Prometheus マネージド コレクションがデフォルトで有効になっています。

セルフデプロイ kube 状態指標パッケージを実行している場合は、マネージド kube 状態指標を有効にする前にパッケージの収集を停止する必要があります。そうしないと、指標が重複するか、不正確になる場合があります。

Kube 状態指標の収集を構成する

既存の GKE クラスタで Kube 状態指標を有効にする手順は次のとおりです。

コンソール

クラスタの Kube 状態指標は、クラスタの [オブザーバビリティ] タブで有効にできます。指標パッケージを有効にする前に、使用可能なグラフと指標をプレビューすることもできます。

Google Cloud コンソールでは、Kube 状態指標のセットが、フィルタ メニューで 2 つのアイテムに分割されています。

  • ワークロードの状態: Pod、Deployment、StatefulSet、DaemonSet、HorizontalPodAutoscaler の指標が含まれます。
  • [ストレージ] > [永続性]: 永続ボリュームと永続ボリュームの要求の指標が含まれます。

いずれかまたは両方の指標セットを有効にできます。

クラスタの [オブザーバビリティ] タブから Kube 状態指標を有効にするには、次の操作を行います。

  1. Google Cloud コンソールで [Kubernetes Engine] を選択し、[クラスタ] を選択するか、次のボタンをクリックします。

    Kubernetes クラスタに移動

  2. クラスタの名前をクリックし、[オブザーバビリティ] タブを選択します。

  3. 機能のリストから [ワークロードの状態] または [ストレージ] > [永続性] を選択します。

  4. [パッケージを有効にする] をクリックします。

    Kube 状態指標パッケージがすでに有効になっている場合は、代わりに Kube 状態指標の一連のグラフが表示されます。

クラスタの [詳細] タブで Kube 状態指標を有効にするには、次の操作を行います。

  1. Google Cloud コンソールで [Kubernetes Engine] を選択し、[クラスタ] を選択するか、次のボタンをクリックします。

    Kubernetes クラスタに移動

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

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

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

  5. [コンポーネント] プルダウン メニューで、指標の収集元となる Kube 状態コンポーネントを選択します。

    • 永続ボリューム(ストレージ)
    • Pod
    • Deployment
    • StatefulSet
    • DaemonSet
    • Horizontal Pod Autoscaler
  6. [OK] をクリックします。

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

gcloud

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

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

    Cloud Shell をアクティブにする

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

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

    • DAEMONSET
    • DEPLOYMENT
    • HPA
    • POD
    • STATEFULSET
    • STORAGE - このオプションには、永続ボリュームの指標と永続ボリュームの要求が含まれます。

    たとえば、既存のクラスタ内の Deployment と Pod の指標を収集するには、次のコマンドを実行します。

    gcloud container clusters update CLUSTER_ID \
      --zone=ZONE \
      --project=PROJECT_ID \
      --enable-managed-prometheus
      --monitoring=SYSTEM,DEPLOYMENT,POD
    

    --monitoring フラグに指定された値のセットは、以前の設定をオーバーライドします。前の例で、クラスタが DAEMONSET 指標を収集するように以前に構成されている場合、サンプル コマンドはこれらの指標の収集をオフにします。

Terraform

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

Kube 状態指標の使用

次の情報については、Kube 状態指標を使用するをご覧ください。

  • Kube 状態指標のクエリに関する情報。
  • Kube 状態指標の表。

Kube 状態指標を可視化するためのダッシュボードは、Google Cloud コンソールの GKE [オブザーバビリティ] タブで確認できます。これらのダッシュボードの詳細については、オブザーバビリティの指標を表示するをご覧ください。

オブザーバビリティ パッケージの料金と割り当て

オブザーバビリティ パッケージの指標は Cloud Monitoring システムの指標ではなく、指標の使用に対して課金されます。このセクションの情報は以下の対象に適用されます。

料金

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

Monitoring の料金について

Cloud Monitoring を使用すると、最も多くのサンプルを書き込んでいるコントロール プレーンや Kube 状態指標を特定できます。これらの指標は費用に大きく影響します。最もコストの高い指標を特定したら、取得構成を変更して、それらの指標を適切にフィルタリングできます。

Cloud Monitoring の [指標の管理] ページでは、オブザーバビリティに影響を与えることなく、課金対象の指標に費やす金額を制御するために役立つ情報が提供されます。[指標の管理] ページには、次の情報が表示されます。

  • 指標ドメイン全体と個々の指標での、バイトベースとサンプルベースの両方の課金に対する取り込み量。
  • 指標のラベルとカーディナリティに関するデータ。
  • アラート ポリシーとカスタム ダッシュボードでの指標の使用。
  • 指標書き込みエラーの割合。

[指標の管理] ページを表示するには、次の操作を行います。

  1. Google Cloud コンソールで [Monitoring] を選択します。次に、[ 指標の管理] または次のボタンをクリックします。

    [指標の管理] に移動

  2. ツールバーで時間枠を選択します。デフォルトでは、[指標の管理] ページには、過去 1 日間に収集された指標に関する情報が表示されます。

[指標の管理] ページの詳細については、指標の使用状況の表示と管理をご覧ください。

取り込まれるサンプル数が最も多いコントロール プレーン指標または Kube 状態指標を特定するには、次の操作を行います。

  1. Google Cloud コンソールで [Monitoring] を選択します。次に、[ 指標の管理] または次のボタンをクリックします。

    [指標の管理] に移動

  2. [取り込まれた課金対象のサンプル数] スコアカードで、[グラフを表示] をクリックします。

  3. [名前空間ボリュームの取り込み] グラフを探して、 [その他のグラフ オプション] をクリックします。

  4. [指標] フィールドで、次のリソースと指標が選択されていることを確認します。
    Metric Ingestion AttributionSamples written by attribution id

  5. [フィルタ] ページで、次の操作を行います。

    1. [ラベル] フィールドで、値が attribution_dimension であることを確認します。

    2. [比較] フィールドで、値が = (equals) であることを確認します。

    3. [] フィールドで [cluster] を選択します。

  6. [グループ条件] の設定をクリアします。

  7. 必要に応じて、特定の指標のみをフィルタします。たとえば、コントロール プレーンの API サーバー指標はすべて指標名の一部として「apiserver」を含み、Kube 状態の Pod 指標はすべて指標名の一部として「kube_pod」を含むため、これらの文字列を含む指標をフィルタできます。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  10. 各指標の取り込み量を確認するには、[グラフテーブルの両方] の切り替えボタンで、[両方] を選択します。このテーブルの [] 列には、各指標の取り込み量が表示されます。

    [] 列のヘッダーを 2 回クリックして、取り込み量の降順で指標を並べ替えます。

以下の手順では、Cloud Monitoring に取り込まれたサンプルレートが最も高い指標について説明しています。オブザーバビリティ パッケージの指標は取り込まれたサンプル数に応じて課金されるため、取り込まれるサンプルが最も多い指標に注意してください。

割り当て

コントロール プレーンの指標と Kube 状態指標には、Cloud Monitoring API の「1 分あたりの時系列取り込みリクエスト数」の割り当てが利用されます。指標パッケージを有効にする前に、その割り当ての直近のピーク使用量を確認してください。同じプロジェクトに多くのクラスタがある場合や、すでに割り当ての上限に近づいている場合は、いずれかのオブザーバビリティ パッケージを有効にする前に割り当ての上限の引き上げをリクエストできます。

その他の指標

このドキュメントで説明するシステム指標と指標パッケージに加えて、Istio の指標も GKE クラスタで使用できます。料金については、Cloud Monitoring の料金をご覧ください。