Kubernetesを使用する必要がある4つの理由

Sirish Raghuramは、Platform9Systemsの共同創設者兼CEOです。

最新のソフトウェア開発者のほとんどが証明できるように、コンテナは、物理および仮想インフラストラクチャでクラウドネイティブアプリケーションを実行するための劇的に高い柔軟性を提供してくれました。コンテナーは、アプリケーションを構成するサービスをパッケージ化し、開発/テストと本番環境の両方で使用できるように、さまざまなコンピューティング環境間で移植可能にします。コンテナを使用すると、需要の急増に合わせてアプリケーションインスタンスをすばやく簡単に立ち上げることができます。また、コンテナはホストOSのリソースを利用するため、仮想マシンよりもはるかに軽量です。これは、コンテナが基盤となるサーバーインフラストラクチャを非常に効率的に利用することを意味します。

ここまでは順調ですね。コンテナランタイムAPIは個々のコンテナの管理に適していますが、複数のホストにまたがる数百のコンテナで構成される可能性のあるアプリケーションの管理に関しては、ひどく不十分です。コンテナは、スケジューリング、負荷分散、分散などのタスクのために管理し、外部に接続する必要があります。ここで、Kubernetesのようなコンテナオーケストレーションツールが登場します。

コンテナ化されたアプリケーションをデプロイ、スケーリング、管理するためのオープンソースシステムであるKubernetesは、コンテナをコンピューティングクラスタにスケジュールする作業を処理し、ワークロードを管理して、ユーザーが意図したとおりに実行されるようにします。 Kubernetesは、後付けとして運用を強化するのではなく、ソフトウェア開発と運用を設計によって統合します。宣言型のインフラストラクチャに依存しない構造を使用して、アプリケーションの構成方法、相互作用方法、およびアプリケーションの管理方法を記述することにより、Kubernetesは最新のソフトウェアシステムの操作性を桁違いに向上させることができます。

Kubernetesは、本番環境でコンテナを実行した独自の経験に基づいてGoogleによって構築されました。確かに、その成功の多くはGoogleの関与によるものです。グーグルは地球上で最も才能のあるソフトウェア開発者の何人かを持っており、それは規模で最大のソフトウェアサービスのいくつかを実行しています。この組み合わせにより、Kubernetesは、事実上すべての組織のスケーリングニーズを満たすことができる堅固なプラットフォームになることが保証されました。この記事では、Kubernetesが重要である理由と、KubernetesがDevOpsチームにとって重要な前進を示す理由について説明します。

関連動画:Kubernetesとは何ですか?

この90秒のビデオでは、コンテナ化されたアプリケーションを自動化するためのオープンソースシステムであるKubernetesについて、テクノロジーの発明者の1人であるHeptioの創設者兼CTOであるJoeBedaから学びます。

今日のインフラストラクチャフレームワーク

最近、開発者は、専用のオンプレミスサーバー、仮想化されたプライベートクラウド、AWSやAzureなどのパブリッククラウドなど、複数のオペレーティング環境で実行されるアプリケーションを作成することが求められています。従来、アプリケーションとそれをサポートするツールは基盤となるインフラストラクチャと密接に関連していたため、潜在的な利点があるにもかかわらず、他の展開モデルを使用するにはコストがかかりました。これは、特定のネットワークアーキテクチャに関連するパフォーマンスの問題など、いくつかの点でアプリケーションが特定の環境に依存するようになることを意味しました。独自のオーケストレーション手法など、クラウドプロバイダー固有の構成要素の順守。特定のバックエンドストレージシステムへの依存関係。

PaaSはこれらの問題を回避しようとしますが、プログラミング言語やアプリケーションフレームワークなどの分野で厳しい要件を課すことを犠牲にすることがよくあります。したがって、PaaSは多くの開発チームにとって立ち入り禁止です。

Kubernetesは、制限を課すことなくコンテナにコア機能を提供することで、インフラストラクチャのロックインを排除します。これは、ポッドやサービスなど、Kubernetesプラットフォーム内の機能の組み合わせによって実現されます。

モジュール性によるより良い管理

コンテナを使用すると、関心の分離を明確にしながら、アプリケーションをより小さなパーツに分解できます。個々のコンテナイメージに提供される抽象化レイヤーにより、分散アプリケーションの構築方法を根本的に再考することができます。このモジュラーアプローチにより、それぞれが特定のコンテナーを担当する、より小規模で焦点を絞ったチームによる迅速な開発が可能になります。また、依存関係を分離し、適切に調整された小さなコンポーネントを幅広く利用することもできます。

しかし、これはコンテナだけでは達成できません。これらのモジュラーパーツを統合および調整するためのシステムが必要です。Kubernetesは、ポッド(通常は単一のアプリケーションとして制御されるコンテナーのコレクション)を使用してこれを部分的に実現します。コンテナは、ファイルシステム、カーネル名前空間、IPアドレスなどのリソースを共有します。このようにコンテナを併置できるようにすることで、Kubernetesはあまりにも多くの機能を単一のコンテナイメージに詰め込みたいという誘惑を取り除きます。

