「クラウドネイティブ」とは
「クラウドネイティブ」という言葉は、エンタープライズ企業がビジネスの俊敏性、拡張性、効率性の向上を求めて大規模な DX プロジェクトに取り組む際に、さまざまな場面で使用されています。
「クラウドネイティブ」の本来の意味は、ソフトウェアの抽象度を高め、専用のテクノロジー、ツール、プロセスを組み合わせて、アプリケーションの構築、導入、管理の方法を変革するということです。
クラウドネイティブなアプリケーションには、次のような特徴があります。
- コードはコンテナとしてパッケージ化される
- マイクロサービスのコレクションとして設計される
- 開発者と IT 運用担当者が緊密に連携し、アジャイルに業務を進められる
- 柔軟なクラウドインフラ全体に導入・管理される
- 自動化およびポリシー駆動によりインフラリソースの割り当てが可能
エンタープライズ環境におけるクラウドネイティブのメリット
クラウドネイティブ化に取り組む組織は、コンテナや Kubernetes を採用するとともに、広範なクラウドネイティブのエコシステムから、さまざまなオープンソーステクノロジーや商用テクノロジーを活用しています。
コンテナやクラウドネイティブ技術により、アプリケーョン開発の加速、アプリケーションの無停止アップグレード、効率的なスケーリングが可能になり、異なる環境間での移植も容易になります。これらの機能はビジネスの俊敏性を高め、競争優位性をもたらします。
コンテナは、エンタープライズ環境におけるいくつかの重要な問題を解決します。どこでも実行できるほか、開発者向けの堅牢なソフトウェアパッケージ、サービスのアップグレード、スケーラビリティ、可用性、リソース効率などの特長があり、しかもベンダーに依存しないパッケージで利用できます。Kubernetes は、エンタープライズ環境で一般的なハンズオンでの管理とは対照的に、IT 部門がプログラマティックかつ反復可能な方法で大規模に運用できるインフラレイヤーを提供します。Kubernetes は、オンプレミスとパブリッククラウドの両方に導入できるため、環境全体で共通の運用モデルが実現できます。そのため、両方の環境を採用している企業にとって Kubernetes は理想的なプラットフォームです。
クラウドネイティブアーキテクチャ
クラウドネイティブアーキテクチャは、コンテナと Kubernetes を使用して、アプリケーションをより小さなコンポーザブルな部品のセットとして構築し、効率的なスケーリング、無停止アップグレード、他の環境へのシームレスな移行を可能にします。このテクノロジーは、優れたセキュリティと柔軟な自動化機能を備え、コスト効率も優れています。
オンプレミスの Kubernetes スタック
オンプレミスの Kubernetes スタックには、Kubernetes が動作するインフラから、開発者がアプリケーション提供の高速化に使用する Kubernetes 上のサービスまで、さまざまなものがあります。一部のコンポーネントは、スタックの複数の部分に含めることができます。例えば、Kubernetes ディストリビューションの中には、Harbor や Quay などのコンテナレジストリを含むものがあります。コンテナレジストリはまた、任意のディストリビューションで使用できるように、ホステッドサービスやマネージドサービスとして提供されることもあります。
コンピューティングプラットフォーム
Kubernetes は導入可能な環境の制約が小さく、イノベーションの進展によって、運用する方法や場面の選択肢が広がりつつあります。通常、Kubernetes には、少なくとも 3 つのノードが必要であり、各ノードと接続ストレージ間には完全なネットワーク接続が必要です。現在、Kubernetes は、VMware のような仮想インフラ上で実行されることが一般的です。また、ベアメタルや HCI でも多く利用されています。
Kubernetes クラスタのプロビジョニングや運用をより容易に行える機能を追加することもできます。インフラが API(Cluster API や Terraform など)を介して制御されているため、新しいノードのプロビジョニングや接続が容易です。コンテナのセキュリティの脆弱性に対処するために、カスタムハイパーバイザーでワークロードを分離することもできます。Kubernetes クラスタ外部のロードバランサーを使用すれば、ワークロードを利用可能にして、動的な再配置やスケーリングを行うことができます。ワークロードによっては、GPU や TPU などのカスタムハードウェアが有効な場合もあります。また、多数のクラスタを複数の場所で運用する場合(小売店など)は、基盤となるインフラの分散管理機能が役立ちます。
Kubernetes ディストリビューション
Kubernetes は、2015 年のリリース以来、爆発的な成長を遂げており、現在、100 以上の Kubernetes ディストリビューションやホステッドプラットフォームが大手テクノロジー企業やスタートアップ企業から提供されています。 これらの企業は、Kubernetes のコアとなるコードを、ネットワークスタック、クラスタ管理ツール、ロギング、モニタリングといった他のプロジェクトと組み合わせて独自のディストリビューションを作成しています。
コンテナサービス
より効率的な Kubernetes 環境を構築するには、Kubernetes を補完するインフラサービスを追加する必要があります。例えば、基本的なサービスであるコンテナレジストリ、Ingress、ロードバランサー、シークレットストア、証明書マネージャなども追加が必要です。これらは、ディストリビューションにバンドルされていることもあれば、別のサービスとして追加されることもあります。
Kubernetes 上でアプリケーションを構築してデプロイする企業が増えるにつれ、それらの企業が依存する多くのコアサービスも Kubernetes 上で実行することが一般的になります。このような例としては、データベース(Redis、Postgres など)、Pub/Sub(Kafka)、インデクシング(ElasticSearch)、CI/CD サービス(Gitlab、Jenkins)、ストレージ(Portworx、MayaData、Minio、Red Hat)などがあります。
多くの企業が、顧客が選択した Kubernetes ディストリビューション上で動作するこれらのアプリケーションを管理またはサポートする製品・サービスを開発しています。Microsoft のAzure Arc 対応データ サービスがよく知られた例であり、これは顧客環境で Postgres や MS SQL をマネージドサービスとして提供するものです。他にも、Confluent(Kafka)、 Crunchy Data(Postgres)、 Redis Enterprise(Redis)、Percona(Percona)、Elastic(Elasticsearch)、Minio(MinIO)、MayaData(Kubera)といった多くの企業がサービス・テクノロジーを提供しています。
コンテナ
コンテナは、クラウドネイティブソフトウェアを構成する小さな単位です。全ての依存関係要素(バイナリ、ライブラリなど)がパッケージ化されたコードで構成され、独立したプロセスとして実行されます。これにより抽象度が高まり、仮想マシン(VM)では、基盤となるハードウェアからコンピューティングリソースが抽象化されます。同様にコンテナでは、基盤となるオペレーティングシステム(OS)からアプリケーションが抽象化されます。
コンテナは、VM とはいくつか重要な違いがあります。コンテナは VM と比較して、リソースフットプリントが大幅に小さく、起動が速く、クラウド環境間での移植がはるかに容易です。また、VM とは異なり、エフェメラル(一時的で短命)という性質があります。
コンテナは、マイクロサービスソフトウェアアーキテクチャの道を切り開くものです。レガシーアプリケーションが本質的にモノリシックであるのに対し、マイクロサービスベースのアプリケーションは、より小さなコンポーザブルな部分(サービス)のコレクションとして構築され、個別スケーリングや、無停止アップグレードを可能にします。サービスは、共通の機能を実行する 1 つまたは複数のコンテナで構成されます。
コンテナ化されたアプリケーションやマイクロサービスベースのアプリケーションにより、DevOps で必要とされる開発者と IT 運用担当者の緊密な連携と調整が可能になり、ソフトウェア開発の効率化と高速化が実現します。
図 1:VM とコンテナの比較
Kubernetes
コンテナ化されたアプリケーションは分散環境での使用を意図しており、レガシーアプリケーションとは、コンピューティング、ストレージ、ネットワークに関するリソースの使用方法が異なるため、コンテナ化されたワークロードのオーケストレーションを行う専用のインフラレイヤーが必要です。
Kubernetes は、コンテナオーケストレーションツールの事実上の標準であり、クラウドのオペレーティングシステムと評されることもあります。コンテナ化されたワークロードやサービスを管理するための移植性と拡張性に優れたオープンソースプラットフォームであり、宣言的設定と自動化を容易にします。
具体的には、Kubernetes では次のことができます。
コンテナをマシンに割り当てる(スケジューリング)
指定のコンテナをコンテナランタイムで起動する
アップグレード、ロールバック、システムの変更への対応
障害(コンテナのクラッシュなど)への対応
クラスタリソース(サービスディスカバリ、VM 間ネットワーク、クラスタの Ingress/Egress など)の作成
Kubernetes は、スケーラビリティ、可用性、セキュリティ、ポータビリティを念頭に設計されています。インフラのコストを最適化し、利用可能なリソースにワークロードを分散させることができます。また、Kubernetes クラスタの各コンポーネントは、高可用性構成にすることもできます。
Kubernetes の機能は、グローバルなコミュニティによる継続的な貢献によって急速に進化しており、現在、さまざまな Kubernetes ディストリビューションが提供されています。CNCF 認定のディストリビューション(適合プログラムにより相互運用性を保証)は非常に便利ですが、本番環境グレードのクラウドネイティブ環境には、さらに Kubernetes のライフサイクル管理機能に関するインテリジェントな自動化と、ストレージ、ネットワーク、セキュリティ、モニタリング機能の容易な統合が欠かせません。
クラウドネイティブの実現に向けた課題
クラウドネイティブ技術は、ビジネスに俊敏性と革新性をもたらしますが、その構成、導入、管理には業種を問わず困難な課題がともないます。まず、Kubernetes とそのクラウドネイティブ技術のエコシステムは奥が深く、進化が速いという点が挙げられます。さらに、レガシーインフラのアーキテクチャでは、Kubernetes やコンテナによる IT リソースの使用方法に対応できないという問題もあります。これは、ソフトウェア開発者にとって大きな障害となります。クラウドネイティブアプリケーションの開発には、多くの場合オンデマンドのリソースや使い勝手の良いサービスが必要だからです。どの企業も最終的にオンプレミスとパブリッククラウドベースの Kubernetes 環境を組み合わせて使用することになりますが、マルチクラウドの柔軟性のメリットを享受するには、全てのデプロイメントを効果的に管理・監視できることが不可欠です。
クラウドネイティブのベストプラクティス
データセンターにエンタープライズ Kubernetes スタックを構築することは、IT 運用チームの主要な任務の 1 つです。Kubernetes とコンテナ化されたアプリケーションは、回復力があり、迅速なスケーリングが可能で、動的な分散システムをサポートするインフラで実行しなければなりません。
Nutanix ハイパーコンバージドインフラ(HCI)は、Kubernetes 上で大規模に実行されるクラウドネイティブワークロードにとって理想的なインフラ基盤です。Nutanix は、Kubernetes プラットフォームコンポーネントとアプリケーションデータの両方に対して優れた回復力を提供します。また、ベアメタルインフラに優れたスケーラビリティを提供します。Nutanix はさらに、インフラのライフサイクル管理とステートフルコンテナ向けの永続ストレージを簡素化し、クラウドネイティブなインフラの導入や管理において組織が直面する課題のいくつかを解決します。