Google Cloud Platform

Skaffold による簡単で反復可能な Kubernetes アプリ開発

企業が Kubernetes を導入する目的の 1 つは、本番さながらの環境を使いながらイテレーションやデプロイを行えるようにすることです。そこで Google は、こうした目標の達成を支援するべく、Skaffold を発表しました。Skaffold は、Kubernetes アプリケーションの継続的な開発を容易にするコマンドライン ツールです。

Skaffold を使用すれば、開発者はアプリケーション ソース コード開発をローカルで繰り返し行いながら、ローカルまたはリモート Kubernetes クラスタでそのアプリケーションを継続的に更新し、検証やテストに備えることができます。このような開発ワークフローの自動化は、開発時間の節約につながり、本番稼働までの過程を通じてアプリケーションの品質を高めます。

Kubernetes は、アジリティを高め、信頼性の高いソフトウェア デプロイを容易にする API と方法論を運用担当者に提供します。運用担当者は、カスタム デプロイの方法論と同様の手続き(より堅牢な手続きとはなりませんが)をプログラム的に実現する方法を利用できます。

Kubernetes の機能は、IaC(Infrastructure as Code)、統合ロギング、イミュータブル インフラストラクチャ、安全な API ドリブンのデプロイ戦略(カナリア リリースや Blue-Green Deployment など)といった一般的なベスト プラクティスを運用チームが適用するのに役立ちます。運用担当者は、インフラストラクチャ管理の中で自組織にとって最も重要な部分に重点を置くことができ、サービスのリスクを最小限に抑えながら、速いリリース サイクルをサポートできます。

しかし、運用チームが Kubernetes のデプロイ方法論のメリットを熟知していても、開発者が Kubernetes を組織内で最後に認識することもあります。開発者はすでに Docker のような Linux コンテナを用いて、再利用可能なアプリケーション パッケージの作成に乗り出しているかもしれません。

Docker は、繰り返し使えるシンプルな方法でアプリケーションの依存関係と構成を定義できる反復可能なランタイム環境の作成を可能にします。Docker を使えば、開発者はチーム全体で開発ランタイムの協調を図ることができます。ただし、Docker はデプロイや検証に関する汎用的な方法論を伴っていません。そのため開発者は、本番環境で使われている Kubernetes の API と方法論を利用して、同様の統合および手動テスト環境を用意したいと考えています。

Kubernetes の仕組みを理解した開発者は、Kubernetes API を起動して作業を実行する必要があります。その手順は次のとおりです。

  1. Kubernetes クラスタを見つけるか、デプロイする。
  2. Docker イメージを作成し、クラスタで有効なレジストリにアップロードする。
  3. リファレンス ドキュメントやサンプルを参考にして、最初の Kubernetes マニフェスト定義を作成する。
  4. kubectl CLI か Kubernetes ダッシュボードでアプリケーション定義をデプロイする。
  5. 機能追加、バグ修正、または変更セットが完了するまで、手順 2-4 を繰り返す。
  6. 変更をチェックインし、以下を含む CI(継続的インテグレーション)プロセスを実行する。
  7. 単体テスト
  8. 統合テスト
  9. テスト環境やステージング環境へのデプロイ

手順 2~5 では、開発者はさまざまなインターフェースを持つ多数のツールを使用してアプリケーションを更新しなければなりません。ただし、これらの手順のほとんどは開発者ごとに異なるものではないので、自動化することが可能です。あるいは最低でも、開発者の経験に応じてカスタマイズされた一連のツールでガイドできます。

そこで Skaffold の出番となります。Skaffold は、アプリケーションのビルド、プッシュ、デプロイのワークフローを自動化します。開発者は、コードの開発時にバックグラウンドで Skaffold を起動し、入力や追加のコマンドなしでアプリケーションを継続的に更新できます。また、CI/CD(継続的デリバリー)パイプラインのような自動化のコンテキストで Skaffold を使用することで、アプリケーションを本番に移行する際に、同じワークフローとツールを利用できます。

Skaffold の機能

Skaffold は初期フェーズにあるオープンソース プロジェクトです。以下のような設計上の考慮点と機能があります。

  • サーバ側コンポーネントがなく、クラスタでオーバーヘッドを発生させません。
  • ソース コードの変更を検出し、自動的にビルド、プッシュ、デプロイを行えます。
  • イメージ タグ管理。Kubernetes マニフェストのイメージ タグの更新を気にすることなく、開発時に変更をプッシュできます。
  • 既存のツールとワークフローをサポート。ビルド API やデプロイ API を使って、多種多様なワークフローをサポートする実装を作成できます。
  • 多数のアプリケーション コンポーネントをサポート。変更されたスタックだけをビルド、デプロイできます。
  • ファイルの保存時に常にデプロイしたり、同じ構成で、デプロイせずに実行したりできます。

プラガビリティ

Skaffold はプラガブル アーキテクチャを備えており、開発ワークフローの中で最適なツールを選択できます。

skaffold-117yy.max-700x700.png

Google Kubernetes Engine(GKE)で Skaffold を使い始めるには、スタート ガイドに従います。Minikube と組み合わせてローカルで試す場合は、README のガイドを参照してください。ディスカッションやフィードバックについては、メーリング リストか GitHub のイシュー トラッカーをご利用ください。

GCP と Kubernetes Engine をこれまで試したことがない方は、300 ドル分の無料クレジットを利用すれば、すぐに使い始めることができます。

デモ

skaffold-demo0qqq.GIF

* この投稿は米国時間 3 月 16 日、Solutions Architect の Vic Iglesias によって投稿されたもの(投稿はこちら)の抄訳です。

- By Vic Iglesias, Solutions Architect