Cloud Marketplace で Terraform Kubernetes アプリを提供する

Google Cloud Marketplace の Terraform Kubernetes アプリを使用すると、お客様は Terraform を使用して、コンテナ化されたアプリを Google Kubernetes Engine にデプロイできます。ユーザーは Terraform Kubernetes アプリの使用に対して課金されませんが、リソースの使用に対して課金されます。 Google Cloud Terraform Kubernetes アプリは、Cloud Marketplace のすべてのユーザーに公開するか、Private Offers を使用して非公開にすることができます。

Cloud Marketplace で提供する Terraform Kubernetes アプリは、Artifact Registry でホストする Helm チャートを使用して構成を定義します。設定が完了したら、Producer Portal を使用してアプリを Cloud Marketplace にオンボーディングします。

始める前に

Terraform Kubernetes アプリのオンボーディングの概要

Cloud Marketplace で Terraform Kubernetes アプリを提供するには、次の手順を行います。

  1. Cloud Marketplace 用に Terraform Kubernetes アプリを準備します これには、Artifact Registry の設定と、アプリのイメージの push が含まれます。

  2. 料金情報 を Producer Portal でアプリに追加します。

  3. Producer Portal でアプリのデプロイを構成します 。Terraform モジュール、Helm チャート、コンテナ イメージなどが含まれます。

  4. ラベルを追加 して、アプリに関連する Google Cloud リソースの使用量を追跡します。

  5. Cloud Marketplace にアプリを公開します。 アプリをオンボーディングする際に、アプリのさまざまな部分を送信して審査を受けます。Cloud Marketplace チームが送信内容を審査し、問題がある場合は承認前に問題の解決をサポートします。すべての送信が承認されると、数分以内にプロダクトを公開してリリースできます。

プロダクト固有の要件

Cloud Marketplace で提供するすべてのプロダクトは、 Cloud Marketplace リスティング要件に準拠している必要があります。

Terraform Kubernetes アプリは、次の追加要件を満たす必要があります。

  • アプリは、x86 プロセッサを使用する GKE ノードで実行する必要があります。
  • アプリのすべての Helm チャートとコンテナ イメージは、Terraform Kubernetes アプリで使用しているのと同じリポジトリとプロジェクトの Artifact Registry レジストリにアップロードする必要があります。
  • Artifact Registry レジストリには Helm チャートを含める必要があります。
  • アプリに関連する リソースの使用量を追跡するには、アプリの Helm チャートにラベルを追加する必要があります。 Google Cloud 詳細については、 ラベルを使用して Kubernetes アプリに関連する使用量を追跡するをご覧ください。
  • Terraform モジュールは、Terraform Kubernetes アプリで使用しているのと同じプロジェクトにある Cloud Storage バケットに ZIP ファイルとしてホストする必要があります。
  • Terraform モジュールのホストに使用する Cloud Storage バケットでバージョニングを有効にする必要があります。
  • コマンドラインからアプリをデプロイする手順、アプリを構成する手順、アプリを使用する手順を記載したユーザーガイドを含める必要があります。詳細については、 このドキュメントのユーザーガイドの要件をご覧ください。
  • 不安定な API からユーザーを保護するために、ベータ版または一般利用可能な Kubernetes リソースのみを使用します。

アプリのイメージの要件

アプリのイメージは、次の要件を満たす必要があります。

  • アプリのイメージはすべて、リリース トラックと現在のバージョンでタグ付けする必要があります。たとえば、 2.0 リリース トラックでバージョン 2.0.5 をリリースする場合、対応するすべてのイメージに 2.0 と 2.0.5 のタグ付けをする必要があります。詳細については、 リリースを整理するをご覧ください。
  • アプリのイメージはすべて、イメージ マニフェストに次のアノテーションを含める必要があります。

    com.googleapis.cloudmarketplace.product.service.name=services/SERVICE_NAME
    

    SERVICE_NAME は、サービスの名前に置き換えます(例: example.endpoints.example-project.cloud.goog)。プロダクトのサービス名は、Producer Portal の [概要] ページの [サービス名] 列にあります。アノテーションの詳細については、GitHub の Open Container Initiative の ドキュメント アノテーション をご覧ください。

Artifact Registry リポジトリの要件

アプリの Helm チャートとコンテナ イメージは、単一の Artifact Registry リポジトリの一部である必要があります。

たとえば、Artifact Registry リポジトリが us-docker.pkg.dev/exampleproject の場合、アプリの Helm チャートとコンテナ イメージは次のようになります。

  • us-docker.pkg.dev/exampleproject/exampleapp/chart
  • us-docker.pkg.dev/exampleproject/exampleapp/image1
  • us-docker.pkg.dev/exampleproject/exampleapp/image2

Terraform モジュールの要件

お客様は Terraform モジュールを使用して、Infrastructure Manager を介して Cloud Marketplace からプロダクトをデプロイします。Terraform モジュールは、アプリの Kubernetes 構成をパッケージ化します。

