Connect Gateway と Cloud Build を統合する

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

このチュートリアルは、Connect Gateway ガイドの前のセクションの内容を理解し、Cloud Build に精通していることを前提としています。以下の説明では cloud-sdk ビルダー イメージを使用しますが、このイメージではスクリプトの作成が少し必要になります(以下を参照)。

始める前に

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

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

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

  • プロジェクトで使用する gcloud CLI が初期化されていることを確認します。

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

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

デフォルトでは、Cloud Build は必要な作業を行うために、MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com 形式のアドレスを持つ Google Cloud サービス アカウントを使用します。このプロジェクトのサービス アカウントのメールアドレスを確認するのは、Google Cloud コンソールで [Cloud Build] の [設定] に移動します。

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

このアカウントにプロジェクトで必要なロールを付与するには、Gateway 設定ガイドの IAM 権限を付与するの説明に従ってください。

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

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

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

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

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

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to cluster on Google Cloud
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-gke-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet 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 を使用して、オンプレミスの GKE クラスタにデプロイします。
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/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: "Deploy to cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig=gateway-kubeconfig apply -f output/expanded

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

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