このドキュメントでは、以下を含む Cloud Deploy の一部として Skaffold の使用を開始する方法について説明します。
- Cloud Deploy デリバリー パイプラインで使用する Skaffold の構成する
- Helm や Kustomize などのサードパーティのレンダリング ツールで、Skaffold と Cloud Deploy を使用する
- 必要に応じて、ローカル開発に Skaffold を使用する
- 必要に応じて、Skaffold を使用して継続的インテグレーションと継続的デプロイ(CI/CD)を実現
Skaffold が必要な理由
Cloud Deploy で Skaffold を使用する理由と、Skaffold 構成の管理が必要な理由については、しっかりと確認しておきましょう。
CI/CD の経験がありますが、現在 Skaffold は使用していません
Skaffold は、デベロッパーの生産性を向上させるオープンソースのコマンドライン ツールです。継続的開発、継続的インテグレーション(CI)、継続的デリバリー(CD)をオーケストレートします。
Skaffold は、プラグイン対応アーキテクチャを使用して宣言型のポータブル構成を提供するため、レンダリング フェーズでさまざまなツールを使用できます。
リリースが作成されると、Cloud Deploy は Skaffold を呼び出してマニフェストをレンダリングします。Cloud Deploy では、デプロイ時に Skaffold を再度呼び出し、これらのマニフェストを適用して進行中の各ターゲットにアプリケーションをデプロイします。デプロイ後、Skaffold はヘルスチェックを実行して、ターゲット ランタイムをモニタリングしてデプロイの成功を確認します。
継続的開発のための Skaffold
継続的な開発に Skaffold を使用する場合、コードを変更すると、イメージがビルド、テストされ、クラスタ(または Minikube)にデプロイされます。Cloud Code for VS Code と Cloud Code for IntelliJ の IDE 拡張機能は、Skaffold を Visual Studio Code と JetBrains IDE に統合して、継続的な開発を行います。
継続的なデリバリーのための Skaffold
ビルド、デプロイ、レンダリング、適用の各ステップで継続的なデリバリーのために Skaffold を使用することもできます。Cloud Deploy では、Skaffold のレンダリングと適用機能を使用します。Cloud Deploy を使用するには、少なくとも有効な skaffold.yaml
構成ファイルが必要です。
Skaffold を使用すると、Helm や Kustomize などのサードパーティのマニフェスト管理ツールと統合することもできます。このように Skaffold を使用すると、これらのツールの機能を使用してマニフェストをレンダリングできます。kubectl
は、これらのマニフェストのデプロイツールを保持します。
Kubernetes へのデプロイが初めての場合
Skaffold を使用すると、すべてのデプロイの基本マニフェスト セットを構成できます。次に、Cloud Deploy を介して Skaffold のレンダリング エンジンを使用し、これらの基本マニフェストの 1 つから、デプロイ固有の各マニフェストをレンダリングしてデプロイできます。
Helm や Kustomize などの一般的なマニフェスト テンプレート ツールで Skaffold や Cloud Deploy を使用する例など、マニフェストの管理の詳細をご覧ください。
Cloud Deploy を機能させるには何が必要ですか?
基本的な Cloud Deploy デリバリー パイプラインを使用するには、skaffold.yaml
構成ファイルに少なくとも次の構成が必要です。
すべての
skaffold.yaml
構成に必要なヘッダー情報:apiVersion: skaffold/v4beta7 kind: Config
すべての未加工の Kubernetes マニフェストを一覧表示する GKE、GKE Enterprise、または Cloud Run 用の
manifests
スタンザ(Helm や Kustomize などのマニフェスト管理ツールを使用している場合を除く)。未加工の Kubernetes マニフェストを使用した例を次に示します。
manifests: rawYaml: - deployment.yaml
レンダラ(Helm や Kustomize など)を使用してマニフェストをレンダリングする場合は、これらのツールを使用するように Skaffold を構成する方法について、skaffold.yaml への Helm サポートの追加と skaffold.yaml への Kustomize サポートの追加をご覧ください。
Helm と Kustomize の例については、マニフェストの管理をご覧ください。
GKE または GKE Enterprise にデプロイするための
deploy.kubectl
、または Cloud Run にデプロイするためのdeploy.cloudrun
を持つdeploy
スタンザ。GKE ターゲットと GKE Enterprise ターゲットの場合:
deploy: kubectl: {}
デプロイ スタンザは、マニフェスト スタンザで指定されたアプリケーション マニフェストをデプロイします。
Cloud Run ターゲットの場合:
deploy: cloudrun: {}
デプロイ スタンザは、マニフェスト スタンザで指定されたアプリケーション マニフェストをデプロイします。
カスタム ターゲットを使用している場合、skaffold.yaml
にはヘッダー(apiVersion
および kind:
)と、カスタム ターゲット タイプがまだリモート Skaffold 構成を参照していない場合にカスタム ターゲットが使用するカスタム アクションが必要です。
skaffold.yaml
ファイルを作成する
Cloud Deploy では、アプリケーションのレンダリングとデプロイに Skaffold を使用します。
リリースごとに、使用するマニフェストを識別する skaffold.yaml
ファイルを少なくとも 1 つ指定する必要があります。このファイルに何を含める必要があるかについては、前のセクションをご覧ください。
Cloud Deploy で skaffold.yaml
を生成する
skaffold.yaml
ファイルがなく、Kubernetes マニフェストまたは Cloud Run サービス定義ファイルが 1 つある場合、Cloud Deploy は skaffold.yaml
ファイルを生成できます。
生成された Skaffold ファイルは、リリースが完了すると Cloud Storage ソースのステージング ディレクトリで使用可能になります。
次のコマンドには、--from-k8s-manifest
フラグが含まれており、Kubernetes マニフェストが渡されます。Cloud Deploy では、マニフェストの情報を使用して skaffold.yaml
を生成し、リリースに使用します。
gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --from-k8s-manifest=MANIFEST --region=REGION
Cloud Run サービスの YAML から skaffold.yaml
を生成するには、同じコマンドを使用しますが、--from-k8s-manifest
の代わりに --from-run-manifest
を使用します。
これらのフラグのいずれかを --skaffold-file
フラグまたは --source
フラグとともに使用すると、エラーが発生します。
生成された skaffold.yaml
ファイルの使用
生成された skaffold.yaml
は、Cloud Deploy のオンボーディング、学習、デモに適しています。Cloud Deploy に慣れた後、本番環境のワークロードについては、Skaffold プロファイルを使用するターゲット間で区別する Skaffold 構成が必要になることがあります。
生成された skaffold.yaml
ファイルを出発点として使用して独自の区別する Skaffold 構成を作成する場合、レンダリングされたファイルではなく、レンダリング ソース アーカイブでこのファイルを使用してください。レンダリング ソースは、[リリースの詳細] ページの [アーティファクト] タブからダウンロードできます。
この生成された
skaffold.yaml
は、Cloud Storage バケットに格納されているレンダリング ソースに含まれています。このファイルを表示するには、
.tar.gz
ファイルをダウンロードして抽出します。レンダリングされた
skaffold.yaml
は、ターゲット アーティファクトで使用できます。[ターゲットのアーティファクト] セクションで、[アーティファクトを表示] をクリックします。
ローカル開発での Skaffold の使用
Skaffold の強みの 1 つは、ローカル開発と CI/CD に使用できることです。
dev
モードの場合、Skaffold はソースファイルを監視し、変更を検出すると、イメージを再ビルドして再テストし、ローカルマシンの Minikube クラスタなどにコンテナを再デプロイします。
このように Skaffold を使用する場合は、リモート デプロイと同じコマンドをローカルで使用できます。
ローカル開発に Skaffold を使用する場合は、ターゲットに個別の Skaffold プロファイルとローカル開発用のデフォルトのデプロイ スタンザを定義できます。
dev
モードを停止すると、Skaffold はデプロイされたアーティファクトをクラスタからクリーンアップします。
CI/CD での Skaffold の使用
ローカルでの継続的なビルドとデプロイに Skaffold を使用できますが、CI/CD には Skaffold を使用できます。Cloud Deploy は、Skaffold の CI/CD 機能を使用してマニフェストをレンダリングして適用し、定義済みのターゲットにアプリケーションをデプロイします。ただし、Cloud Build などの CI ツールと Artifact Registry などのイメージ レジストリを使用してコンテナ イメージをビルドする必要があります。
レンダリング、デプロイ、適用
Skaffold は、マニフェスト レンダリング プロセスをデプロイから分離します。
Cloud Deploy は skaffold render
を呼び出してマニフェストをレンダリングし、skaffold apply
を呼び出してターゲットに適用します。
レンダリングと適用の分離により、アプリケーションの完全な宣言状態を構成でキャプチャできるため、アプリケーションを安全に(たとえば、ロールバック用に)繰り返し適用できます。この手法でも承認が容易になります。マニフェストは最初のロールアウト前にすべてのターゲットに対してレンダリングされるため、各ターゲットに適用されるレンダリングされた YAML を確認できます。
Cloud Deploy では、他のデプロイツールによるアプリケーションのデプロイはサポートされていません。ただし、Helm や Kustomize などのツールを使用してレンダリングを行うことができます。
デプロイ担当者として kubectl
を使用して Cloud Deploy をデプロイする方法については、Cloud Deploy サービス アーキテクチャをご覧ください。
Skaffold プロファイルについて
profiles:
スタンザで、skaffold.yaml
で識別される個別の Skaffold プロファイルを作成できます。
Cloud Deploy で Skaffold プロファイルを使用する場合は、すべてまたは一部のターゲットに対して個別のプロファイルを作成できます。たとえば、dev
、staging
、prod
の各プロファイルは異なります。
Cloud Deploy では Skaffold を使用するためにプロファイルは必要ありませんが、ターゲット間で異なる Kustomize kustomization.yaml
ファイルを使用するなど、ターゲット間でマニフェストのカスタマイズを定義する場合に便利です。
Kustomize サポート skaffold.yaml
に追加する
Kustomize 構成を Cloud Deploy/Skaffold 構成と統合する場合は、次の作業を行います。
構成ファイルの間に
kustomization.yaml
ファイルを含めます。構成ファイルは、ローカル ディレクトリまたは Cloud Storage バケットに格納できます。
skaffold.yaml
ファイルで、プロファイルごとにdeploy
スタンザを作成します。プロファイルを使用していない場合、またはプロファイルに関連付けられていないデフォルトのデプロイ構成の場合は、定義されたプロファイルの外側に
deploy
スタンザを置くこともできます。以下に、プロファイルごとに
deploy
スタンザを表示し、my-app
という架空のサンプルアプリを使用する Skaffold 構成の例を示します。apiVersion: skaffold/v4beta7 kind: Config build: artifacts: - image: my-app-web-profiles context: my-app-web-profiles - image: my-app-application-profiles context: my-app-application-profiles googleCloudBuild: projectId: ${PROJECT_ID} profiles: - name: local manifests: kustomize: paths: - my-app-application-profiles/kubernetes/local - name: test manifests: kustomize: paths: - my-app-application-profiles/kubernetes/test - name: staging manifests: kustomize: paths: - my-app-application-profiles/kubernetes/staging - name: prod manifests: kustomize: paths: - my-app-application-profiles/kubernetes/prod deploy: kubectl: {}
ここに示す Skaffold 構成には、
test
、staging
、prod
のターゲット用の個別のプロファイルがあります。また、ローカル開発用のプロファイルも表示されます。 各プロファイルには、ターゲットに使用する Kustomization の場所を指すパスを持つdeploy.kustomize
スタンザがあります。
skaffold.yaml
に Helm サポートを追加する
Helm を使用して、マニフェストをレンダリングできます。Cloud Deploy は、アプリケーションのデプロイに Helm は使用せず、デプロイツールとして kubectl
のみをサポートします。
Helm を使用するには、Helm チャートまたはチャートが skaffold.yaml
内から参照できる任意の場所に保存されている必要があります。この場所は、ファイル システム、リポジトリ、場合によっては skaffold.yaml
とともに、あるいは Open Container Initiative(OCI)リポジトリにあります。
Helm チャートを使用するには、helm
スタンザを skaffold.yaml
ファイルに追加します。
apiVersion: skaffold/v4beta7
kind: Config
build:
artifacts:
- image: skaffold-helm-image
manifests:
helm:
releases:
- name: skaffold-helm-image
chartPath: charts
deploy:
kubectl: {}
skaffold.yaml
リファレンスに、この helm
スタンザに必要なものが示されています。
サポートされていない Skaffold の機能
次の Skaffold の機能は Cloud Deploy では使用できません。
-
--module=
を使用してbuild
、render
、apply
などの特定のモジュールを選択することはできません。静的モジュールがサポートされています。 Helm では、名前空間を作成できます(名前空間が存在しない場合)。
次のステップ
Skaffold のサイトにアクセスして、この仕組みと何ができるかをご確認ください。
Kustomize プロファイルと Skaffold プロファイルで Cloud Deploy を使用して実践する。
Cloud Deploy で使用する Skaffold のバージョンを選択する方法、Skaffold のバージョンがいつ変更されるか、使用されているバージョンを判断する方法を確認する。
Helm、Kustomize、kpt などの高度なマニフェスト管理ツールで Skaffold プロファイルを使用する方法については、こちらをご覧ください。