サンプル モジュールを起点として使用し、パートナー ガイドに沿ってアプリと互換性のある Terraform モジュールを構築します。

アプリに渡されるパラメータ

Terraform モジュールでは、お客様がアプリを選択するときに収集する必要があるパラメータを宣言しなければなりません。これらのパラメータは、ユーザーがアプリをデプロイするときに Helm チャート コンテナに渡されます。

これらのパラメータを構成するには、Terraform モジュールに schema.yaml ファイルを含める必要があります。

schema.yaml を作成する方法については、GitHub でスキーマを作成するガイドをご覧ください。

GPU クラスタのリクエスト

アプリで特定の GPU が必要な場合、または GPU が多用される場合は、deployer スキーマを使用して、クラスタ内の GPU のタイプと数を 指定できます。 GPU のニーズを指定すると、支援されるクラスタの作成が無効になります。

アプリで汎用 Nvidia GPU または特定の Nvidia プラットフォーム をリクエストできます。

アプリのユーザーガイドの要件

アプリのユーザーガイドには、次の情報を含める必要があります。

  • 概要: 基本機能と 構成オプションを含むアプリの概要。このセクションは、Cloud Marketplace で公開されているアプリにリンクする必要もあります。
  • 初回設定: これには、Helm を構成する手順と、 アプリケーション CustomResourceDefinition(CRD)をインストールしてクラスタで アプリケーション リソースを管理できるようにする手順が含まれます。
  • インストール: これには以下が該当します:
  • 基本的な使用法: 次のタスクのガイド。
    • ユーザー名とパスワードを変更する方法
    • 管理コンソールに接続する方法(該当する場合)
    • クライアント ツールに接続し、サンプル コマンドを実行する方法(該当する場合)
    • Ingress を有効にし、TLS 証明書をインストールする方法(該当する場合)
  • バックアップと復元: アプリの状態をバックアップする方法と、 バックアップからアプリの状態を復元する方法。
  • イメージの更新: パッチまたは マイナー アップデート用のアプリイメージを更新する方法。
  • スケーリング: アプリをスケーリングする方法(該当する場合)。
  • 削除: アプリを削除する方法と、 PersistentVolumeClaims など、残っている可能性のあるリソースをクリーンアップする方法。

Terraform Kubernetes アプリの料金モデル

アプリには、次のいずれかの料金モデルを選択できます。

  • 無料: お客様は Google Cloud リソースの使用料のみを 支払います。
  • 従量制: お客様は、お客様が 選択した測定値(指標)に基づいてアプリの料金を支払います。たとえば、コンテナ数やストレージ時間などです。 従量制料金モデルを選択する場合は、アプリで使用状況情報を測定して Google に報告する必要があります。

従量制料金で Terraform Kubernetes アプリを公開したら、アプリの料金を更新できます。アプリの料金を更新するには、アプリを公開してから、または最後に料金を更新してから 30 日以上経過している必要があります。

従量制料金

Google Cloud Marketplace は、Kubernetes Pod アノテーション を使用して使用量を追跡し、 Cloud Marketplace アプリのデプロイに対して課金します。Cloud Marketplace は、Pod レベルで課金と測定を行い、商品リスティング レベルで集計します。

同じマシン(vCPU、GPU、TPU、メモリ)に複数の Pod をデプロイすると、マシンにデプロイされたすべての Pod で発生した累積使用量が各 Pod に割り当てられます。たとえば、同じ GPU を共有する 3 つの Pod がある場合、Cloud Marketplace では 3 つの GPU としてカウントされます。

Cloud Marketplace は、各 vCPU、TPU、 GPU、メモリ ファミリーの SKU 内の異なる GKE SKU を同一として扱います。たとえば、GPU が指標として設定されている場合、お客様が GKE Autopilot T4 GPU Premium、GKE Autopilot L4GKE Autopilot H100 GPU Premium、GKE Autopilot A100 40 GiB GPU、GKE Autopilot A100 80 GiB GPU、GKE Autopilot H100 GPU Premium のいずれを使用しているかに関係なく、構成された料金が適用されます。

Cloud Marketplace アプリにビジネス ロジックを統合して、お客様への正確な請求を保証することを強くおすすめします。ラベル アノテーションが誤って削除された場合の影響を軽減するため、ラベル アノテーションがまだ存在することを確認するようアプリを設計することをおすすめします。アノテーションがない場合、ラベルが復元されるまでアプリの機能を制限する必要があります。Python での例を次に示します。

pod_name = os.environ.get("HOSTNAME")
namespace = open(
      "/var/run/secrets/kubernetes.io/serviceaccount/namespace"
).read()
# Load in-cluster config
config.load_incluster_config()
v1 = client.CoreV1Api()
# Get the Pod object
pod = v1.read_namespaced_pod(name=pod_name, namespace=namespace)
annotations = pod.metadata.annotations
if annotations:
print("Annotations for this pod:")
for key, value in annotations.items():
      print(f"  {key}: {value}")
else:
print("No annotations found on this pod.")

次のステップ