GKE Enterprise ツールチェーンと Active Assist を組み合わせて使用する


このドキュメントは、Active Assist を使用してクラウド フットプリントを大規模に最適化するために企業が使用できるアーキテクチャ パターンについて説明するシリーズの一部です。このチュートリアルでは、GKE Enterprise ツールチェーンと連携する Active Assist の推奨事項の自動化パイプラインを作成する方法について説明します。以下の内容は、Config Sync を使用して GKE Enterprise 環境を管理し、Config Connector を使用して Google Cloud リソースを管理するユーザーを対象としています。このシリーズの他のパートは次のとおりです。

このチュートリアルで作成する自動化パイプラインを使用すると、次のことができます。

  • 組織で Active Assist ポートフォリオの使用を拡大する。
  • Active Assist を継続的インテグレーションと継続的デリバリー(CI / CD)パイプラインの一部にする。
  • GitHub の問題や pull リクエストなどの構造を使用して、Active Assist の推奨事項の確認と有効化を制御する。

また、このチュートリアルでは、Google が開発したオープンソースのツールキットである kpt を使用して、Kubernetes リソース構成データファイルの管理、操作、カスタマイズ、適用を行います。

アーキテクチャ

次のアーキテクチャの図に、このチュートリアルで使用するコンポーネントを示します。

アーキテクチャで使用されるコンポーネント。

これらのコンポーネントは次のように使用されます。

  • GitHub の Don't Repeat Yourself(DRY)リポジトリ。Google Cloud 組織のプロジェクト間でデプロイする Config Connector テンプレートに使用されます。
  • プロジェクトまたは環境に固有で、ハイドレートされた構成ファイルを保持する 1 つ以上の GitHub リポジトリ。これらのハイドレートされたリポジトリは、Config Sync が管理する環境向けです。Config Connector を使用して、Google Cloud 組織内の Google Cloud リソースを動作させ、管理します。
  • バージョン管理とドリフト検出に Config Sync を使用する GKE クラスタ。このクラスタには Config Connector もインストールされています。Config Connector を使用すると、クラスタは Google Cloud 組織全体の Google Cloud リソースを管理できます。
  • テンプレートが GitHub DRY リポジトリに push されると、ビルドをトリガーする Cloud Build トリガー。
  • ビルドを定期的にトリガーする、スケジュールされた Cloud Build トリガー。ビルドジョブは kpt 関数を使用します。この関数は、Active Assist Recommender API を呼び出してアクティブな推奨事項を取得します。推奨事項を確認して解析し、Config Connector が管理する Google Cloud リソースのサイズ変更または最適化が必要かどうかを判断します。kpt 関数は、Config Connector で管理される Google Cloud リソースのサイズ変更または最適化が必要な場合に、推奨される変更の詳細とともに GitHub の問題を DRY リポジトリに作成します。

このアーキテクチャのワークフローは次のとおりです。

  1. DRY リポジトリへのアクセス権がある承認されたチームは、リポジトリで Config Connector テンプレートを作成して管理します。
  2. Cloud Build ジョブは、テンプレートが作成または変更され、main ブランチにチェックインされたときにトリガーされます。
  3. Cloud Build ジョブは kpt セッターを呼び出してテンプレートをハイドレートします。ジョブは、ハイドレートされた構成ファイルをハイドレートされた GitHub リポジトリに push します。Secret Manager は、限定公開リポジトリの GitHub デプロイキーを保存するために使用されます。
  4. Config Sync は、ハイドレートされたリポジトリに対する変更をモニタリングし、リポジトリ内で検出された更新をマネージド クラスタに適用します。
  5. Config Connector は、変更をモニタリングし、Config Sync によって適用された Kubernetes リソースモデル(KRM)の変更の結果としてリソースを作成または更新する必要がある場合、Google Cloud リソースを有効にします。
  6. スケジュールされた Cloud Build トリガーは定期的に Recommender API を呼び出して、Config Connector が管理しているプロジェクトのアクティブな推奨事項を取得します。
  7. スケジュールされた Cloud Build ジョブは、カスタム kpt 関数を実行して Recommender API を呼び出し、アクティブな推奨事項を取得して解析します。
  8. kpt 関数により、現在のリソース構成とリソースの推奨構成の比較を示す GitHub の問題が作成されます。この方法では、GitHub の問題が DRY リポジトリで作成されるため、リポジトリの変更を簡単に追跡できるようになります。

