クラスタ リソース 使用状況 について

このページでは、GKE 使用状況測定を使用して、Google Kubernetes Engine(GKE)クラスタの使用状況と組織内の個々のチームやビジネス ユニットとの関係を把握する方法について説明します。GKE 使用状況測定を使用しても、プロジェクトには課金されません。リソースの使用状況を細かく把握できます。

概要

GKE 使用状況測定では、クラスタのワークロードのリソース リクエストと実際のリソース使用量に関する情報がトラッキングされます。現在、測定対象となっているのは、CPU、GPU、TPU、メモリ、ストレージ、下りネットワーク(オプション)に関する情報です。Kubernetes の名前空間ラベル、またはその組み合わせを使用して、リソースの使用量を識別できます。

データは BigQuery に保存され、Google データポータルなどの外部ツールを使用して直接クエリまたはエクスポートして分析を行うことが可能です。

GKE 使用状況測定は、次のようなシナリオで役立ちます。

  • テナントごとにクラスタの名前空間が異なるマルチテナント クラスタでテナントごとのリソース リクエストと実際のリソース使用量をトラッキングする。
  • ワークロードに関連する Kubernetes オブジェクトに一意のラベルを割り当て、特定のクラスタで実行されているワークロードのリソース使用量を確認する。
  • リソース リクエストと実際のリソース使用量が大きく異なるワークロードを特定する。その結果、各ワークロードにリソースを効率的に割り当てることができます。

初期のベータ版からの変更点

GKE 使用状況測定では、初期ベータ版のリリース後に次の変更が行われています。

  • リソース リクエストに加えて、実際のリソース使用量がトラッキングされるようになりました。リソース使用量は、v1.12.8-gke.8 以降、v1.13.6-gke.7 以降、1.14.2-gke.8 以降を実行するクラスタでトラッキングされます。リソース消費量の測定結果は、BigQuery データセットの gke_cluster_resource_consumption テーブルに格納されます。以前は、リソース リクエストのみがトラッキングされていました。
  • TPU リクエスト(実際のリソース使用量ではない)がトラッキングされるようになりました。
  • カスタム マシンタイプを使用して、ノードでのリソース リクエストと実際のリソース使用量をトラッキングできるようになりました。
  • Google Cloud Console でクラスタを作成または更新する際に、GKE の使用状況測定を有効にできるようになりました。
  • BigQuery テーブルが削除されると、GKE 使用状況測定も自動的に再作成されるようになりました。履歴データは失われます。
  • BigQuery データセットが削除されても、GKE 使用状況測定は自動的には再作成されません。ユーザーは、データセットが存在することを確認する必要があります。

アップグレード

初期ベータ版の変更点に関しては、すべて下位互換性があり、データの変更や移行の必要はありません。

クラスタを、リソース使用状況測定をサポートしている GKE バージョンにアップグレードしても、自動的に有効にはなりません。--enable-resource-consumption-metering フラグを使用して明示的に有効にする必要があります。BigQuery データセットの追加のテーブルは、自動的に作成されます。どちらのテーブルも同じスキーマを使用します。

アップグレード後は、実際のリソース使用量に関する情報を追加する新しいデータポータル ダッシュボードを作成するだけです。

制限事項

サンプルの BigQuery クエリと Google データポータルのテンプレートを使用すると、BigQuery でエクスポートした Google Cloud Billing のデータと GKE 使用状況測定データを結合し、クラスタ、名前空間、ラベル別のコスト内訳を見積もることができます。GKE 使用状況測定データは、あくまでも参照目的のものであり、Google Cloud の請求に対する影響はありません。課金データに関しては、Google Cloud Billing が唯一の情報源となります。

次の制限が適用されます。

  • 特別契約割引やクレジットは考慮されません。
  • GKE の範囲外で作成されたリソースは、名前空間やラベルでトラッキングされません。
  • 使用状況レポートで追跡されるのは、Pod と PersistentVolumeClaim オブジェクトから取得したラベルのみです。
  • データポータルでは、バーストが可能なマシンタイプの可視化がサポートされていません。

要件

