この2部構成のシリーズの最初の記事では、コンテナ、仮想マシン、および各テクノロジーの長所と短所の類似点と相違点について説明します。また、Kubernetes(多くの場合K8sと表記されます)と、Kubernetesが誕生した理由についても説明します。
コンテナ
簡単に言うと、コンテナーは、任意のインフラストラクチャでスタンドアロンのデプロイメントユニットとして使用できるソフトウェアの標準ボックスと考えてください。コンテナには、コードとすべての依存関係がバンドルされています。これらは軽量でスタンドアロンであり、アプリケーションの実行に必要なすべてのランタイム、設定、およびシステムツールが含まれています。
仮想マシン
仮想マシン(VM)は、物理マシンと同じように動作するサンドボックスプログラム(ゲストマシン)であり、物理ハードウェアとオペレーティングシステム(ホストマシン)で実行されます。仮想化は、マシン内に複数のマシンを作成するようなものです。仮想マシン内のソフトウェアは、ホストオペレーティングシステムに干渉しません。これにより、VMは、ベータアプリケーションのテスト、ウイルスに感染したファイルの分析と調査、および物理システムに配置したくないその他のソフトウェアの調査に最適です。仮想マシンのホストシステムは、関連するテクノロジーとハードウェアに応じて、数台から数十台の複数の仮想マシンに対応できるように設計および装備されています。
[読者も気に入っています:Ansibleで仮想マシンの導入を自動化:設計]
各VMは、独自の仮想CPU、メモリ、ハードディスク、NIC(ネットワークインターフェースカード)を使用します。これらは、物理マシンのリソースにマッピングされます。基本的に、VMはテスト環境であり、その廃棄可能性、迅速な構築時間、およびホスト間の移植性により、コスト、時間、およびその他のリソースを節約できます。 VMは、物理的なホストシステムに損害を与えるリスクなしに、最新のソフトウェアとアプリケーションをテストするための安全な環境を提供します。
注:VMとホストは互いに論理的に分離されていますが、VM自体は、物理マシン上のスタンドアロンオペレーティングシステムほど安全ではありません。また、ネットワークシステムは、物理的であれ仮想的であれ、ネットワークベースの攻撃や課題に対して同様に脆弱です。
VMとコンテナには重要な違いがあります
VMとコンテナの定義といくつかの使用例がわかったので、次の表でVMとコンテナの主な違いを比較できます。
Kubernetes
Kubernetesは、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するためのオープンソースシステムです。以前はBorgとして知られていたK8sは、オープンソースプロジェクトになる前にGoogleによって使用されていました。現在、CNCF(Cloud Native Computing Foundation)によって保守および管理されています。 K8sは、コンテナをポッドと呼ばれる論理ユニットにグループ化します。ポッドはアプリケーションを形成します。ポッドを使用すると、管理と検出も簡単になります。
なぜKubernetesを使用する必要があるのですか?
マイクロサービスとクラウドが台頭し始めたため、システム上で実行されている何千ものコンテナーを管理する必要がありました。これは、高可用性の要件やその他の必需品が原因の1つです。
Kubernetesの主な利点は次のとおりです。
- 自動ロールアウトとロールバック:すべてのポッドが同時にダウンしないようにしながら、変更の自動ロールアウトを支援します。ヘルスを監視し、変更をロールバックするために使用できます。
- サービス検出と負荷分散:ポッド(コンテナーのラッパー)に独自のIPアドレスと単一のDNS名を与えるのに役立ちます。 K8sは負荷分散にも役立ちます。
- サービストポロジ:クラスタートポロジに基づいてサービストラフィックをルーティングするのに役立ちます。
- ストレージオーケストレーション:ローカルストレージやクラウドプロバイダーストレージサービスなど、選択したストレージシステムをマウントします。
- スケーリング:CLIまたはGUIを介したCPU使用率に基づいてアプリケーションをスケールアップまたはスケールダウンします。
- 自己修復:失敗したコンテナーを再起動し、ユーザーの要求に応答しないコンテナーを強制終了し、ヘルスチェックに応答しないコンテナーを起動するのに役立ちます。
ユースケース、効率、およびコスト削減
K8の利点を見てきましたが、今度は、どの企業もKubernetesの恩恵を受けることができる理由を説明します。企業は、自社の製品を顧客が迅速かつ確実に利用できるようにする必要があります。 Kubernetesはまさにそれを実現するのに役立ちます。コンポーネントをマイクロサービスに分割します。マイクロサービスは、小規模なチームの焦点となる可能性があります。パーツは後でAPIを介して統合されます。このようにして、各チームの焦点が狭くなり、リリースプロセス全体が高速化されます。
スケーラビリティの向上
ユーザーの負荷が動的に変化する現代では、ダウンタイムがいつ発生するかはわかりません。特定の日にフラッシュセールが予定されているとします。その日、顧客がアプリケーションを利用できるようにする必要があります。 Kubernetesは、機能を維持するポッドのスケーリングに役立ちます。また、販売が終了すると、ポッドが縮小され、自動的にコストが削減されます。
マルチクラウド環境で利用可能
Kubernetesの最大の利点は、企業がさまざまなパブリッククラウド環境とプライベートクラウド環境にアプリをデプロイできることです。ベンダーロックインを回避するハイブリッドクラウドを使用できます。また、企業はワークロードを移行できるため、投資収益率(ROI)が最大になります。
[この無料のチートシートでKubernetesの使用の基本を学びます。 ]
まとめ
この1つの記事では、Kubernetesのすべてのユースケースを網羅することはできませんが、K8がどのように生まれたのか、それが何であるか、そしてK8が何をすることができるかについてある程度理解できました。