目標

  • 次のサンプル GitHub リポジトリを作成します。
    • Config Connector KRM の DRY リポジトリ。
    • kpt セッターを使用して生成されたハイドレート済み構成ファイルを保持するリポジトリ。
  • Config Sync と Config Connector を使用して GKE クラスタを作成します。
  • Config Connector によって管理されるプロジェクトの Active Assist の推奨事項を取得するサンプル kpt 関数を作成します。
  • テンプレートが DRY リポジトリの main ブランチに push されたときにトリガーされる Cloud Build トリガーを作成します。
  • Config Connector によって管理されているリソースで利用可能な Active Assist の推奨事項を取得するために、定期的に実行されるスケジュールされた Cloud Build ジョブを作成します。
  • このチュートリアル用に、GitHub リポジトリで提供されるスタブの推奨事項を使用してエンドツーエンドのパイプラインをテストします。

費用

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. Google Cloud コンソールでプロジェクトの選択ページに移動します。

    プロジェクト セレクタに移動

  2. Google Cloud プロジェクトを選択または作成します。

  3. Google Cloud プロジェクト ID をメモします。この ID は、次のセクションで環境を設定するときに使用します。このプロジェクトは、チュートリアル全体で build プロジェクトと呼びます。
  4. Cloud Build, Firestore, App Engine, Pub/Sub, Cloud Run, Cloud Scheduler, and Cloud Source Repositories API を有効にします。

    API を有効にする

    このチュートリアルでは、デフォルトのアプリケーション認証情報を使用します。[プロジェクトへの認証情報の追加] ページで認証情報の作成を求められたら、[キャンセル] をクリックします。
  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

環境設定

このチュートリアルでは、Cloud Shell ですべてのコマンドを実行します。

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

    Cloud Shell をアクティブにする

  2. 現在の build Google Cloud プロジェクトのプロジェクト ID とプロジェクト番号に関する環境変数を設定します。

    export RECO_MGR_PROJECT=PROJECT_ID
    gcloud config set project $RECO_MGR_PROJECT
    export RECO_MGR_PROJECT_NUMBER=$(gcloud projects describe $RECO_MGR_PROJECT --format='value(projectNumber)')
    

    PROJECT_ID は、前のセクションでメモしたプロジェクト ID に置き換えます。

  3. デプロイ リージョンの変数を設定します。

    export REGION=us-central1
    export ZONE=us-central1-a
    
  4. このチュートリアルで使用するサンプルアプリのコードを含むリポジトリのクローンを作成します。

    git clone https://github.com/GoogleCloudPlatform/activeassist-anthos-toolchain.git
    
  5. プロジェクト ディレクトリに移動します。

    cd activeassist-anthos-toolchain
    

パイプラインをビルドする

このセクションでは、パイプラインを構築するためのコンポーネントを作成します。Active Assist の推奨事項は、使用パターンとシステム指標に基づいて生成されます。推奨事項の各カテゴリでは、生成された推奨事項に基づいて使用状況データと指標を分析するために、異なるデフォルトの時間枠を使用できます。エンドツーエンド パイプラインをテストするには、前の手順でクローンを作成したリポジトリに、エンドツーエンド パイプラインの実行に使用するサンプルの推奨事項(スタブ)が提供されます。

また、既存のリソースと推奨事項があるサンプル プロジェクトでパイプラインを実行している場合は、サンプルコードに適切な変更を加えてから、パイプラインを実行できます。