GKE 使用状況測定を使用するには、次の前提条件を満たす必要があります。

  • 実際のリソース使用量をトラッキングするには、クラスタで GKE 1.14.2-gke.3 以降を使用する必要があります。
  • E2 または N2 マシンタイプを使用している場合、クラスタのバージョンは GKE 1.15.11-gke.9 以降である必要があります。
  • BigQuery 課金データのエクスポートを有効にする必要があります。請求が BigQuery の使用量に関連付けられます。
  • gcloud コマンドのバージョン 250.0.0 以降が必要です。gcloud --version で確認します。
  • Google Cloud プロジェクトで BigQuery API を有効にする必要があります。 2018 年 7 月以降に GKE を初めて有効にした場合、この操作はすでに完了しています。

GKE 使用状況測定を有効にする

使用状況測定を有効にするには、まず、クラスタ、プロジェクト内の複数のクラスタまたはプロジェクト全体に対して BigQuery データセットを作成する必要があります。データセットとクラスタのマッピングの選択方法については、1 つ以上の BigQuery データセットの選択をご覧ください。

次に、新しいクラスタの作成時や既存のクラスタの変更時に、GKE 使用状況測定を有効にします。

必要に応じて、Google データポータル ダッシュボードを作成して、クラスタのリソース使用量を可視化できます。

BigQuery データセットを作成する

Google Cloud プロジェクトのクラスタで GKE 使用状況測定を使用するには、BigQuery データセットを作成してから、使用するクラスタを構成します。同じプロジェクト内のクラスタであれば、複数のクラスタのリソース使用量に関する情報を、単一の BigQuery データセットを使って格納できます。

詳細については、データセットの作成をご覧ください。データセットの Default table expirationNever に設定すると、テーブルの有効期限が無期限になります。ただし、2 番目の GKE 使用状況測定のベータ版では、テーブルの有効期限が切れると、空のテーブルが自動的に再作成されます。

クラスタを対象に GKE 使用状況測定を有効にする

gcloud コマンドまたは Cloud Console を使用して、新規または既存のクラスタで GKE 使用状況測定を有効にできます。

GKE v1.12.8-gke.8 以降または v1.13.6-gke.7 以降を実行するクラスタでは、GKE 使用状況測定を有効にすると、デフォルトでリソース使用量測定も有効になります。リソース リクエストのトラッキングを継続しつつ、リソースの使用量測定だけを無効にするには、gcloud コマンドを使用して GKE 使用状況測定を有効にする方法をご覧ください。

下りネットワークの測定は、デフォルトでは無効になっています。有効にするには、オプション: 下りネットワーク測定を有効にするの注意事項と手順をご覧ください。

新しいクラスタを作成する

クラスタを作成するには、gcloud ツールや Google Cloud Console を使用します。

gcloud

クラスタを作成し、GKE 使用状況測定を有効にするには、次のコマンドを実行します。

gcloud container clusters create cluster-name \
  --resource-usage-bigquery-dataset resource-usage-dataset

GKE v1.12.8-gke.8 以降、または v1.13.6-gke.7 以降を実行するクラスタでは、リソース使用量測定がデフォルトで有効になります。リソース使用量測定を無効にして、リソース リクエストのみをトラッキングするには、上記のコマンドに --no-enable-resource-consumption-metering フラグを追加します。なお、このトピックの残りのサンプルクエリについても、リソース使用量のクエリを実行しないように変更する必要があります。

BigQuery データセット内に必要なテーブルがある場合は、クラスタの起動時に作成されます。

Console

クラスタを作成し、GKE 使用状況測定を有効にするには:

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. [クラスタを作成] ボタンをクリックします。

  3. ナビゲーション パネルの [クラスタ] の下の [機能] をクリックします。

  4. [GKE 使用状況測定を有効にする] を選択します。

  5. BigQuery データセットの名前を入力します。

  6. オプション: 下りネットワーク測定を有効にするの注意事項と手順を確認して、[下りネットワーク測定を有効にする] を有効にします。

  7. クラスタの構成を続行して、[作成] をクリックします。

既存クラスタの構成

gcloud

既存のクラスタで GKE 使用状況測定を有効にするには、次のコマンドを実行します。

