Kubernetesに関する世界観です。
Dockerは、通常ひとつのマシン(ホスト)の中でDockerコンテナを動かす。これにより、マシンの上であたかも別のマシンが動いているかのように仮想化できる。
だが、Dockerはひとつのマシンの中での仮想環境であり、ネットワーク上に接続されたほかのマシンは関係ない。
だが、クラスタや仮想サーバなどの環境では、ネットワークで繋がった多くのマシンをひとつのマシン(クラスタ上のホスト)として仮想化し、そのクラスタの上で複数のコンテナを仮想マシンとして動かす(クラスタ上に存在するたくさんの仮想マシン)ことが必要な時がある。
Kubernetesを使うことで、ネットワーク上の複数のマシンをあたかもひとつのマシンであるかのように仮想化し、クラスタ内でリソースを共有・配分して、その上でコンテナを動かすことができる。
また、Kubernetesを使うことで、クラスタ内のコンテナを適切に管理できる。たとえば、複数のコンテナイメージを連携させたり、ひとつのコンテナがダウンした時に別のコンテナを立ち上げる・負荷分散をするなど、コンテナのリソースの適切な管理と調整が行える。これを「オーケストレーション」と呼ぶ。Kubernetesではほかにも、多種多様なニーズからさまざまな機能が提供されている。
クラスタ内のリソースの配分など、面倒なことは全部Kubernetesが適切に管理してくれる。サーバー管理者は仮想マシンのイメージとマシン台数をKubernetesに指示するだけでよい。
サーバーの規模を大規模化することも簡単で、クラウド上で適切にサービスをデプロイできる。
最近では、Kubernetesを用いたマイクロサービスというサービス設計が流行している。ひとつのJava EEアプリケーションですべての機能を提供するのではなく、Dockerコンテナごとに機能としてのサービスを提供し、Kubernetesでオーケストレーションすることで全体のサービスを提供する。肥大化を防ぎテストが容易になるほか、障害発生時に機能としてのサービス単位に被害を最小化できる。
Dockerコンテナをクラスタリングしたりオーケストレーションしたりするための技術は、Kubernetes以外にもたくさんあります。たとえばOpenShift 3, Flynn, Apache Mesos, Marathon, OpenStack Magnum, Docker Swarm, Docker Composeなど。以下の記事が参考になります。
2023.04.06
Dockerを参照のこと。
クラスタ・分散・高信頼システムを参照のこと。
Dockerでコンテナを仮想化できるのは、ひとつのマシンの中だけでの話。
Kubernetesにより、複数のマシンがネットワーク通信を行う場合に、全体を一台のマシンであるかのように仮想化できる。
クラスタ内のシステムリソースの配分などを自動で行ってくれる。
クラスタ環境やクラウド環境などの仮想サーバとしても利用できる。