Kubernetesのサービスの概念は、同様の機能を実行するポッドのコレクションをグループ化するために使用されます。サービスは、検出可能性、可観測性、水平スケーリング、および負荷分散のために簡単に構成できます。

大規模なソフトウェアの展開と更新

Devopsは、ソフトウェアの構築、テスト、リリースのプロセスをスピードアップする方法として登場しました。その当然の結果として、インフラストラクチャの管理から、ソフトウェアの大規模な展開と更新の方法の管理に重点が移っています。ほとんどのインフラストラクチャフレームワークはこのモデルをサポートしていませんが、Kubernetesは部分的にKubernetesコントローラーを介してサポートしています。コントローラのおかげで、インフラストラクチャを使用してアプリケーションのライフサイクルを簡単に管理できます。

Deployment Controllerは、多くの複雑な管理タスクを簡素化します。例えば:

  • スケーラビリティ。ソフトウェアは、ポッド全体にスケールアウト方式で初めて展開でき、展開はいつでもスケールインまたはスケールアウトできます。
  • 可視性。ステータスクエリ機能を使用して、完了、進行中、および失敗した展開を特定します。
  • 時間の節約。展開はいつでも一時停止し、後で再開します。
  • バージョン管理。新しいバージョンのアプリケーションイメージを使用してデプロイされたポッドを更新し、現在のバージョンが安定していない場合は以前のデプロイメントにロールバックします。

他の可能性の中でも、Kubernetesは、最新のアプリケーションの開発者にとって特に価値のあるいくつかの特定のデプロイ操作を簡素化します。これらには次のものが含まれます。

  • 水平方向の自動スケーリング。Kubernetesオートスケーラーは、指定されたリソースの使用量に基づいて(定義された制限内で)デプロイメントのポッド数を自動的にサイズ設定します。
  • ローリングアップデート。Kubernetesデプロイメントの更新は、デプロイメントのポッド全体で「ローリング方式」で調整されます。これらのローリング更新は、使用できないポッドの数と一時的に存在する可能性のある予備のポッドの数に関するオプションの事前定義された制限を使用して調整されます。
  • カナリア展開。新しいバージョンのデプロイメントをデプロイする場合の便利なパターンは、最初に前のバージョンと並行して新しいデプロイメントを本番環境でテストし、新しいデプロイメントをスケールアップすると同時に、前のデプロイメントをスケールダウンすることです。

従来の包括的なPaaSオファリングとは異なり、Kubernetesは、サポートされるアプリケーションのタイプに幅広い自由度を提供します。アプリケーションフレームワーク(Wildflyなど)を指示したり、サポートされている言語ランタイム(Java、Python、Ruby)を制限したり、12要素のアプリケーションのみに対応したり、「アプリ」と「サービス」を区別したりすることはありません。Kubernetesは、ステートレス、ステートフル、データ処理のワークロードなど、さまざまなワークロードをサポートしています。アプリケーションをコンテナで実行できる場合は、Kubernetesで正常に実行されるはずです。

クラウドネイティブアプリの基盤を築く

コンテナへの関心を考えると、当然のことながら、他の管理およびオーケストレーションツールが登場しています。人気のある代替手段には、Apache Mesos with Marathon、Docker Swarm、AWS EC2 Container Service(ECS)、HashiCorpのNomadなどがあります。

それぞれにメリットがあります。Docker SwarmはDockerランタイムに緊密にバンドルされているため、ユーザーはDockerからSwarmに簡単に移行できます。Mesos with Marathonはコンテナに限定されず、あらゆる種類のアプリケーションをデプロイできます。AWS ECSは、現在のAWSユーザーが簡単にアクセスできます。ただし、KubernetesクラスターはEC2で実行でき、Amazon Elastic Block Storage、Elastic Load Balancing、AutoScalingGroupsなどのサービスと統合できます。

これらのフレームワークは機能と機能が互いに重複し始めていますが、Kubernetesは、そのアーキテクチャ、イノベーション、およびその周りの大規模なオープンソースコミュニティのために非常に人気があります。

Kubernetesは、チームが最新のソフトウェア開発の要件に対応できるようにするため、DevOpsのブレークスルーを示しています。 Kubernetesがない場合、チームは多くの場合、独自のソフトウェアデプロイメント、スケーリング、および更新ワークフローのスクリプトを作成する必要があります。一部の組織は、これらのタスクを単独で処理するために大規模なチームを採用しています。 Kubernetesを使用すると、コンテナから最大限のユーティリティを引き出し、クラウド固有の要件に関係なく、どこでも実行できるクラウドネイティブアプリケーションを構築できます。これは明らかに、私たちが待ち望んでいたアプリケーションの開発と運用のための効率的なモデルです。

New Tech Forumは、前例のない深さと幅で新しいエンタープライズテクノロジーを探索して議論する場を提供します。選択は主観的であり、読者にとって重要で最も興味深いと思われるテクノロジーの選択に基づいています。出版用のマーケティング資料を受け入れず、寄稿されたすべてのコンテンツを編集する権利を留保します。すべてのお問い合わせは[email protected]までお送りください。