gcloud container clusters update cluster-name \
  --resource-usage-bigquery-dataset resource-usage-dataset

GKE v1.12.8-gke.8 以降、または v1.13.6-gke.7 以降を実行するクラスタでは、リソース使用量測定がデフォルトで有効になります。リソース使用量測定を無効にして、リソース リクエストのみをトラッキングするには、上記のコマンドに --no-enable-resource-consumption-metering フラグを追加します。なお、このトピックの残りのサンプルクエリについても、リソース使用量のクエリを実行しないように変更する必要があります。

--resource-usage-bigquery-dataset フラグの値を変更して、既存のクラスタが使用状況測定データの保存に使用するデータセットを変更することもできます。

クラスタが更新されると、必要に応じて BigQuery データセット内にテーブルが作成されます。

Console

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. 変更するクラスタの [編集] ボタン(鉛筆の形をしたアイコン)をクリックします。

  3. GKE 使用状況測定を有効にします。

  4. BigQuery データセットの名前を入力します。

  5. 必要に応じて、オプション: 下りネットワーク測定を有効にするの注意事項と手順を確認して、[下りネットワーク測定を有効にする] を有効にします。

  6. クラスタの構成を続行して、[保存] をクリックします。

オプション: 下りネットワーク測定を有効にする

デフォルトでは、下りネットワークのデータは収集またはエクスポートされません。下りネットワークを測定するには、各ノードでネットワーク測定エージェント(NMA)を実行する必要があります。NMA は特権ポッドとして実行されます。ノード上でリソース(CPU、メモリ、ディスク容量)を使用し、カーネルで nf_conntrack_acct sysctl フラグを有効にします(接続トラッキング フローのアカウンティング用)。

これらの注意事項をよく理解している場合は、GKE の使用状況測定で使用するように下りネットワークの追跡を有効にできます。下りネットワークのトラッキングを有効にするには、クラスタの作成時または更新時に --enable-network-egress-metering オプションを指定するか、Google Cloud Console で GKE 使用状況測定を有効にする際に、[下りネットワーク測定を有効にする] を選択します。

GKE 使用状況測定が有効かどうか確認する

GKE 使用状況測定がクラスタで有効になっているかどうか、どの BigQuery データセットにクラスタのリソース使用量データが格納されているかを確認するには、gcloud container clusters describe コマンドを使用します。

gcloud container clusters describe cluster-name \
  --format="value(resourceUsageExportConfig)"

GKE 使用状況測定が有効でない場合は、出力が空になります。有効な場合は、クラスタで使用される BigQuery データセットが次のように出力されます。

bigqueryDestination={u'datasetId': u'test_usage_metering_dataset'}

GKE 使用状況測定を無効にする

gcloud

クラスタで GKE 使用状況測定を無効にするには、次のコマンドを実行します。

gcloud container clusters update cluster-name \
    --clear-resource-usage-bigquery-dataset

Console

  1. Cloud Console で Google Kubernetes Engine のメニューに移動します。

    Google Kubernetes Engine のメニューに移動

  2. 変更するクラスタの [編集] ボタン(鉛筆の形をしたアイコン)をクリックします。

  3. GKE 使用状況測定を無効にします。

  4. [保存] をクリックします。

1 つ以上の BigQuery データセットを選択する

データセットでは、プロジェクト内に複数のクラスタの GKE 使用状況測定データを保持できます。使用するデータセットの数はセキュリティ要件によって異なります。

  • プロジェクト全体で 1 つのデータセットを使用すると、管理が容易になります。
  • クラスタごとにデータセットを使用すると、データセットに対するアクセス権をきめ細かく委任できます。
  • クラスタの関連グループごとにデータセットを使用すると、必要に応じてシンプルさときめ細かさを適切に組み合わせることができます。

データポータル ダッシュボードを使用した GKE 使用状況測定データの可視化

GKE 使用状況測定データは、データポータル ダッシュボードを使用して可視化することができます。クラスタ名、名前空間、ラベルでデータをフィルタリングしたり、レポート期間を動的に調整したりできます。データポータルと BigQuery の操作に習熟している場合は、ダッシュボードを完全にカスタマイズできます。また、GKE 使用状況測定専用のダッシュボードのクローンも作成できます。

