クラスタの費用の詳細な内訳を表示する


このページでは、GKE の費用の割り当てを使用して、BigQuery への Cloud Billing データのエクスポートで Google Kubernetes Engine(GKE)クラスタの費用の内訳を表示する方法について説明します。

この情報を使用して、クラスタの費用をそのユーザーに分配できます。

潜在的なデータ容量の増加

GKE の費用の割り当てを有効にすると、BigQuery のストレージとクエリに関する費用が増える可能性があります。正確な増加額は、Pod とクラスタ間で使用する個別のラベルと Namespace の組み合わせの数によって異なります。

GKE の費用の割り当てを有効にしても、GKE 使用の合計費用は変わりません。エクスポート データに記載された費用項目の合計は変わらず、課金データのエクスポートに基づいて作成した既存のクエリとレポートでは同じ値が返されます。

GKE の費用の割り当てとクラスタ使用状況の測定

GKE の費用の割り当ては、次の点でクラスタ使用状況の測定とは異なります。

  • GKE の費用の割り当ては、クラスタ情報を取得するためのクラスタ使用状況の測定に代わる手段です。
  • GKE の費用の割り当てでは、Looker Studio テンプレートでデータを集計するのではなく、Cloud 請求先アカウントでクラスタの費用を計算します。
  • GKE の費用の割り当てを使用すると、Cloud Billing の Google Cloud コンソールと Cloud Billing の詳細なエクスポート データでクラスタの費用データを表示できます。

始める前に

始める前に、次の作業が完了していることを確認してください。

  • Google Kubernetes Engine API を有効にする。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得する。

制限事項

  • GKE の費用の割り当てデータは、Cloud Billing BigQuery の詳細な使用料金のエクスポートでのみ表示できます。
  • Google Cloud CLI のバージョン 392.0.0 以降が必要です。
  • GKE の費用の割り当てを有効にすると、その日から GKE リソースの追加項目が課金データのエクスポートに含まれるようになります。課金データのエクスポートでデータのバックフィルは行われません。
  • GKE の費用の割り当てを無効にすると、課金データのエクスポートに追加の項目が含まれなくなります。ただし、この機能を有効にしている間に生成された以前の項目が変更または削除されることはありません。
  • GKE の費用の割り当てデータは、利用したリソースではなくリソース リクエストに基づいています。リソース リクエスト、リソース上限、リソース使用量の違いについては、Kubernetes のベスト プラクティス: リソース リクエストとリソース上限についてのブログ投稿をご覧ください。
  • GKE の費用の割り当てでは、次のリソース SKU タイプがサポートされます。
    • Compute Engine VM Instance vCPU SKU
    • Compute Engine VM Instance RAM SKU
    • Compute Engine VM Instance GPU SKU
    • Compute Engine PD Capacity SKU
  • Pod に 50 を超える Kubernetes ラベルがある場合、Google Cloud コンソールの [Cloud Billing] セクションまたは Cloud Billing の詳細なエクスポートで、それらのラベルは使用できません。
  • GKE の費用の割り当てを有効にしてから Cloud Billing にデータが表示されるまでには、最長で 3 日ほどかかることがあります。
  • GKE の費用の割り当てには Persistent Disk のデータが含まれますが、以下の例外があります。
    • PersistentVolumeClaims または 汎用エフェメラル ボリュームを介して動的にプロビジョニングされた PersistentVolume リソースのみをサポートします。
    • サポートされるのは、Compute Engine 永続ディスクの CSI ドライバ、あるいは ReadWriteOnce または ReadWriteOncePod アクセスモードの非推奨の kubernetes.io/gce-pd ストレージ プラグインでプロビジョニングされた PersistentVolume リソースのみです。
    • 稼働時間が 30 分未満の Persistent Disk は追跡されない可能性があります。稼働時間が 30 分以上の Persistent Disk は常に追跡されます。
  • GKE の費用の割り当てでは、フレキシブル確約利用割引(CUD)はサポートされていません。フレキシブル CUD の対象となるリソース使用量は、名前空間 goog-k8s-unsupported-sku に表示されます。

GKE クラスタの費用を表示する

GKE の費用の割り当てを有効にすると、GKE ワークロードのクラスタ名と Namespace が、BigQuery への課金データのエクスポートの labels フィールドに表示されます。

