Connect Gateway と Cloud Build の統合

これは、Cloud Build と Connect Gateway を統合するための基本的なチュートリアルです。これにより、さまざまな環境で動作する Anthos クラスタ用に CI/CD パイプラインを作成できます。

このチュートリアルでは、読者が Connect Gateway ガイドの前のセクションを理解しており、Cloud Build に精通していることを前提としています。以下の説明では、いくつかのマイナースクリプト(以下を参照)を必要とする一般的な gcloud ビルダー イメージを利用します。

始める前に

  • 次のコマンドライン ツールがインストールされていることを確認します。

    • 最新バージョンの Cloud SDK には、Google Cloud とやり取りするためのコマンドライン ツールである gcloud が含まれています。
    • kubectl

    Google Cloud を操作するシェル環境として Cloud Shell を使用する場合は、これらのツールがインストールされます。

  • プロジェクトで使用する gcloud コマンドライン ツールが初期化されていることを確認します。

  • セットアップ ガイドの説明に従って、Connect Gateway やその他の必要な API がプロジェクトで有効になっていることを確認します。

1. Cloud Build サービス アカウントに IAM 役割を付与する

デフォルトでは、Cloud Build は Google Cloud サービス アカウントを使用して、MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com 形式のアドレスを持つ必要なすべての作業を実行します。このプロジェクトのサービス アカウントのメールアドレスは、Cloud Console の [Cloud Build] - [設定] で確認できます。

Cloud Build 設定ページのスクリーンショット

ゲートウェイ設定ガイドの IAM 権限を付与するの手順に従って、プロジェクトで必要な役割をこのアカウントに付与します。

2. Cloud Build サービス アカウントの RBAC ポリシーを指定する

ゲートウェイ設定ガイドの RBAC ポリシーを構成するの手順に沿って、使用するすべてのクラスタに対して Cloud Build サービス アカウントに適切な権限を付与します。

複数のクラスタに RBAC ポリシーをデプロイして維持するには、Anthos Config Management を使用することを強くおすすめします。

3. Cloud Build パイプラインを作成する

Cloud Build ワークフローでは、パイプラインを構成するために cloudbuild.yaml ファイルが必要です。次の例は、2 つの異なるクラスタ(VMware 上の 1 つの GKE クラスタと 1 つの Anthos クラスタ)に静的マニフェストをデプロイする簡単な例です。Cloud Build パイプラインの構成方法の詳細については、Cloud Build のドキュメントをご覧ください。

steps:
- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: /bin/sh
  id: Deploy to GKE cluster
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud beta container hub memberships get-credentials my-gke-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: /bin/sh
  id: Deploy to Anthos cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud beta container hub memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml

myapp.yaml で必要なワークフローを設定してクラスタを構成できます。以下に例を示します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

構成を Git リポジトリに push すると、Cloud Build ワークフローによって、指定されたクラスタに必要なアプリケーションがデプロイされます。また、リンクされた Git リポジトリの変更を検出して、アプリケーションの自動更新やインストールをトリガーするように Cloud Build を設定することもできます。

高度な使い方

標準の Cloud Build のコンセプトを使用するため、CI/CD のニーズに合うようにサンプルを拡張し、カスタマイズできます。特に、イメージを一からビルドしてパイプラインにデプロイする場合は、gke-deploy ビルダーの準備モードを使用できます。たとえば、次の Cloud Build の構成は次のとおりです。

  1. Git リポジトリのルートに Dockerfile から Docker イメージをビルドし、Git SHA でタグ付けします。
  2. タグ付きイメージをプロジェクトの Container Registry にプッシュします。
  3. 正しいイメージタグを設定し、出力マニフェストを output/expanded に配置して、manifest ディレクトリに Kubernetes マニフェストを準備します。
  4. Connect Gateway を使用して、オンプレミスに Anthos クラスタにデプロイします。
steps:
- name: 'gcr.io/cloud-builders/docker'
  id: "Build Container"
  args: ['build', '--tag=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
  id: "Push to GCR"
  args: ['push', 'gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA']
- name: "gcr.io/cloud-builders/gke-deploy"
  id: "Prepare Manifests"
  args:
  - prepare
  - --filename=manifests/
  - --image=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA
- name: 'gcr.io/cloud-builders/gcloud'
  entrypoint: /bin/sh
  id: "Deploy to Anthos clusters on VMware"
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud beta container hub memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig=gateway-kubeconfig apply -f output/expanded

この例では、オンプレミス Anthos クラスタが Container Registry からイメージをプルできるようにイメージ pull シークレットを作成する必要がありました。

Cloud Build の使用に関するその他のアイデアについては、Cloud Build のドキュメントをご覧ください。