サンプルの限定公開 GitHub リポジトリを設定する

以降のセクションでは、このチュートリアル用のサンプル GitHub リポジトリを設定します。

限定公開 DRY GitHub リポジトリを設定する

  1. DRY リポジトリの限定公開 GitHub リポジトリを作成します。リポジトリに付けた名前をメモします。

  2. Cloud Shell で、GitHub ユーザー名と DRY リポジトリの名前の環境変数を作成します。

    export REPO_OWNER=YOUR_GITHUB_USERNAME
    export DRY_REPO_NAME=YOUR_PRIVATE_DRY_REPO
    

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

    • YOUR_GITHUB_USERNAME: GitHub のユーザー名。
    • YOUR_PRIVATE_DRY_REPO: DRY リポジトリの名前。
  3. 個人用のアクセス トークン(PAT)を作成して、このリポジトリに問題を作成します。確認が必要な Active Assist の推奨事項がある場合、パイプラインは GitHub の問題を作成します。GitHub で PAT を作成する方法について詳しくは、GitHub のドキュメントをご覧ください。

    このトークンのスコープを設定する場合は、[Full control of private repositories] を選択します。

  4. Cloud Shell で、生成した PAT の環境変数を作成します。

    export GITHUB_TOKEN=YOUR_PERSONAL_ACCESS_TOKEN
    

    YOUR_PERSONAL_ACCESS_TOKEN は、独自のトークンに置き換えます。

限定公開ハイドレート GitHub リポジトリを設定する

  1. ハイドレートされたリポジトリ用に限定公開 GitHub リポジトリを作成します。リポジトリに付けた名前をメモします。

  2. Cloud Shell で、ハイドレートされたリポジトリの環境変数を設定します。

    export HYDRATED_REPO_NAME=YOUR_PRIVATE_HYDRATED_REPO
    export HYDRATED_REPO='git@github.com:$REPO_OWNER/$HYDRATED_REPO_NAME.git'
    

    YOUR_PRIVATE_HYDRATED_REPO は、ハイドレートされたリポジトリの名前に置き換えます。

  3. デプロイキー ペアを作成します。

    ssh-keygen -t rsa -b 4096 \
    -C 'active-assist-robot' \
    -N '' \
    -f $(pwd)/active-assist-robot
    

    デプロイキーを使用すると、Cloud Build ジョブを実行して構成ファイルをハイドレートするときに、限定公開 GitHub リポジトリにデプロイできます。

  4. 生成されたキーを出力します。

    cat $(pwd)/active-assist-robot.pub
    
  5. デプロイキーを GitHub リポジトリに追加します。デプロイキーを追加するときは、必ず [Allow write access] を選択してください。デプロイキーを GitHub リポジトリに追加する方法については、GitHub のドキュメントの Managing deploy keys をご覧ください。

GitHub の鍵を Secret Manager にアップロードする

  1. Cloud Shell で、デプロイキー ペアから秘密鍵を格納するシークレットを作成します。

    gcloud secrets create github-ssh-key \
      --data-file=$(pwd)/active-assist-robot
    
  2. PAT を格納する Secret を作成します。

    echo $GITHUB_TOKEN | gcloud secrets create github-pat --data-file=-
    

GKE クラスタを作成する

