このページでは、Cloud Build を使用して Kubernetes にアプリケーションをデプロイする方法について説明します。
Cloud Build には、コンテナ化されたアプリケーションを GKE クラスタにデプロイできる gke-deploy
ビルダーがあります。
gke-deploy
は kubectl
のラッパーで、Kubernetes 用のコマンドライン インターフェースです。Kubernetes にアプリケーションをデプロイする際に、次の方法で Google 推奨の方法を適用します。
タグの代わりにコンテナ イメージのダイジェストを使用するように、アプリケーションの Kubernetes リソース ファイルを更新します。
推奨ラベルを Kubernetes リソース ファイルに追加します。
イメージをデプロイする GKE クラスタの認証情報を取得します。
送信された Kubernetes リソース ファイルの準備が完了するまで待機します。
kubectl
を直接使用してアプリケーションをデプロイし、追加の機能を必要としない場合は、Cloud Build の kubectl
ビルダーを使用してアプリケーションを GKE クラスタにデプロイできます。
始める前に
GKE クラスタをまだ作成していない場合は作成します。
コンテナ化されたアプリケーション(ソースコード形式)と
Dockerfile
を用意します。ソースコードは、Cloud Source Repositories、GitHub、Bitbucket などのリポジトリに保存する必要があります。アプリケーションの実行に使用する Kubernetes リソースを記述する Kubernetes リソース ファイルが少なくとも 1 つ必要です。Kubernetes リソース ファイルがない場合は、次の手順に従ってアプリケーション用の Kubernetes リソース ファイルを作成します。
- Google Cloud Console で Kubernetes Engine クラスタのページにアクセスします。
- Kubernetes Engine クラスタのページで、[デプロイ] をクリックします。
- コンテナを選択して、[続行] をクリックします。構成セクションが表示されます。
- [構成 YAML] で [YAML を表示] をクリックし、サンプルの Kubernetes リソース ファイルを取得します。
必要な IAM 権限
Google Kubernetes Engine デベロッパーのロールをアカウントに追加します。
Cloud Build 設定ページを開きます。
[サービス アカウント権限] ページが表示されます。
Kubernetes Engine デベロッパー ロールのステータスを「有効」に設定します。
ビルド済みのコンテナ イメージをデプロイする
gke-deploy
を使用して特定のバージョンのアプリケーションをデプロイするには:
Kubernetes リソース ファイルが正しいコンテナ イメージのタグまたはダイジェストを参照していることを確認します。
ビルド構成ファイルに
gke-deploy
ステップを追加します。YAML
steps: ... # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=kubernetes-resource-file - --location=location - --cluster=cluster
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=kubernetes-resource-file", "--location=location", "--cluster=cluster" ] } ] }
ここで
- kubernetes-resource-file は、Kubernetes リソース ファイルのパスか、Kubernetes リソース ファイルが含まれるディレクトリのパスです。
- cluster は、アプリケーションのデプロイ先となる GKE クラスタの名前です。
- location は、クラスタのリージョン / クラスタです。
使用可能なフラグの詳細については、
gke-deploy run
フラグをご覧ください。ビルドを開始します。
gcloud builds submit --region=REGION --project=project-id --config build-config
ここで
- project-id はプロジェクトの ID です。
- build-config は、ビルド構成ファイルの名前です。
REGION
は、サポートされているビルド リージョンの一つです。
新しいコンテナ イメージをビルドしてデプロイする
新しいコンテナ イメージをビルドしてデプロイするには:
--image
属性を使用して、新しいコンテナ イメージで Kubernetes リソース ファイルを更新します。YAML
steps: # build the container image - name: "gcr.io/cloud-builders/docker" args: ["build", "-t", "gcr.io/project-id/image:tag", "."] # push container image - name: "gcr.io/cloud-builders/docker" args: ["push", "gcr.io/project-id/image:tag"] # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=kubernetes-resource-file - --image=gcr.io/project-id/image:tag - --location=location - --cluster=cluster
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "gcr.io/project-id/image:tag", "." ] }, { "name": "gcr.io/cloud-builders/docker", "args": [ "push", "gcr.io/project-id/image:tag" ] }, { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=kubernetes-resource-file", "--image=gcr.io/project-id/image:tag", "--location=location", "--cluster=cluster" ] } ] }
ここで
- project-id はプロジェクトの ID です。
- image は、コンテナ イメージの名前です。通常は、アプリケーション名です。
- tag は、コンテナ イメージのタグです。
- 各 commit で新しいコンテナ イメージを作成する場合は、commit の短縮 SHA をタグとして使用することをおすすめします。Cloud Build は、デフォルトの置換として
$SHORT_SHA
を使用します。
- 各 commit で新しいコンテナ イメージを作成する場合は、commit の短縮 SHA をタグとして使用することをおすすめします。Cloud Build は、デフォルトの置換として
- kubernetes-resource-file は、Kubernetes リソース ファイルのパスか、Kubernetes リソース ファイルが含まれるディレクトリのパスです。
- cluster は、アプリケーションのデプロイ先となる GKE クラスタの名前です。
- location は、デプロイするクラスタのリージョンまたはゾーンです。
ビルドを開始します。
gcloud builds submit --region=REGION --project=project-id --config build-config
ここで
- project-id はプロジェクトの ID です。
- build-config は、ビルド構成ファイルの名前です。
REGION
は、サポートされているビルド リージョンの一つです。
デプロイを自動化する
Cloud Build でトリガーを作成すると、GKE へのアプリケーションのデプロイを自動化できます。コードの変更を push するたびにイメージをビルドしてデプロイするようにトリガーを構成できます。
ビルドトリガーを作成するには:
Google Cloud Console で [トリガー] ページを開きます。
ページ上部にあるプロジェクト セレクタのプルダウン メニューからプロジェクトを選択します。
[開く] をクリックします。
[トリガーを作成] をクリックします。
[トリガーの作成] ページで、次の設定を入力します。
トリガーの名前を入力します。
トリガーを開始するリポジトリ イベントを選択します。
ソースコードとビルド構成ファイルを含むリポジトリを選択します。
トリガーを開始するブランチまたはタグ名を正規表現で指定します。
トリガーの [構成] を選択します。
Cloud Build 構成ファイルを選択するときに、変数名とその変数に関連付ける値を指定して代入変数を指定できます。以下の例では、ユーザー定義の代入変数
_CLOUDSDK_CONTAINER_CLUSTER
にデプロイ先のクラスタを指定し、ユーザー定義の代入変数_CLOUDSDK_COMPUTE_ZONE
にその場所を指定します。別のクラスタにデプロイする場合、同じビルド構成を使用すると、代入変数の値を変更するだけで済みます。YAML
steps: ... # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=kubernetes-resource-file - --image=gcr.io/project-id/image:tag - --location=${_CLOUDSDK_COMPUTE_ZONE} - --cluster=${_CLOUDSDK_CONTAINER_CLUSTER}
JSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=kubernetes-resource-file", "--image=gcr.io/project-id/image:tag", "--location=${_CLOUDSDK_COMPUTE_ZONE}", "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}" ] } ] }
ここで
- kubernetes-resource-file は、Kubernetes 構成ファイルのパスか、Kubernetes リソース ファイルが含まれるディレクトリのパスです。
- project-id はプロジェクトの ID です。
- image は、コンテナ イメージの名前です。通常は、アプリケーション名です。
- tag は、コンテナ イメージのタグです。
ビルド構成ファイルの置換を定義する方法については、ユーザー定義の置換の使用をご覧ください。
[作成] をクリックして、ビルドトリガーを保存します。
リポジトリにコードを push すると、Cloud Build によってビルドが自動的にトリガーされます。ビルドトリガーの詳細については、ビルドトリガーの作成と管理をご覧ください。
次のステップ
- GKE でワークロードの自動デプロイを構成する方法を学習します。
- Cloud Build で GKE にデプロイする GitOps スタイルの CI / CD パイプラインの作成方法を学習する。
- 追加の
gke-deploy
オプションについて学習する。 - Compute Engine で Blue/Green デプロイを実行する方法を学習する。
- その他のクラウド ビルダーについて学習する。
- ビルドエラーをトラブルシューティングする方法について学習する。