このページでは、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 リソース ファイルを作成します。
- コンソールでKubernetes Engine クラスタのページにアクセスします。 Google Cloud
- Kubernetes Engine クラスタのページで、[デプロイ] をクリックします。
- コンテナを選択して、[続行] をクリックします。構成セクションが表示されます。
- [構成 YAML] で [YAML を表示] をクリックし、サンプルの Kubernetes リソース ファイルを取得します。
必要な IAM 権限
Google Kubernetes Engine デベロッパーのロールをアカウントに追加します。
-
コンソールで、 Cloud Build の [**権限**] ページに移動します。 Google Cloud settings
[権限] に移動
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=CLUSTER_LOCATION - --cluster=CLUSTERJSON
{ "steps": [ { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=KUBERNETES_RESOURCE_FILE", "--location=CLUSTER_LOCATION", "--cluster=CLUSTER" ] } ] }ここで
- KUBERNETES_RESOURCE_FILE は、Kubernetes リソース ファイルのパスか、Kubernetes リソース ファイルが含まれるディレクトリのパスです。
- CLUSTER_LOCATION は、クラスタのリージョンです。
- CLUSTER は、アプリケーション のデプロイ先となる GKE クラスタの名前です。
使用可能なフラグの詳細については、
gke-deploy runフラグをご覧ください。ビルドを開始します。
gcloud builds submit --region=LOCATION --project=PROJECT --config BUILD_CONFIGここで
- LOCATION は、サポートされているビルド ロケーションの 1 つです。
- PROJECT はプロジェクトの ID です。
- BUILD_CONFIG は、ビルド構成ファイルの名前です。
新しいコンテナ イメージをビルドしてデプロイする
新しいコンテナ イメージをビルドしてデプロイするには:
--image属性を使用して、新しいコンテナ イメージで Kubernetes リソース ファイルを更新します。YAML
steps: # build the container image - name: "gcr.io/cloud-builders/docker" args: ["build", "-t", "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG", "."] # push container image - name: "gcr.io/cloud-builders/docker" args: ["push", "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG"] # deploy container image to GKE - name: "gcr.io/cloud-builders/gke-deploy" args: - run - --filename=KUBERNETES_RESOURCE_FILE - --image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG - --location=CLUSTER_LOCATION - --cluster=CLUSTERJSON
{ "steps": [ { "name": "gcr.io/cloud-builders/docker", "args": [ "build", "-t", "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG", "." ] }, { "name": "gcr.io/cloud-builders/docker", "args": [ "push", "LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG" ] }, { "name": "gcr.io/cloud-builders/gke-deploy", "args": [ "run", "--filename=KUBERNETES_RESOURCE_FILE", "--image=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG", "--location=CLUSTER_LOCATION", "--cluster=CLUSTER" ] } ] }ここで
- LOCATION は、サポートされているビルド ロケーションの 1 つです。
- PROJECT はプロジェクトの ID です。
- IMAGE_NAME は、コンテナ イメージの名前です。通常は、アプリケーション名です。
- TAG は、コンテナ イメージのタグです。
- 各 commit で新しいコンテナ イメージを作成する場合は、commit の短縮 SHA をタグとして使用することをおすすめします。Cloud Build は、これを
デフォルトの置換として使用します
$SHORT_SHA。
- 各 commit で新しいコンテナ イメージを作成する場合は、commit の短縮 SHA をタグとして使用することをおすすめします。Cloud Build は、これを
デフォルトの置換として使用します
- KUBERNETES_RESOURCE_FILE は、Kubernetes リソース ファイルのパスか、Kubernetes リソース ファイルが含まれるディレクトリのパスです。
- CLUSTER は、アプリケーション のデプロイ先となる GKE クラスタの名前です。
- CLUSTER_LOCATION は、クラスタがデプロイされるリージョンです。
ビルドを開始します。
gcloud builds submit --region=LOCATION --project=PROJECT --config BUILD_CONFIGここで
- LOCATION は、サポートされているビルド リージョンの一つです。
- PROJECT はプロジェクトの ID です。
- BUILD_CONFIG は、ビルド構成ファイルの名前です。
デプロイを自動化する
Cloud Build でトリガーを作成すると、GKE へのアプリケーションのデプロイを自動化できます。コードの変更を push するたびにイメージをビルドしてデプロイするようにトリガーを構成できます。
ビルドトリガーを作成するには:
コンソールで [トリガー] ページを開きます。 Google Cloud
ページ上部にあるプロジェクト セレクタのプルダウン メニューからプロジェクトを選択します。
[開く] をクリックします。
[トリガーを作成] をクリックします。
[トリガーの作成] ページで、次の設定を入力します。
トリガーの名前を入力します。
トリガーを開始するリポジトリ イベントを選択します。
ソースコードとビルド構成 ファイルを含むリポジトリを選択します。
トリガーを開始するブランチまたはタグ名を正規表現で指定します。
トリガーの [構成] を選択します。
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=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME: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=LOCATION-docker.pkg.dev/PROJECT/REPOSITORY/IMAGE_NAME:TAG", "--location=${_CLOUDSDK_COMPUTE_ZONE}", "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}" ] } ] }ここで
- KUBERNETES_RESOURCE_FILE は、 Kubernetes 構成ファイルのパスか、 Kubernetes リソース ファイルが含まれるディレクトリのパスです。
- PROJECT はプロジェクトの ID です。
- IMAGE_NAME は、 コンテナ イメージの名前です。通常は、アプリケーション名です。
- TAG は、コンテナ イメージのタグです。
ビルド構成ファイルの置換を定義する方法については、ユーザー定義の置換の使用をご覧ください。
[作成] をクリックして、ビルドトリガーを保存します。
リポジトリにコードを push すると、Cloud Build によってビルドが自動的にトリガーされます。ビルドトリガーの詳細については、ビルドトリガーの作成と管理をご覧ください。
次のステップ
- GKE でワークロードの自動デプロイを構成する方法を学習します。
- Cloud Build で GKE にデプロイする GitOps スタイルの CI / CD パイプラインの作成方法を学習する。
- その他の
gke-deployオプション について学習する。 - Compute Engine で Blue/Green デプロイを実行する方法を学習する。
- その他のクラウド ビルダーについて学習する。
- ビルドエラーをトラブルシューティングする方法について学習する。