1.概要

このチュートリアルでは、Netflixによって構築されたオープンソースのhttps://continuousdelivery.com/[連続配信]プラットフォームであるhttps://www.spinnaker.io[Spin​​naker]を見ていきます。これを使用して、複数のクラウドプロバイダーにアプリケーションをデプロイすることができます。

  • システムはhttps://www.baeldung.com/spring-boot[Spring Boot]の上に構築されており、多くのクラウドプロバイダーをサポートしています。

それがどのように機能するか、そしてどのような場合にそれを使用できるかがわかります。

2.背景

ソフトウェア開発の歴史を見てみましょう。最初に、私たちはまれなリリースでWaterfallを持ちました。

その後、私たちはアジャイルの作業を開始し、あらゆるスプリントで機能を提供しました。

しかし、私たちはまだすべてのスプリントを本番環境にデプロイしていませんでした。

残念ながら、ユーザーはまだ棚に横たわっていた新機能を使用できませんでした。

定期的にデプロイしない理由がいくつかありました。そのうちの1つは、デプロイメントの手順が手動で実行されることが多く、人的ミスが発生しやすいという事実です。

さらに、展開する頻度が高いほど潜在的な問題に対するリスクが高くなると考える人もいました。たとえそうであっても、間違いがあったとしても、すぐにそれを小さな変更に見つけて、問題を解決する新しいバージョンをリリースすることができます。

3.スピネーカー


  • Spin​​naker

    を使用すると、アプリケーションを自動的にプロダクション環境にリリースするために、継続的デリバリーまたは継続的デプロイメントを使用することができます。

ただし、リリースは、アプリケーションが本番環境にデプロイされる前に手動で承認されます。継続的な展開は手動の介入がないことを意味します。

本番環境へのデプロイを含むすべてのステップが実行されます

アプリケーションコードをバージョン管理システムにプッシュするだけです。

私たちのコードをバージョン管理にプッシュしてから本番環境に展開するまで、私たちは多くのステップを実行することができます。コードを構築し、そのコードを単体テストし、テスト環境にデプロイし、そして機能テストを実行することができます。これらすべてのステップを構成するために、いわゆるパイプラインを使用します。

Spinnakerを使用すると、そのようなパイプラインを作成して、ほとんどのクラウドプロバイダーにアプリケーションをデプロイできます。

4.コンポーネント

Spinnakerは基本的に2つの部分で構成されています。さまざまなクラウドプロバイダーの上にある抽象化層と継続的な配信のためのツールです。

4.1. 従来のクラウド展開

私たちがクラウドプロバイダーを見ると、それらはすべてほぼ同じサービスを提供しています。これらのサービスには、インスタンス、サーバーレス、コンテナーサポートなどがあります。

ただし、これらのサービスの構成はプロバイダによって大きく異なります。そのため、プロバイダを切り替えるのが難しくなります。別のクラウドプロバイダーに移動して詳細をすべて習得するには時間がかかります。つまり、基本的にベンダーはクラウドプロバイダーと提携しています。

Netflixは、1つだけに頼るのではなく、クラウドプロバイダーを簡単に切り替えることができるようにしたいと考えていました。だからこそ、彼らはクラウドプロバイダの上に抽象化レイヤを構築しました。

4.2. 抽象化レイヤ

  • Spinnakerを使用する場合、すべてのクラウドプロバイダーで同じです** Amazon Webサービス、Microsoft Azure、Google Cloud Platform、OpenStack、Google App Engine、またはKubernetesで使用できます。これにより、価格がより競争力のあるものであれば、他のクラウドプロバイダーに移行することができます。

  • さらに、同時に複数のプロバイダにデプロイすることもできます。** これにより、冗長性を高めるために2つ以上のプロバイダでアプリケーションを実行できます。

  • 抽象化層のもう1つの利点は、リソースではなくアプリケーションに重点が置かれていることです。** 通常、クラウドプロバイダは現在使用しているリソースを表示します。ただし、どのアプリケーションがどのリソースを使用しているのかを把握する必要があります。

