このドキュメントでは、Cloud Deploy の一部として Skaffold を使用する方法について説明します。内容は次のとおりです。
- Cloud Deploy デリバリー パイプラインで使用する Skaffold の構成する
- Helm や Kustomize などのサードパーティのレンダリング ツールで、Skaffold と Cloud Deploy を使用する
- 必要に応じて、ローカル開発に Skaffold を使用する
- 必要に応じて、継続的インテグレーションと継続的デプロイ(CI / CD)に Skaffold を使用する
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
manifests
スタンザ。GKE、GKE Enterprise、Cloud Run で、すべての未加工の Kubernetes マニフェストを一覧表示します(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: {}
デプロイ スタンザは、manifests スタンザで指定されたアプリケーション マニフェストをデプロイします。
Cloud Run ターゲットの場合:
deploy: cloudrun: {}
デプロイ スタンザは、manifests スタンザで指定されたアプリケーション マニフェストをデプロイします。
カスタム ターゲットを使用している場合、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 にも使用できます。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 Service のアーキテクチャをご覧ください。
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 を使用するには、skaffold.yaml
内から参照できる任意の場所に保存されている Helm チャートが必要です。この場所は、ファイル システム、リポジトリ、場合によっては skaffold.yaml
とともに、あるいは Open Container Initiative(OCI)リポジトリにあります。
Helm チャートを使用するには、skaffold.yaml
ファイルに helm
スタンザを追加します。
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 では、Namespace が存在しない場合にNamespace を作成する機能。
次のステップ
Skaffold のサイトにアクセスして、この仕組みと何ができるかをご確認ください。
Kustomize プロファイルと Skaffold プロファイルで Cloud Deploy を使用して実践する。
Cloud Deploy で使用する Skaffold のバージョンを選択する方法、Skaffold のバージョンがいつ変更されるか、使用されているバージョンを判断する方法を確認する。
Helm、Kustomize、kpt などの高度なマニフェスト管理ツールで Skaffold プロファイルを使用する方法を学習する。