Kubernetesに関する世界観です。
Dockerは、通常ひとつのマシン(ホスト)の中でDockerコンテナを動かす。これにより、マシンの上であたかも別のマシンが動いているかのように仮想化できる。
だが、Dockerはひとつのマシンの中での仮想環境であり、ネットワーク上に接続されたほかのマシンは関係ない。
だが、クラスタや仮想サーバなどの環境では、ネットワークで繋がった多くのマシンをひとつのマシン(クラスタ上のホスト)として仮想化し、そのクラスタの上で複数のコンテナを仮想マシンとして動かす(クラスタ上に存在するたくさんの仮想マシン)ことが必要な時がある。
Kubernetesを使うことで、ネットワーク上の複数のマシンをあたかもひとつのマシンであるかのように仮想化し、クラスタ内でリソースを共有・配分して、その上でコンテナを動かすことができる。
また、Kubernetesを使うことで、クラスタ内のコンテナを適切に管理できる。たとえば、複数のコンテナイメージを連携させたり、ひとつのコンテナがダウンした時に別のコンテナを立ち上げる・負荷分散をするなど、コンテナのリソースの適切な管理と調整が行える。これを「オーケストレーション」と呼ぶ。Kubernetesではほかにも、多種多様なニーズからさまざまな機能が提供されている。
クラスタ内のリソースの配分など、面倒なことは全部Kubernetesが適切に管理してくれる。サーバー管理者は仮想マシンのイメージとマシン台数をKubernetesに指示するだけでよい。
サーバーの規模を大規模化することも簡単で、クラウド上で適切にサービスをデプロイできる。
大量のサーバーマシン環境において、どのマシンでどのコンテナを動かすかをスケジューリングするためには、Kubernetesを使うことができる。数千台というサーバーの中で、Kubernetesがリソースの空き状況を見て、自動的に適切なコンテナを適切なサーバーに配置してくれる。
また、コンテナがダウンした時に自動的に再起動する可用性、負荷が大きくなるにつれてコンテナの台数を増やすスケーリング、振り分けられるコンテナへの負荷分散、サービスを止めることなくアプリを更新、などといったことができる。
また、従来の命令型の管理方法と異なり、Kubernetesでは宣言型のアプローチを行う。あるべき状態をYAMLで指定し、その状態になるようにKubernetesが自動的にサーバーを管理する。IaC (Infrastructure as Code)の考え方のひとつ。
詳しくは以下の動画が参考になる。
2026.08.17
最近では、Kubernetesを用いたマイクロサービスというサービス設計が流行している。ひとつのJava EEアプリケーションですべての機能を提供するのではなく、Dockerコンテナごとに機能としてのサービスを提供し、Kubernetesでオーケストレーションすることで全体のサービスを提供する。肥大化を防ぎテストが容易になるほか、障害発生時に機能としてのサービス単位に被害を最小化できる。
Dockerコンテナをクラスタリングしたりオーケストレーションしたりするための技術は、Kubernetes以外にもたくさんあります。たとえばOpenShift 3, Flynn, Apache Mesos, Marathon, OpenStack Magnum, Docker Swarm, Docker Composeなど。以下の記事が参考になります。
2023.04.06
Rancher DesktopはDocker Desktopの代替ツールで、Kubernetesクラスタの管理と実行に特化している。
2026.03.05
HelmはKubernetes用のパッケージマネージャ。
2026.07.13
以下はYouTubeの入門動画。
以下はDockerコンテナとKubernetesについての4回に渡る動画シリーズ。
2026.08.17
Dockerを参照のこと。
クラスタ・分散・高信頼システムを参照のこと。
Dockerでコンテナを仮想化できるのは、ひとつのマシンの中だけでの話。
Kubernetesにより、複数のマシンがネットワーク通信を行う場合に、全体を一台のマシンであるかのように仮想化できる。
クラスタ内のシステムリソースの配分などを自動で行ってくれる。
クラスタ環境やクラウド環境などの仮想サーバとしても利用できる。