Kubernetes は、ブルーグリーン・デプロイメントと呼ばれるソフトウェア開発ライフサイクル戦略をサポートしています。この戦略では、アプリケーションの新バージョンと旧バージョンを同時に本番環境で実行します。ブルーグリーン・デプロイメントとは何か、Kubernetes アプリケーションにこの戦術を実装したい理由について解説します。
ブルーグリーン・デプロイメントとは
ブルーグリーン・デプロイメントは、アプリケーションの新バージョンと旧バージョンを同時に本番環境で実行するソフトウェア開発ライフサイクル戦略です。アプリケーションの展開後、古いバージョン(青)から新しいバージョン(緑)に徐々に移行されます。
ソフトウェア・アップデートを迅速に配信するには、開発者が継続的に機能を展開する方法が必要でした。従来、コード・デプロイメントにはダウンタイムが必要だったため、特定の日に毎週または毎月行われていました。この戦略は、ソフトウェアの更新を遅らせ、継続提供をサポートしません。
ブルーグリーン・デプロイメントでは、アプリケーションの旧バージョンと新バージョンの両方を本番環境で実行することで、この問題を解決します。青色のバージョンは古いアプリケーション、緑色のバージョンは新しいアプリケーションです。ユーザーは、デプロイメント後に新しい緑色のバージョンに徐々に移行します。ユーザーが新しい緑色のバージョンに移動した後、バグや重大なエラーのためにコードを以前のバージョンにロールバックする必要がある場合、青色のバージョンはフェイルオーバーとして機能します。
Kubernetes によるブルーグリーン対ローリング展開
多くのエンタープライズ環境では、実稼働は複数のサーバーで実行されます。複数のバージョンを同時に実行する代わりに、ローリング展開はアプリケーションの 1 つのバージョンで動作し、各サーバーを個別に更新します。
ロード・バランサーの背後に 2 台のサーバーがあり、1 つの本番アプリケーションを実行しているとします。ローリング展開では、開発者が 1 台のサーバーをローテーションから取り出し、アプリケーションを更新してから、サーバーをローテーションに戻します。2 番目のサーバーはローテーションから取り除かれ、その後も更新されます。ほとんどのローリング環境には 3 つのサーバーがあり、新しいバージョン環境にエラーが発生した場合に 1 つのサーバーがフェイルオーバーとして機能します。
Kubernetes によるブルーグリーン対カナリア
カナリアの展開はブルーグリーン・デプロイメントに似ていますが、カナリア・デプロイメントは、全てのユーザーを新しいバージョンに徐々に移動させるのではなく、特定のユーザーを新しいバージョンのアプリケーションに送ります。ベータ・テストに関心のあるユーザーを対象に新しいアプリケーションをテストしたり、新しいユーザーを対象に新しい機能をサイレント・テストしてフィードバックを得るための優れた戦略です。
通常、カナリア・デプロイメントは少数のユーザー・サブセットで使用され、元のバージョンは依然として大多数のユーザーに対して実行されます。新しいバージョンにリダイレクトされるユーザのサブセットはわずかであるため、インフラのコストは低く、少数のユーザをサポートするためにはあまりにも高度な必要はありません。
ブルーグリーン・デプロイメントのメリット
どのような継続提供環境でも、ブルーグリーン・デプロイメントにはいくつかのメリットがあります。ブルーグリーン・デプロイメントは、アプリケーション機能の更新の配信を高速化します。開発者は、新しいコードの展開を待つ必要がなくなり、展開が数か月遅れる可能性があります。
3 種類のデプロイメントのうち、ブルーグリーン・デプロイメントは他のデプロイメントよりも安全です。アプリケーションの両方のバージョンが同時に実行されるため、開発者は多くの手間をかけずに変更をロールバックできます。必要に応じて、導入やロールバック中にダウンタイムや生産性の低下を経験することはありません。
ブルーグリーン・デプロイメントの欠点
ブルーグリーン・デプロイメントの最大の欠点は、コストです。企業は、アプリケーションのブルーバージョンとグリーンバージョンの両方をホストできるデュアル環境に対してIT予算を支払う必要があります。また、両方の環境を維持・監視するために、スタッフの間接費も負担します。
組織にとってもう 1 つのハードルは、データベースの同期です。データベースの変更は簡単にロールバックできないため、特に緑と青の両方の環境が同じデータベースを使用している場合は、テーブルとデータベース・スキーマの更新を慎重に行う必要があります。実稼働データベースに展開する前に、両方の環境を慎重にテストする必要があります。
Kubernetes でブルーグリーン・デプロイメントを使用するタイミング
継続的な配信と Kubernetes が連携します。開発者は、Kubernetes などのオーケストレーション・ツールを使用して、アプリケーションを自動的にデプロイできます。Kubernetes は、青と緑の両方の環境をオーケストレーションするために使用でき、開発者は単にコードをデプロイし、ステージング環境から本番環境へのコードのプロモート Kubernetes を管理できます。
コンテナ化された環境は、ブルーグリーン・デプロイメントに最適です。アプリケーションポッドを迅速に破壊して再構築し、青または緑のバージョンを実行できるようにします。コンテナ・アプリケーションがエラーを引き起こすと、開発者は変更をブルー・バージョンに簡単にロールバックできます。