Cloud Deploy で Skaffold を使用する

この記事では、Skaffold を使用する方法と、Cloud Deploy で Skaffold を使用する理由と方法について説明します。

Cloud Deploy では、レンダリングとデプロイのオペレーションに Skaffold を使用します。ローカル開発、ビルド、テスト、高度なデプロイ機能にも使用できます。ただし、Cloud Deploy では、レンダリングして適用するマニフェストを識別する Skaffold 構成のみが必要です。

Skaffold とは

Skaffold は、Kubernetes ネイティブ アプリケーションの継続的な開発を容易にするコマンドライン ツールです。Skaffold を使用すると、Cloud Deploy 継続的デリバリー パイプラインで使用するローカル開発ワークスペースを構成できます。

Skaffold には次の機能があります。

  • CI/CD パイプライン アクティビティ(ビルド、レンダリング、テストデプロイなど)をきめ細かく制御できます。

  • ローカル開発ツールとして有用です。

  • Skaffold プロファイルを使用すると、同じ構成ファイルにさまざまなビルド、テスト、デプロイ構成で、異なる環境を区別できます。

Cloud Deploy で Skaffold を使用する理由

Google Cloud Deploy では、Skaffold を使用してレンダリング パイプラインをデリバリー パイプラインから分離します。デリバリー パイプラインは、ターゲットからターゲットへの進行を定義するだけですが、Skaffold 構成では、レンダリングするマニフェストとその方法を定義します。これにより、デリバリー パイプラインの定義方法に影響を与えずに、マニフェストをレンダリングできます。

Skaffold を Cloud Deploy で使用する場合、次のような利点があります。

  • 容易なオンボーディング

    ローカル開発ループから始めます。skaffold.yaml ファイルをチームと共有すると、一貫性を保ち、新しいチームメンバーがすぐに作業を開始できます。

  • さまざまなデプロイ ターゲット間でのレンダリングを一貫して制御する

    Skaffold プロファイルを使用して、ターゲットごとに異なるレンダリングとデプロイを実現できます。

  • デリバリー パイプラインの定義方法を損なわないレンダリング ツールの選択

    Skaffold を使用すると、Cloud Deploy ではデリバリー パイプラインの定義をレンダリングの詳細から分離できます。この分離により、デリバリー パイプラインを中断することなくマニフェストをテストできます。

  • 一貫したレンダリング プロセス

    レンダリング ソースとコンテナは、レンダリングされたマニフェストの生成に使用されます。

  • デプロイのヘルスチェック

    Skaffold でこれを実行し、Cloud Deploy で使用します。

Cloud Deploy での Skaffold の使用方法

  • レンダリング ソースとコンテナ イメージの参照は、リリースを作成するときに Cloud Deploy に渡されます。

    リリース作成の一環として、Cloud Deploy は Cloud Build を呼び出します。これにより、skaffold diagnose および skaffold render が呼び出され、レンダリング ソースとそれらのイメージを使用してマニフェストをレンダリングします。

  • Skaffold プロファイルを使用すると、さまざまなターゲットに適用されるマニフェストを区別できます。

  • Cloud Deploy は、静的 Skaffold モジュールをサポートしています

  • Cloud Deploy はデプロイ時に skaffold apply を呼び出し、レンダリングされたマニフェストをターゲット クラスタに適用します。

  • Cloud Deploy では、カスタム ターゲットを使用しない限り、他のデプロイツールによるアプリケーションのデプロイはサポートされていません。ただし、HelmKustomize などのツールをレンダラとして使用できます。特定のデプロイツール(Helm など)を使用せずに Cloud Deploy によってデプロイする方法については、サービス アーキテクチャをご覧ください。

Skaffold の有効活用

  1. パイプラインのニーズに応じて Skaffold を構成します。

    1. デリバリー パイプラインのニーズを判断します。

      ターゲットがいくつるか。それぞれでレンダリングとデプロイは同じか。進行中のターゲットごとに構成が同じである場合は、Skaffold プロファイルを使用する必要はありません。必要なのは、レンダリングするマニフェストを記述する skaffold.yaml ファイルのみです。

    2. 該当する場合は、ターゲットごとに Skaffold プロファイルを作成します

      これを skaffold.yaml ファイルで定義し、デリバリー パイプライン定義の進行シーケンスにバインドします。

      Skaffold プロファイルの詳細については、Skaffold のドキュメントをご覧ください。また、Cloud Deploy でのマニフェストの管理ドキュメントには、プロファイル構成の例が記載されています。

    3. Skaffold ロギングの詳細レベルを設定する

      デフォルトでは、Skaffold のロギングレベルwarn に設定されています。debug に変更するには、ターゲットの実行環境の構成で verbose: true を設定します。

  2. Cloud Deploy を継続的インテグレーション システムに接続します。

    CI プロセスの最後に、入力される skaffold.yaml、レンダリング ソース、コンテナ イメージをレンダリングされるマニフェストに渡します。

  3. 省略可: Skaffold を使用して、ローカル開発ループを設定します。

    Cloud Deploy では、開発に Skaffold を使用することは任意です。Cloud Deploy が動作するために必要なのは、レンダリングするマニフェストを識別する skaffold.yaml ファイルのみです。

次のステップ

  • Skaffold のサイトにアクセスして、この仕組みと何ができるかをご確認ください。

  • Cloud Deploy で使用する Skaffold のバージョンの選択する方法、Skaffold のバージョンがいつ変更されるか、現在使用されているバージョンを判断する方法を確認する

  • Helm、Kustomize、kpt などの高度なマニフェスト管理ツールと組み合わせて Skaffold プロファイルを使用する方法について学習します

  • Skaffold プロファイルのチュートリアルを試してください。