ダッシュボードを使用すると、クラスタに対するリソース リクエストと使用量を可視化できます。

要件

  1. まだ有効になっていない場合、Google Cloud Billing のデータを BigQuery にエクスポートできるようにします。このプロセスでデータセットを作成しますが、データセット内にテーブルが表示され、更新されるまでに最大 5 時間かかります。テーブルが表示されると、gcp_billing_export_v1_billing-account-id のような名前になります。
  2. プロジェクト内の少なくとも 1 つのクラスタで GKE 使用状況測定を有効にします。BigQuery データセットに選択した名前をメモしておきます。
  3. データポータルが有効になっていない場合は有効にします。
  4. 次の情報を収集します。ダッシュボードの構成時に必要になります。

    • Cloud Billing エクスポート データセット ID とデータテーブル
    • GKE 使用状況測定データセット ID
  5. バージョン 2.0.58 以上の BigQuery CLI が必要です。bq version を実行してバージョンを確認し、gcloud components update を実行して BigQuery CLI を更新できます。

BigQuery の費用内訳表を作成する

  1. クエリ テンプレートをダウンロードします。

    • 使用量測定を有効にした場合は、this template をダウンロードしてください。
    • 使用量測定を有効にしていない場合は、this template をダウンロードしてください。
  2. 次の環境変数を設定します。

    export GCP_BILLING_EXPORT_TABLE_FULL_PATH=YOUR_BILLING_EXPORT_TABLE_PATH
    export USAGE_METERING_PROJECT_ID=YOUR_USAGE_METERING_PROJECT_ID
    export USAGE_METERING_DATASET_ID=YOUR_USAGE_METERING_DATASET_ID
    export USAGE_METERING_START_DATE=YOUR_USAGE_METERING_START_DATE
    export COST_BREAKDOWN_TABLE_ID=YOUR_COST_BREAKDOWN_TABLE_ID
    export USAGE_METERING_QUERY_TEMPLATE=YOUR_TEMPLATE_PATH
    export USAGE_METERING_QUERY=YOUR_RENDERED_QUERY_PATH
    

    以下を置き換えます。

    • YOUR_BILLING_EXPORT_TABLE_PATH - 生成された課金データのエクスポート テーブルのパスです(PROJECT_ID.DATASET_ID.gcp_billing_export_v1_xxxx 形式)。
    • YOUR_USAGE_METERING_PROJECT_ID: Google Cloud Platform プロジェクトの名前です。
    • YOUR_USAGE_METERING_DATASET_ID - BigQuery で作成したデータセットの名前です。
    • YOUR_USAGE_METERING_START_DATE - クエリの開始日です(形式は YYYY-MM-DD)。
    • YOUR_COST_BREAKDOWN_TABLE_ID - データポータルへの入力として使用される新しいテーブルの名前です。
    • YOUR_TEMPLATE_PATH - ダウンロードしたクエリ テンプレートの名前です。
    • YOUR_RENDERED_QUERY_PATH - レンダリングされたクエリのパスの名前です。

    次に例を示します。

    export GCP_BILLING_EXPORT_TABLE_FULL_PATH=my-billing-project.my_billing_export.gcp_billing_export_v1_xxxx
    export USAGE_METERING_PROJECT_ID=my-billing-project
    export USAGE_METERING_DATASET_ID=my_billing_export
    export USAGE_METERING_START_DATE=2020-05-01
    export COST_BREAKDOWN_TABLE_ID=usage_metering_cost_breakdown
    export USAGE_METERING_QUERY_TEMPLATE=usage_metering_query_template_request_only.sql
    export USAGE_METERING_QUERY=cost_breakdown_query.sql
    

  3. 次のコマンドをコピーして実行し、テンプレートからクエリをレンダリングします。

    sed \
    -e "s/\${fullGCPBillingExportTableID}/$GCP_BILLING_EXPORT_TABLE_FULL_PATH/" \
    -e "s/\${projectID}/$USAGE_METERING_PROJECT_ID/" \
    -e "s/\${datasetID}/$USAGE_METERING_DATASET_ID/" \
    -e "s/\${startDate}/$USAGE_METERING_START_DATE/" \
    "$USAGE_METERING_QUERY_TEMPLATE" \
    > "$USAGE_METERING_QUERY"
    

  4. 次のコマンドを実行して、新しいコスト内訳テーブルを作成します。このテーブルは 24 時間ごとに更新されます。

    bq query \
    --project_id=$USAGE_METERING_PROJECT_ID \
    --use_legacy_sql=false \
    --destination_table=$USAGE_METERING_DATASET_ID.$COST_BREAKDOWN_TABLE_ID \
    --schedule='every 24 hours' \
    --display_name="GKE Usage Metering Cost Breakdown Scheduled Query" \
    --replace=true \
    "$(cat $USAGE_METERING_QUERY)"
    