しかし、リソースは私たちにとっては面白くありません。リソースを追跡する時間をかけずにアプリケーションを実行したいのです。 Spinnakerはアプリケーション中心の見方をしています。それで、私たちがそれを見るとき、私たちは最初にアプリケーションを見て、そして次に我々はアプリケーションによって使用されるリソースを見る。

4.3. 連続配信

  • 抽象化層の上に、Netflixは継続的デリバリープラットフォームを構築しました** このプラットフォームは私達が私達のアプリケーションを一つ以上のクラウドプロバイダーにデプロイすることを可能にします。これはJenkinsに少し似ていますが、クラウドプロバイダとのより良い統合を提供し、より少ない設定で済みます。

Jenkinsからの連続配信パイプライン、アップロードされたDockerイメージ、またはgit pushなどをトリガーできます。その後、アプリケーションを使用して単純にイメージまたはコンテナを作成し、それを本番環境で起動できます。

ただし、本番環境に展開する前の自動テストや手動承認など、他にも多くの選択肢があります。

既存のアプリケーションの新しいバージョンをデプロイするときに従うべき戦略を決定することもできます。そのため、古いバージョンを新しいバージョンに簡単に置き換えることができます。ただし、より良い戦略は、それらを最初に並べて実行することです。そうすれば、自動的にまたは手動で新しいバージョンが機能するかどうかを確認し、機能する場合は古いバージョンを削除できます。

5. Netflixクラウドモデル

  • すべてのアプリケーションは1つ以上のサーバーグループで構成されています** 同じバージョンのアプリケーションがサーバーグループ内のすべてのインスタンスで実行されます。

次の命名規則が使用されます:<アプリケーション名> – <(オプション)スタック> – <(オプションの詳細)> – <バージョン番号>。 (オプションの)スタックフィールドは、サーバーグループがテスト、本番、またはその他の目的のどちらのためのものであるかを指定するために使用されます。オプションの詳細フィールドは追加情報に使用されます。

  • 最後に、同じ名前、スタック、および詳細を持つ1つ以上のサーバーグループを含むクラスターという概念があります。失敗したインスタンスは新しいインスタンスに置き換えられます。

負荷の増加に対応するために、インスタンスをサーバーグループに自動的に追加することもできます。

6.展開戦略

  • 新しいバージョンのアプリケーションをデプロイするときは、通常「赤/黒」戦略が選択されます** 最初に、新しいバージョンのアプリケーションを含む新しいサーバーグループがクラスターにデプロイされます。アプリケーションの配置後、新しいサーバーグループが正常かどうかを確認するためのチェックが実行されます。

これで、サーバーグループが有効になり、お客様が利用できるようになりました。

最後に、古いサーバーグループが無効になります。

  • このシナリオでは、新しいアプリケーションサーバーで問題が発生した場合にロールバックするのは簡単です** 古いバージョンのサーバーグループを再度有効にして、顧客が利用できるようにするだけです。

7.なぜスピネーカー

  • Spinnakerを使用すると、使用しているクラウドリソースではなくアプリケーションに集中することができます** これにより、アプリケーションの展開と保守が容易になります。

さらに、Spinnakerは同時に複数のクラウドプロバイダで実行することを可能にします。また、価格戦略や利用可能な機能に応じて、他のクラウドプロバイダーに簡単に切り替えることができます。

8.まとめ

  • SpinnakerはNetflixの経験に基づいて構築されています** 私たちは最小限の労力で同じ方法で彼らの知識を使用して作業することができます。これらのツールに基づいて、アプリケーションを本番環境にデプロイするためのデプロイメントパイプラインを簡単に実装できます。

Spinnakerの詳細については、無料のhttps://www.spinnaker.io/publications/ebook/[Spin​​nakerを使用した継続配信]電子ブックをダウンロードしてください。