Cloud Code for Cloud Shell でのローカル開発を高速化するには、ファイル同期とホットリロード、保存時の自動デプロイを利用します。そして、Skaffold モジュールを使用して、アプリケーションの一部を個別に開発します。
Skaffold ファイルの同期とホットリロードを有効にする
ローカルの開発用ワークフローの効率を高め、Pod の再ビルド、再デプロイ、再起動を行わずに済むように、Skaffold は変更されたファイルをデプロイ済みコンテナにコピーできます。つまり、静的ファイルとソースコード ファイルに変更を加えた場合、その変更は数秒で反映されるため、フィードバック ループが高速化されます。
静的ファイル(HTML ファイルや CSS ファイルなど)の場合、このファイルをコピーする動作はファイルの同期と呼ばれます。
ソースコード ファイルの場合、この動作はホットリロードと呼ばれ、次のファイル形式をサポートしています。
- Go: *.go
- Java: *.java, *.kt, *.scala, *.groovy, *.clj
- NodeJS: *.js、*.mjs、*.coffee、*.litcoffee、*.json
ホットリロードを構成すると、Skaffold はサポートされているファイルの変更を検出し、これらの変更をクラスタで実行中のコンテナに同期します。ホットリロードをサポートしていないファイル形式が変更されると、イメージの再ビルドがトリガーされ、Pod が再起動します。
Buildpacks を優先ビルダーとして使用している場合、ファイルの自動同期とホット リロードはデフォルトで有効になっています。Docker などの他のビルダーでは、カスタマイズするアーティファクトの skaffold.yaml
ファイルで sync
セクションを指定できます。
次の同期設定のいずれかを行うことができます(優先順位順)。
auto
: Skaffold は同期を自動的に構成します。(Jib および Buildpacks のアーティファクトのみ)これは Buildpack のデフォルトです。infer
: 変更された各ファイルの宛先は、ビルダーから推測されます。manual
: ローカル ワークスペース内のファイルと、実行中のコンテナ内での各ファイルの宛先を指定する必要があります。
skaffold.yaml
ファイル内の次のサンプル sync
セクションでは、manual
同期を指定して、すべての /static-html
HTML ファイルをコンテナ内の static
フォルダに同期しています。
build: artifacts: - image: gcr.io/k8s-skaffold/node-example context: node sync: manual: - src: 'static-html/*.html' dest: static
ファイルの同期と同期ルールの指定の詳細については、ファイル同期に関する Skaffold のガイドをご覧ください。
Kubernetes で開発する際の新機能を追加する
ファイル同期とホットリロードを設定したら、反復サイクルを開始して、プロジェクトに機能を追加します。変更は Kubernetes Deployment にデプロイされます。Deployment の停止と削除、手動でのイメージのビルドとタグ付け、クラスタの更新は行われません。
標準的な反復サイクルは次のようになります。
プロジェクトに変更を加えます。たとえば、Cloud Code Java Guestbook アプリを使用する場合は、次のように新しいエンドポイントを
FrontendController
クラスに追加します。src/main/java/cloudcode/guestbook/frontend
からFrontendController.java
ファイルを開き、次のものを追加します。@RequestMapping("/greeting") @ResponseBody public String greeting(@RequestParam(value="name", defaultValue="World") String name) { return String.format("Hello from Kubernetes with IntelliJ, %s!", name); }
新しいアノテーションである
RequestMapping
とResponseBody
に必要なインポートを追加します。
変更を保存するか(
Ctrl
またはCmd+S
)、プロジェクトをビルドします。コンソール ウィンドウでは、進行状況とデプロイのログを確認できます。 変更がデプロイされたら、更新を確認します。
継続的な開発セッションを終了するには、[停止] アイコンをクリックします。
Cloud Code によって、開発セッションに使用されたすべての Kubernetes リソースが削除されます。
Skaffold 構成を使用してマイクロサービス アプリケーションを開発する
マイクロサービス アプリケーションを開発する場合は、デバッグとデプロイを簡素化するために別々のセクションに個別に取り組むと便利です。
アプリケーションを Skaffold モジュールに分割することで、アプリケーションの一部を個別に開発、デバッグできます。たとえば、Bank of Anthos のサンプルは 10 個のマイクロサービスを含むアプリケーションです。サンプルの skaffold.yaml
ファイルでは、これらのサービスを setup
、db
、frontend
、backend
、loadgenerator
という名前の 5 つの skaffold モジュールにグループ化します。
Skaffold モジュールと構成の依存関係を定義する
Skaffold モジュールと構成の依存関係を定義するには、次の手順を行います。
モジュールを定義するプロジェクトを開きます。
skaffold.yaml
ファイルを開きます。skaffold.yaml
ファイルに複数の構成がある場合に、構成を Skaffold モジュールにするには、次の行を指定します。metadata: name: MODULE_NAME_1
たとえば、Bank of Anthos
skaffold.yaml
のdb
モジュールでは、データベースのデプロイを次のように定義します。現在の構成をデプロイする前に別の構成がデプロイされることに依存する構成の場合は、その構成を依存関係に追加する必要があります。構成の依存関係を指定するには、
skaffold.yaml
ファイルのrequires
セクションにconfigs
リストを追加します。たとえば、Bank of Anthos の
skaffold.yaml
ファイルには、構成依存関係setup
が含まれています。依存関係を定義するには、次のものを
skaffold.yaml
ファイルに追加します。ここで、DEPENDENCY_NAME は依存関係の名前です。requires: - configs: DEPENDENCY_NAME
この方法でリストされた構成は、同じファイルまたは現在のプロジェクト内の他の
skaffold.yaml
ファイルで定義された依存関係を参照できます。構成の依存関係をテストするには、特定の Skaffold モジュールとその依存関係を構築するの手順に沿って、各 Skaffold モジュールを個別にビルドして、依存関係とともにデプロイされることを確認します。
特定の Skaffold モジュールとその依存関係をビルドする
モジュールとその依存関係を定義したら、launch.json
ファイルでクラウドコードを使用して実行するモジュールを指定できます。
プロジェクトに launch.json
ファイルが定義されていない場合、Cloud Code: Run on Kubernetes または Cloud Code: Debug on Kubernetes を実行すると、ビルドするモジュールを選択するように求められます。
- コマンド パレット(
Ctrl
/Cmd
+Shift
+P
)を開き、Cloud Code: Run on Kubernetes を実行します。 - [Select modules] をクリックします。
- デプロイするモジュールを選択し、[OK] をクリックします。各モジュールは依存関係とともにビルドされます。
- プロンプトが表示されたら、イメージ レジストリを選択し、
Enter
を押します。
プロジェクトに launch.json
がある場合は、次の手順に沿って、ビルドする Skaffold モジュールを選択します。
プロジェクトの
launch.json
ファイルを開きます。起動構成を編集して、ビルドする
modules
のカンマ区切りリストでskaffoldFlags
オプションを追加します。skaffoldFlags
を省略すると、すべてのモジュールがビルドされます。{ "name": "Run on Kubernetes", "type": "cloudcode.kubernetes", "request": "launch", "skaffoldConfig": "${workspaceFolder}/skaffold.yaml", "skaffoldFlags": { "modules": ["MODULE_NAME_2,MODULE_NAME_2"], "watch": true, "cleanUp": true, } }
編集した起動構成を実行します。
Kubernetes での継続的な開発
必要なオプションで実行ターゲットを構成したら、アプリケーションの通常実行を選択するか、IDE で開発の反復サイクルを開始してソースに加えられた変更を反映し、ライブ アプリケーションの依存関係を定義できます。
Run on Kubernetes の実行ターゲットは、Kubernetes クラスタ上で開発サイクルを開始します。開発サイクルが開始されると、Skaffold を使用して Cloud Code でプロジェクト用のイメージを作成し、タグ付けして構成済みのリポジトリに push し、kubectl を使用してプロジェクトの Kubernetes マニフェストをデプロイします。
- 利用可能な構成オプションを使用してデプロイをカスタマイズします。
- アプリケーションが Skaffold モジュールを使用するように構成されている場合は、ビルドまたはデプロイする特定のモジュールを選択できます。
- コマンド パレットを開き(
Ctrl
/Cmd
+Shift
+P
を押してください)、Cloud Code: Run on Kubernetes コマンドを実行します。 - 現在の Kubernetes コンテキストを使用してアプリを実行する(または目的のアプリに切り替える)かどうかを確認します。Kubernetes コンテキストの設定の詳細については、構成の設定をご覧ください。
リモート クラスタをコンテキストとして選択した場合は、プロンプトが表示されたら、イメージの push 先となるイメージ レジストリを選択します。Container Registry を使用している場合は、既存のレジストリを参照するか、作成するレジストリ名を指定できます。 プロジェクトで Artifact Registry API が有効になっていて、少なくとも 1 つの Artifact Registry リポジトリがある場合、既存の Artifact Registry リポジトリを参照して選択できます。
Cloud Code はコンテナをビルドして、レジストリに push し、Kubernetes 構成をクラスタに適用して、ロールアウトを待ちます。
次のステップ
- ローカル開発に Cloud Code の組み込み minikube クラスタを使用する。
- Cloud Code でアプリケーションをデバッグする。
- Skaffold のファイル同期機能の詳細を確認する。