このセクションでは、Config Connector アドオンを使用して GKE クラスタを作成し、ID を作成して Config Connector を構成します。Config Sync も構成します。Config Sync を使用すると、カスタム ポリシーを含むすべてのインフラストラクチャに共通の構成を作成し、オンプレミスとクラウドの両方で適用できます。Config Sync は、変更を評価してすべての Kubernetes クラスタにロールアウトし、望ましい状態が常にクラスタに反映されるようにします。

  1. Cloud Shell で、Config Connector アドオンを有効にして新しい GKE クラスタを作成します。

    gcloud container clusters create sample-ops \
      --machine-type n1-standard-4 \
      --zone $ZONE \
      --release-channel regular \
      --addons ConfigConnector \
      --workload-pool=$RECO_MGR_PROJECT.svc.id.goog \
      --enable-stackdriver-kubernetes \
      --enable-ip-alias
    
  2. ID を作成して Config Connector を構成するには、GKE アドオンでのインストールの次のセクションの手順を完了してください。

    1. ID を作成する
    2. Config Connector を構成する
  3. 作成した GKE クラスタに Config Sync をインストールします。Config Sync を構成する場合は、次のことを行う必要があります。

    1. トークンを使用して、Config Sync に Git への読み取り専用アクセス権を付与します限定公開 DRY GitHub リポジトリを設定したときに作成した GitHub トークンを使用します。トークンは $GITHUB_TOKEN 環境変数で使用できます。
    2. gcloud を使用して Config Sync を構成します。次にように設定します。
      1. sourceFormat: hierarchy
      2. syncRepo: https://github.com/YOUR_GITHUB_USERNAME/YOUR_PRIVATE_HYDRATED_REPO
      3. syncBranch: main
      4. secretType: token
      5. policyDir: このオプションは入力しないでください

ハイドレート リポジトリに push する Cloud Build トリガーを作成する

以降のセクションでは、テンプレートが YOUR_PRIVATE_DRY_REPO リポジトリのメインブランチに push されたときにトリガーされる Cloud Build トリガーを作成します。このトリガーは、YOUR_PRIVATE_DRY_REPO リポジトリ内の config-as-data KRM テンプレートをハイドレートし、ハイドレートされた構成ファイルを YOUR_PRIVATE_HYDRATED_REPO リポジトリに push します。

Cloud Build を GitHub リポジトリに接続する

このセクションでは、YOUR_PRIVATE_DRY_REPOYOUR_PRIVATE_HYDRATED_REPO の GitHub リポジトリを Cloud Build に接続します。

  1. Cloud Build アプリの GitHub Marketplace ページにアクセスします。

    Cloud Build アプリのページに移動する

  2. [Setup with Google Cloud Build] をクリックします。

  3. プロンプトが表示されたら、GitHub にログインします。

  4. [Only select repositories] を選択します。

    [Select repositories] プルダウンを使用して、Cloud Build アプリから YOUR_PRIVATE_DRY_REPO リポジトリと YOUR_PRIVATE_HYDRATED_REPO リポジトリへのアクセスを有効にします。

  5. [Install] をクリックします。

  6. Google Cloud にログインします。[Authorization] ページが表示されます。ここで、Google Cloud Build アプリが Google Cloud に接続するのを認可するよう求められます。

  7. [Authorize Google Cloud Build by GoogleCloudBuild] をクリックします。Google Cloud コンソールにリダイレクトされます。

  8. Google Cloud プロジェクトを選択します。

  9. 同意のチェックボックスをオンにして、[次へ] をクリックします。

  10. [Install] をクリックします。

  11. Google Cloud にログインします。[Authorization] ページが表示されます。ここで、Google Cloud Build アプリが Google Cloud に接続するのを認可するよう求められます。

  12. [Authorize Google Cloud Build by GoogleCloudBuild] をクリックします。Google Cloud コンソールにリダイレクトされます。

  13. Google Cloud プロジェクトを選択します。

  14. 同意のチェックボックスをオンにして、[次へ] をクリックします。

  15. 表示された [Select repository] ページで、次の GitHub リポジトリを選択します。

    • YOUR_PRIVATE_DRY_REPO
    • YOUR_PRIVATE_HYDRATED_REPO
  16. [Connect] をクリックし、[Done] をクリックします。