BigQuery データソースを作成する

  1. データソースを開きます。
  2. 画面右下にある + アイコンをクリックして、データソースを追加します。
  3. [BigQuery] を選択します。
  4. [Custom Query] を選択して、プロジェクト ID を選択します。
  5. データソースに名前を付けます。ウィンドウの上部にある [無題のデータソース] をクリックして、テキストをわかりやすい名前に置き換えます。
  6. 次のクエリをクエリエディタに貼り付けます。

    SELECT
      *
    FROM
      `PROJECT_ID.USAGE_METERING_DATASET.COST_BREAKDOWN_TABLE_ID`
    
  7. 画面右上隅にある [Connect] をクリックします。

データポータルのダッシュボードを作成する

プロジェクトにコピーできるダッシュボードが作成されました。ダッシュボードをコピーするときに、いま作成した 3 つのデータソースを選択するように求められます。

  1. このダッシュボードのリンクをクリックします。
  2. 画面右上隅にあるコピーボタン このレポートのコピーを作成するアイコン をクリックします。
  3. 先ほど作成したデータソースを選択します。
  4. [Create Report] をクリックします。

ダッシュボードが作成され、プロジェクトのデータポータル レポートのリストにいつでもアクセスできるようになります。

データポータルのダッシュボードを使用する

ダッシュボードには複数のレポートが含まれています。

使用状況の内訳
同じ BigQuery のデータソースに使用状況測定データを送信するすべてのクラスタに関して、全体的なクラスタ使用率が表示されます。また、リソースタイプ(CPU、メモリ、下りネットワークなど)に関する詳細情報が名前空間ごとに表示されます。 レポートデータを 1 つ以上のクラスタまたは名前空間に制限できます。
未割り当てリソースの使用状況の内訳
このレポートは上のレポートと似ていますが、未割り当てリソースがすべての名前空間に均等に配分されています。未割り当てリソースには、アイドル リソースや、その時点で GKE 使用状況測定によって特定のテナントに割り当てられていないリソースが含まれます。
費用の傾向 - 名前空間別の詳細
同じ BigQuery のデータソースに使用状況測定データを送信するすべてのクラスタに関して、名前空間別の使用量の傾向が表示されます。1 つまたは複数のクラスタ、名前空間、リソース、SKU を選択できます。
費用の傾向 - ラベル別の詳細
同じ BigQuery のデータソースに使用状況測定データを送信するすべてのクラスタに関して、費用の傾向が表示されます。1 つまたは複数のクラス、リソース、ラベル名、ラベル値を選択できます。
使用量をベースとした測定
同じ BigQuery のデータソースに使用状況測定データを送信するすべてのクラスタに関して、使用量の傾向が表示されます。1 つまたは複数の名前空間、ラベルキー、ラベル値を選択できます。このレポートは、少なくとも 1 つのクラスタでリソース使用量測定が有効になっている場合にのみ生成されます。

画面左上の矢印でページを変更できます。ページに表示する期間を日付ピッカーで変更できます。組織のメンバーとレポートを共有したり、アクセスを取り消したりするには、Share Report リンクをクリックします。人の絵に + 記号が付いたアイコンをクリックしてください。

レポートをプロジェクトにコピーした後、データポータルのレポート エディタでレポートをカスタマイズできます。Google が提供するレポート テンプレートが変更されても、コピーに影響はありません。

BigQuery を使用した GKE 使用状況測定データの探索

