クラウドネイティブとは?実現させるメリットやコンテナについて解説
2023.08.25IT近年、クラウドコンピューティングの普及に伴い、急速に浸透してきた言葉のひとつがクラウドネイティブです。それでは、このクラウドネイティブを実現させることにより、どのようなメリットを得ることができるのでしょうか。
コンテナなどの技術的なキーワードとともに、クラウドネイティブについて解説いたします。
クラウドネイティブとは
近年IaaS、PaaS、SaaSといったクラウドサービスが普及してきています。ITシステムの構築においては、クラウドを既定の選択肢と考える「クラウド・バイ・デフォルト原則」が官公庁のシステムで提唱され、民間ではクラウドファーストが常識となりつつあります。もはやクラウドを使うかどうかを検討するのではなく、クラウドをどう活かすかを論じる段階に入っているといわれています。こうした流れの中で生まれてきたのが、クラウドネイティブという言葉です。
もともとクラウドコンピューティングが登場した2000年代半ばは、システムやアプリケーションはオンプレミス環境で動かすことが前提でした。クラウドの黎明期では、オンプレミス環境で動いていたシステムをクラウドに載せ替えるケースが多く見られました。その後、クラウドの利用がさらに進み、初めからクラウドを使うことを前提に、その利点を最大化できるようにシステム設計がなされるようになりました。
こうしたクラウド前提のアーキテクチャを表す際に、クラウドネイティブと表現されるようになりました。もっとも、当初はクラウドネイティブが何を指すのかについて明確な定義があったわけではありません。
2015年にLinux FoundationのサブファウンデーションとしてCloud Native Computing Foundation(CNCF) が創設され、クラウドネイティブの標準的な定義が定まりつつあります。CNCFが多くのコミュニティやベンダによって支持されたことにより、CNCFの定義が市民権を得てきたといえます。
CNCFではクラウドネイティブを次のように定義しています。
「クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。
これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます」
引用元:https://github.com/cncf/toc/blob/master/DEFINITION.md#日本語版
クラウドネイティブ化するメリット
クラウドコンピューティングの利点を具体的に挙げると、下記のようなメリットが挙がってきます。
- 自社にインフラを持たずに済むこと…運用にかかる人的コスト、トラブル対応のリスクの外部への移転が可能です。
- リソースを必要な分だけオンデマンドに入手可能…必要なときに必要な分を調達できます。資源の拡張・縮小も任意に可能です。
- 環境構築のスピードアップ…ビルド&スクラップも容易でスムーズです。
これらに加え、先述したCNCFのクラウドネイティブの定義では「インパクトのある変更を最小限の労力で頻繁かつ予測どおりに行う」ことが言及されています。
ビジネスや社会環境の変化にともない、システムやアプリケーションの変更は頻繁かつ迅速に実行することが求められます。なおかつ変更があっても、可用性や信頼性といった品質も保たなければなりません。
クラウドネイティブの考え方に則ったアプリケーションは、巨大な一枚岩的な作りではなく、小さなサービスの集合として設計されます。個々のサービス間は、標準化されたインタフェースによって疎に結合され、ひとつのサービスに変更があってもアプリケーション全体に影響を及ぼすことがありません。またリクエストの集中などで処理負荷が高まる場合でも、サービスを冗長化するといったことが容易です。システムの実行状態を自動的に管理し、問題が生じても自動的に回復することにより、可用性や信頼性を保つこともできます。
こうしたクラウドネイティブを技術的に実現するものとして、コンテナやオーケストレーションがあり、それを活かすためのアーキテクチャとしてマイクロサービスがあります。
クラウドネイティブ化を進める際の流れ
CNCFがクラウドネイティブ化までのステップを表したのがCloud Native Trail Mapです。 Cloud Native Trail Mapの要点をピックアップすると、下記のようになります。
- コンテナ化
- CI/CD
- オーケストレーション&アプリケーション定義
- 可観測性と分析
- サービスプロキシ、ディスカバリ&メッシュ
- ネットワーク&ポリシー
- 分散データベース/分散ストレージ
- ストリーミング&メッセージング
- コンテナレジストリ&ランタイム
- ソフトウェアディストリビューション
クラウドネイティブ化の最初の3ステップ
ここでは、クラウドネイティブ化のステップの中で、最初の3つまでに絞ってさらに詳細に中身を解説していきます。以降のステップについては、CNCFの提供する情報などからご確認ください。
1.コンテナ化
コンテナとは仮想環境の一つです。一つのOS上に複数の実行環境を作り出す技術です。仮想マシンによる仮想化のようにゲストOSを介さないため、より軽量な環境が作れます。 いまのところ技術的にはDockerコンテナが最も普及しています。
コンテナでは原則としてひとつのコンテナでひとつのプロセスを実行します。したがって、アプリケーションを設計する際も、アプリケーションを構成する機能やサービスをコンテナ単位に分割して設計します。つまりコンテナ化するということは、モノリシック(一枚岩)なアプリケーションでなく、コンポーネントやサービス群による複合構成でアプリケーションを作ることを意味します。
2.CI/CD
CI/CDとはContinuous Integration/Continuous Delivery(継続的インテグレーション/継続的デリバリー)を示しています。ソースコードの修正、コンテナのビルド、テスト、各環境への適用および本番環境へのリリースがスムーズに繰り返し行えるソフトウェア開発環境を構築することを指しています。
従来、こうした作業を手順書にしたがった手動のオペレーションで実施したり、複雑怪奇なスクリプトで実行したりといったことが行われてきました。しかしこうした方法では、頻繁な変更を行うことがインシデントの発生につながり、システムの信頼性や可用性を損なうことになりかねません。
CI/CDの仕組みでは、デリバリーのパイプラインを自動化し、テストによって品質の担保も保つことができます。
3.オーケストレーション&アプリケーション定義
音楽の管弦楽団のことをオーケストラと呼びます。弦楽器や管楽器、打楽器などのさまざまな奏者が音楽を演奏するのがオーケストラです。 コンピュータシステムのオーケストレーションでは、さまざまなコンピュータリソースやアプリケーションが適切に稼働するように、各種の設定や管理、調節を自動化することを指します。オーケストラが指揮者のもとで、自律的に各奏者が演奏し、全体として調和した音楽を奏でるのと似ています。
クラウドネイティブ・アプリケーションでは、コンテナを実行単位としてアプリケーションを構成しますが、このときのコンテナの実行や賦活監視、各種の設定といった部分を自動的に管理するソフトウェアとして、オーケストレーションソリューションが使用されます。オーケストレーションソリューションとしては、CNCFのメンテナンスするKubernetes(K8s)の利用がデファクトスタンダードとなりつつあります。
Google、Amazon、Microsoft、IBM等のクラウドベンダ各社は、Kubernetesをマネージメントサービスとして提供することで、より簡便にオーケストレーションを導入できるように支援しています。
クラウドにおいて重要な技術「コンテナ」とは
コンテナとは仮想化技術の一つです。従来の仮想マシン(VM)では必要だったハイパーバイザーやゲストOSなどを不要とし、より軽量に仮想環境を作り上げることができます。
コンテナのメリット
- 軽量なリソースで、快適な動作…ゲストOSなどに割くリソースが不要で、快適な動作を実現できます。
- 環境構築がスピーディー…特にDockerのコンテナではIaC(Infrastructure as Code)という考え方が用いられ、ミドルウェアのインストールおよび各種環境設定をコード化し、高速に設定可能です。
- スクラップ&ビルドしやすい…リソースの準備もしやすく、IaCとも相まってコンテナのスクラップ&ビルドが気軽に行いやすいものとなっています。
これらのコンテナ利用のメリットはDevOpsと大変相性が良く、多くのDevOps実施の環境で利用されている理由となっています。
コンテナの活用法
Dockerは当初はLinuxを前提に開発されたため、DockerコンテナはLinuxで実行するものという制約がありましたが、現在ではWindowsコンテナもサポートするようになりました。
コンテナは、開発環境、本番環境のそれぞれの間をそのまま行き来させることができます。コンテナ以前は、開発環境で動いていたアプリケーションを本番環境にもっていくと動作しないといったことがしばしば起きました。アプリケーションの実行に必要なライブラリやランタイムなどの依存関係が開発環境と本番環境で異なることが原因です。
コンテナを使った開発では、こうしたライブラリやランタイムもアプリケーションとともに同じコンテナ内にパッケージすることで、どこに持っていても動作することが保証されます。
アプリケーションの可搬性はコンテナの大きな利点であり、開発者にとってもコンテナを採用するメリットは大きいといえるでしょう。
コンテナオーケストレーションとは
コンテナオーケストレーションツールの代表例として挙げられるのが、CNCFがメンテナンスしているKubernetes(K8s)です。コンピュータシステム、アプリケーション、コンテナなどの自動的な調整を行う役割を果たしてくれるコンテナオーケストレーション。さらには複数のサーバー間にまたがるコンテナの管理なども実現しています。
ただしKubernetesは学習コストが高く、一から環境を構築して自前で運用するのは難しいという声もあります。
企業でKubernetesを利用する場合は、クラウドベンダ各社が提供するマネージドサービスを利用するとこうした問題を回避できます。
またKubernetesをそのまま利用するのではなく、利便性の高いインタフェースや管理ツール、ビジネスユースケースに即したソフトウェア群とともに提供されるサービスもあります。たとえばRed Hat OpenShiftやIBM Cloud Paksなどのソリューションやサービスを用いると、こうした恩恵に浴することができます。 コンテナやKubernetesはオープンな技術であるため、ベンダロックインのリスクが小さく、将来的にベンダを変更する場合も移行にかかるコストや問題を抑えられることもメリットです。
おわりに
クラウドネイティブとは、クラウドサービスや環境の利用を前提としたシステムやサービスです。クラウドサービスのメリットを享受できる上、クラウド環境のメリットを最大限生かした環境構築が可能となります
クラウドネイティブ化における重要なキーワードとしてコンテナがあります。コンテナは仮想環境の一つで、仮想マシンより軽量なアプリケーション動作環境です。Kubernetesなどのコンテナオーケストレーションツールを用いて自動的な調整を行いながら利用されることが想定されており、今後より普及していくと思われる技術です。
i-Learningのクラウドネイティブ人財育成に関する研修はこちら
👉https://www.i-learning.jp/service/it/topics/cloudnative.html