DRY リポジトリ用の Cloud Build トリガーを作成する

  1. Cloud Shell で、次のコマンドを実行します。

    envsubst < cloudbuild.template.yaml > cloudbuild.yaml
    

    このコマンドにより、cloudbuild.yaml ファイルが生成されます。

  2. トリガーを作成します。

    gcloud beta builds triggers create github \
      --name ActiveAssistDemo \
      --repo-name=$DRY_REPO_NAME \
      --repo-owner=$REPO_OWNER \
      --branch-pattern="main" \
      --build-config=cloudbuild.yaml
    
  3. Cloud Build サービス アカウントに Secret Manager にアクセスする権限を付与します。

    gcloud secrets add-iam-policy-binding github-ssh-key  \
      --member="serviceAccount:${RECO_MGR_PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
      --role="roles/secretmanager.secretAccessor"
    
    gcloud secrets add-iam-policy-binding github-pat  \
      --member="serviceAccount:${RECO_MGR_PROJECT_NUMBER}@cloudbuild.gserviceaccount.com" \
      --role="roles/secretmanager.secretAccessor"
    

Active Assist 推奨事項用のスケジュール設定された Cloud Build トリガーを作成する

以降のセクションでは、定期的に動作するスケジュール化された Cloud Build トリガーを作成します。このトリガーは、kpt 関数を使用して Active Assist の推奨事項を取得し、YOUR_PRIVATE_HYDRATED_REPO リポジトリ内のリソースに有効な推奨事項があるかどうかを判断します。リソース構成について確認し実施される必要がある有効な推奨事項がある場合は、kpt 関数により YOUR_PRIVATE_HYDRATED_REPO リポジトリに GitHub の問題も作成されます。

Cloud Build イメージを生成する

このセクションでは、kpt、gh、Node コンポーネントを含む Cloud Build イメージを生成します。

  1. Cloud Shell で、Docker イメージをビルドして Container Registry に push します。

    gcloud auth configure-docker
    
    docker build -t gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1 ./recommender-kpt-function
    
    docker push gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1
    

ハイドレート リポジトリ用の Cloud Build トリガーを作成する

  1. Cloud Shell で、スケジュール設定された Cloud Build トリガーの設定に必要な構成ファイルを作成します。

     envsubst < cloudbuild-scheduled-recommendations.template.yaml > cloudbuild-scheduled-recommendations.yaml
    
  2. Cloud Build トリガーを作成します。

    gcloud beta builds triggers create github \
      --name ActiveAssistScheduledRecommendations \
      --repo-name=YOUR_PRIVATE_HYDRATED_REPO \
      --repo-owner=$REPO_OWNER \
      --branch-pattern="main" \
      --build-config=cloudbuild-scheduled-recommendations.yaml
    
  3. このトリガーの ID を取得します。

    export TRIGGER_ID=`gcloud beta builds triggers describe \
      ActiveAssistScheduledRecommendations \
      --format="value(id)"`
    

トリガーを呼び出す Cloud Scheduler ジョブを作成する

  1. Cloud Shell で、サービス アカウントを作成します。

    gcloud iam service-accounts create build-invoker \
       --description "Service Account used by Cloud Scheduler to invoke the sample scheduled Cloud Build job" \
       --display-name "recommender-scheduler-sa" \
       --project $RECO_MGR_PROJECT
    

    Cloud Scheduler のジョブは、このサービス アカウントを使用して recommender-parser サービスを実行します。

  2. Cloud Build ジョブを呼び出す権限をサービス アカウントに付与します。

    gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \
      --member serviceAccount:build-invoker@$RECO_MGR_PROJECT.iam.gserviceaccount.com \
      --role roles/cloudbuild.builds.editor \
      --project $RECO_MGR_PROJECT
    
     gcloud projects add-iam-policy-binding $RECO_MGR_PROJECT \
       --member serviceAccount:build-invoker@$RECO_MGR_PROJECT.iam.gserviceaccount.com \
       --role roles/serviceusage.serviceUsageConsumer \
       --project $RECO_MGR_PROJECT
    
  3. 前の手順で作成したトリガーを呼び出す Cloud Scheduler ジョブを作成します。

    gcloud scheduler jobs create http scheduled-build \
       --project $RECO_MGR_PROJECT \
       --time-zone "America/Los_Angeles" \
       --schedule="0 */3 * * *" \
       --uri="https://cloudbuild.googleapis.com/v1/projects/${RECO_MGR_PROJECT}/triggers/${TRIGGER_ID}:run" \
       --description="Scheduler job to invoke Cloud Build" \
       --oauth-service-account-email="build-invoker@$RECO_MGR_PROJECT.iam.gserviceaccount.com" \
       --headers="Content-Type=application/json" \
       --http-method="POST" \
    

    次のメッセージに対しては [Y] を選択します。

    There is no App Engine app in the project.

    App Engine アプリケーションを配置するリージョンを選択するように求められた場合は、us-central リージョンを選択します。