BigQuery を使用するリソース リクエストに関するデータを表示するには、関連する BigQuery データセット内の gke_cluster_resource_usage テーブルに対してクエリを実行します。

実際のリソースの使用量に関するデータを表示するには、gke_cluster_resource_consumption テーブルに対してクエリを実行します。下りネットワークの使用量のデータについては、リソース リクエストに下りの概念がないことから、gke_cluster_resource_usage に保持されます。

BigQuery でのクエリの使用の詳細については、クエリの実行をご覧ください。スキーマのフィールドは固定ですが、今後さらに多くのフィールドが追加される可能性があります。

これらのクエリは簡単な例です。クエリをカスタマイズして必要なデータを見つけてください。

リソース リクエストに対するクエリ

SELECT
  cluster_name,
  labels,
  usage
FROM
  'cluster-gcp-project.usage-metering-dataset.gke_cluster_resource_usage'
WHERE
  namespace="namespace-name"

リソース使用量に対するクエリ

SELECT
  cluster_name,
  labels,
  usage
FROM
  'cluster-gcp-project.usage-metering-dataset.gke_cluster_resource_consumption'
WHERE
  namespace="namespace-name"

その他の例

より高度な例を見るには、以下のセクションを展開してください。

BigQuery における GKE 使用量測定のスキーマ

次の表では、BigQuery データセットにおける GKE 使用状況測定テーブルのスキーマについて説明しています。リソース使用量測定とリソース リクエストをサポートする GKE バージョンをクラスタで実行している場合には、同じスキーマを持つテーブルが追加で作成されます。

項目 タイプ 説明
cluster_location STRING GKE クラスタが存在する Compute Engine のゾーンまたはリージョンの名前。
cluster_name STRING GKE クラスタの名前。
namespace STRING 使用状況データの生成元の Kubernetes 名前空間。
resource_name STRING cpu、memory、storage などのリソース名。
sku_id STRING 基盤となる Google Cloud クラウド リソースの SKU ID。
start_time TIMESTAMP 使用開始時刻の UNIX タイムスタンプ。
end_time TIMESTAMP 使用終了時刻の UNIX タイムスタンプ。
fraction FLOAT クラウド リソースの使用量の割合(使用状況別)。1 つの名前空間が専用のクラウド リソースを使用する場合、その割合は常に 1.0 になります。複数の名前空間で共有されるリソースの場合は、リクエストされた量を基になるクラウド リソースの合計量で割って計算されます。
cloud_resource_size INTEGER 基盤となる Google Cloud リソースのサイズ。たとえば、n1-standard-2 インスタンスの vCPU のサイズは 2 になります。
labels.key STRING 使用状況に関連する Kubernetes ラベルのキー。
labels.value STRING 使用状況に関連する Kubernetes ラベルの値。
project.id STRING GKE クラスタが存在するプロジェクトの ID。
usage.amount FLOAT 使用された usage.unit の量。
usage.unit STRING リソースの使用状況を測定する基本単位。たとえば、標準ストレージの基本単位はバイト秒です。

GKE 使用状況測定データが BigQuery に書き込まれるタイミングの把握

GKE 使用状況測定が BigQuery の指標に使用状況レコードを書き込む条件は 2 つあります。

  1. ポッドのフェーズが succeeded に変更された、またはポッドのフェーズが failed に変更された、またはポッドが削除されたとき。
  2. ポッドがまだ実行中に、1 時間ごとのスケジュールのレコードの書き込みタイムスタンプに到達したとき。

    GKE 使用状況測定では、現在実行中のすべての Pod の Pod 使用状況レコードを BigQuery に書き込む時間単位のスケジュールが生成されます。スケジュールのタイムスタンプは、すべてのクラスタ間で同じではありません。

    つまり、そのタイムスタンプにおいて複数の Pod が動作している場合、同じ end_time で複数の使用状況レコードが検出されます。これらの使用状況レコードの end_time は、時間単位のスケジュールのタイムスタンプを表します。

    さらに、複数のポッドが数時間実行されている場合、BigQuery テーブルでは、使用状況レコードのセットの end_time が別の使用状況レコードのセットの start_time と一致します。

次のステップ