リソース ラベル キー(labels.key リソースラベル値(labels.value
説明 Kubernetes ラベルの形式は k8s-label/${k8s-label-key} です。ここで、${k8s-label-key} は、Pod の Kubernetes ラベルのキーです。課金ラベル k8s-label/${k8s-label-key} の値は、対応する Kubernetes Pod ラベルと同じです。 Kubernetes ラベルキーが VM ラベルキーと競合する場合、Kubernetes ラベル値は VM ラベル値よりも優先されます。クラスタとノードプールのリソースラベルは、次の優先順位に従って高いものから順にリソースに適用されます。
  • 個々のリソース(インスタンスやストレージなど)
  • ノードプール
  • クラスタ
クラスタ名 goog-k8s-cluster-name [cluster-name]
Namespace k8s-namespace [namespace]
ワークロード タイプ k8s-workload-type [workload-type]
(例: apps/v1-Deploymentapps/v1-StatefulSetapps/v1-DaemonSetapps/v1-ReplicaSetbatch/v1-Jobbatch/v1-CronJobcore/v1-Pod
ワークロード名 k8s-workload-name [workload-name]

詳しくは、詳細な使用料金データのスキーマに関する記事をご覧ください。

また、オーバーヘッドと未割り当てリソースを追跡するために、次の Namespace が使用されます。

  • kube:system-overhead: Pod で使用できないノードリソース。これらのリソースは、Kubernetes フレームワーク(kubelet、kube-proxy、containerd など)を実行するためにシステムによって確保されます。これは、ノードの容量と割り当て可能なリソースの違いです。
  • kube:unallocated: リソースはワークロードによってリクエストされず、またシステム オーバーヘッドのためにもリクエストされません。

GKE がリソースの費用の割り当てを判断できない場合、エクスポート データには次のいずれかの値が含まれます。

  • goog-k8s-unknown: Cloud Billing で SKU を処理できませんでした。これは、新しい Compute Engine インスタンスがプロビジョニングされている場合に発生する可能性があります。たとえば、GKE がクラスタを自動スケーリングする場合など、ノードが起動またはシャットダウンするときに goog-k8s-unknown 値が変化することがあります。
  • goog-k8s-unsupported-sku: GKE の費用の割り当てでは、この SKU がサポートされていません。これは <blank>/NULL と同様に扱います。SKU にこの値が常にラベル付けされる保証はありません。
  • <blank>/NULL: GKE の費用の割り当てでは、このリソースは追跡されません。これは、GKE の費用の割り当てが有効になっていないか、リソースが GKE マネージド クラスタに属していない場合にする可能性があります。

Persistent Disk の費用は、Persistent Disk のバッキング PersistentVolumeClaims が Pod によって要求されたときに追跡されます。Persistent Disk の費用は、PersistentVolumeClaims が削除されるまで、要求元の Pod のメタデータ(Pod のラベルや Namespace など)をすべて継承します。削除されても、ポリシーの再要求に従って PersistentVolumes が保持されている PersistentVolumeClaims については、Persistent Disk の費用は未割り当てとして追跡されます。

PersistentVolumeClaims に直接適用されたラベルは、Google Cloud コンソールの [Cloud Billing] セクションや Cloud Billing の詳細なエクスポートに表示されません。

GKE の費用の割り当てを有効にする

gcloud CLI または Google Cloud コンソールを使用して、新規または既存のクラスタで GKE の費用の割り当てを有効にできます。

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

gcloud

--enable-cost-allocation フラグを使用してクラスタを作成します。

gcloud container clusters create CLUSTER_NAME \
    --enable-cost-allocation \
    --region=COMPUTE_REGION

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

  • CLUSTER_NAME: 新しいクラスタの名前。
  • COMPUTE_REGION: クラスタの Compute Engine のリージョン。ゾーンクラスタの場合は、--zone=COMPUTE_ZONE を使用します。

コンソール

新しいクラスタを作成するときに GKE の費用の割り当てを有効にするには、次の操作を行います。

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。

    Google Kubernetes Engine に移動

  2. [ 作成] をクリックします。

  3. クラスタを構成します。

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

  5. [その他] セクションで、[費用の割り当てを有効にする] チェックボックスをオンにします。

  6. 必要に応じてクラスタを構成し、[作成] をクリックします。

クラスタを更新する

gcloud

--enable-cost-allocation フラグを使用してクラスタを更新します。

gcloud container clusters update CLUSTER_NAME \
    --enable-cost-allocation

CLUSTER_NAME はクラスタの名前で置き換えます。

コンソール

既存のクラスタで GKE の費用の割り当てを有効にするには、次の操作を行います。

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。Google Kubernetes Engine に移動
  2. 変更するクラスタの名前をクリックします。
  3. [クラスタ] ページの [機能] セクションで、[費用の割り当て] の横にある をクリックします。
  4. [費用の割り当てを編集します] ダイアログで、[費用の割り当てを有効にする] チェックボックスをオンにします。
  5. [保存] をクリックします。

GKE の費用の割り当てが有効になっていることを確認する

gcloud

クラスタの説明を表示します。

gcloud container clusters describe CLUSTER_NAME

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

...
costManagementConfig:
  enabled: true
...

この出力で、costManagementConfig は GKE の費用の割り当てが有効であることを示します。

コンソール

既存のクラスタで GKE の費用の割り当てが有効になっているかどうかを確認するには、次の操作を行います。

  1. Google Cloud コンソールで Google Kubernetes Engine のページに移動します。Google Kubernetes Engine に移動
  2. 変更するクラスタの名前をクリックします。
  3. [クラスタ] ページの [機能] セクションで、[費用の割り当て] の横に、GKE の費用の割り当てが有効かどうか表示されます。

GKE の費用データをフィルタする

次のサンプルクエリは、サポートされているリソースタイプの GKE の費用を、クラスタ名、Namespace、ラベルでフィルタしてグループ化する方法を示しています。

BILLING_DATASET_TABLE は、BigQuery で作成したデータセットの名前に置き換えます。

テーブル名は gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID> のようになります。

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、クラスタの GKE の費用の割り当てを無効にします。

gcloud container clusters update CLUSTER_NAME \
    --no-enable-cost-allocation

作成したクラスタを削除することもできます。

次のステップ