Cloud Build 構成ファイルを GitHub に commit して push する

作成した 2 つの Cloud Build 構成ファイルを YOUR_PRIVATE_DRY_REPO リポジトリに push します。

git remote add dry https://github.com/$REPO_OWNER/$DRY_REPO_NAME.git

git add cloudbuild.yaml
git add cloudbuild-scheduled-recommendations.yaml
git commit -m "Added cloudbuild configuration YAMLs"
git push dry main

限定公開リポジトリに push するときに、GitHub の認証情報の入力を求められる場合があります。

Cloud Build ジョブの結果を確認する

YOUR_PRIVATE_DRY_REPO リポジトリに変更を commit して push すると、Cloud Build ジョブがトリガーされます。Cloud Build ジョブが正常に実行されると、いくつかのリソースが作成されます。このセクションでは、Cloud Build ジョブの完了後にリソースが作成されるかどうかを確認します。

  1. Cloud Shell で、sample-ops クラスタ内に activeassist-kcc という名前の名前空間があることを確認します。

    kubectl get ns | grep activeassist-kcc
    
  2. Config Connector は、実行中のサンプルの Compute Engine インスタンスを PROJECT_ID プロジェクトにデプロイします。

    Compute Engine インスタンスがプロジェクトにあることを確認します。

     gcloud compute instances list | grep \
     computeinstance-sample-cloudmachine
    

    このマシンの MACHINE_TYPE の種類は n1-standard-1 です。

エンドツーエンド テストを実施する

エンドツーエンドのパイプラインをテストできるように、このチュートリアルでクローンを作成したリポジトリには、サンプルスタブ(スタブ)が用意されています。そのスタブを使用して、エンドツーエンドのパイプラインを実行します。スタブでは、Active Assist の推奨事項のペイロードが模倣されます。また、n1-standard-1 インスタンス タイプから g1-small インスタンス タイプにデプロイされた Compute Engine インスタンスのマシンタイプを変更する推奨事項が存在します。

このセクションでは、スケジュール設定された Cloud Build トリガーを手動で呼び出し、kpt 関数を使用して Active Assist の推奨事項を取得するジョブを実行します。YOUR_PRIVATE_DRY_REPO リポジトリに GitHub の問題が作成されていることも確認します。

  1. Google Cloud コンソールで Cloud Build の [トリガー] ページを開きます

    Build の [トリガー] ページを開く

  2. ActiveAssistScheduledRecommendations トリガーを選択します。

  3. トリガーを手動でテストするには、トリガーリスト上にあるそのトリガーの項目で [実行] をクリックします。

    トリガーにより、YOUR_PRIVATE_DRY_REPO リポジトリに GitHub の問題が作成されます。出力は次のようになります。

    gcloud auth configure-docker
    
    docker build -t gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1 ./recommender-kpt-function
    
    docker push gcr.io/$RECO_MGR_PROJECT/kpt-dev-gh:1
    

    このサンプルでは、Compute Engine インスタンスの現在の MACHINE_TYPE タイプが n1-standard-1 タイプであることを kpt 関数出力が示しています。Active Assist の推奨事項は g1-small タイプへの変更です。

    社内のバージョン管理審査担当者は、GitHub の自動化された問題を確認して、最適な対応を実施できます。

クリーンアップ

このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