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 を使用する場合は、これらのツールがインストールされます。
- 最新バージョンの Google Cloud CLI、Google Cloud とやり取りするためのコマンドライン ツールである
プロジェクトで使用する gcloud CLI が初期化されていることを確認します。
セットアップ ガイドの説明に従って、プロジェクトで Connect Gateway や必要な API が有効になっていることを確認します。
1. Cloud Build サービス アカウントに IAM ロールを付与する
デフォルトでは、Cloud Build は必要な作業を行うために、MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com
形式のアドレスを持つ Google Cloud サービス アカウントを使用します。このプロジェクトのサービス アカウントのメールアドレスを確認するのは、Google Cloud コンソールで [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 の構成では次の処理が行われます。
- Git リポジトリのルートに Dockerfile から Docker イメージをビルドし、Git SHA でタグ付けします。
- タグ付きのイメージをプロジェクトの Container Registry にプッシュします。
- 正しいイメージタグを設定して出力マニフェストを
output/expanded
に配置し、manifest
ディレクトリに Kubernetes マニフェストを準備します。 - 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 のドキュメントをご覧ください。