ニュース
» 2016年10月19日 08時00分 公開

古賀政純の「攻めのITのためのDocker塾」:第30回 Docker Swarmを知る 複数の物理サーバでDocker環境をクラスタ化する方法 (2/3)

[古賀政純(日本ヒューレット・パッカード),ITmedia]

クラスタとは?

 Docker Swarmによって束ねられた複数のDockerホストの集まり(群れ)は、「クラスタ」と呼ばれます。SwarmとはDockerエンジンの集合体、すなわちクラスタを意味し、クラスタではアプリケーションが稼働するコンテナを「サービス」として定義します。この複数のサービスが配備される場所が「Swarm」です。

 Swarmの特徴は、複数のDocker ホストを集め、1つの仮想的な Docker ホストとして扱える点です。一般的に、Dockerの世界で「Swarm」というと、「複数のDockerエンジンが集まったクラスタ」を意味します。つまり「Swarmで稼働するコンテナ」は、Swarmによって形成されたクラスタで稼働するコンテナになります。

 Docker Swarmクラスタは、マネージャノードとワーカノードから構成されます。ここでいうノードとは、Swarmクラスタに参加しているDockerエンジンのインスタンスを意味します。マネージャノードは、Swarmクラスタ全体を管理します。マネージャノードは複数台でも構成できます。一方、ワーカノードは、Dockerコンテナが稼働するDockerホスト群です。Docker 1.12以上では、「Ingress」(イングレス)という名前のオーバレイネットワークがビルトインされています。また、ユーザー独自のオーバレイネットワークを定義することもできます。

Dcoker Docker Swarmは、複数のDockerホストを束ねてクラスタを形成する。Docker 1.12以降では、ビルトインされているオーバレイネットワークにより、Docker Swarmクラスタ内のコンテナ同士で通信が可能

負荷分散機能も提供する

 Docker Swarm 1.11までのバージョンで負荷分散を実現するには、「Kubernetes」(クーバネティス)と呼ばれるソフトウェアなどを別途組み込む必要がありました。しかし、Docker 1.12からDocker SwarmがDockerエンジン本体に取り込まれたことで、Kubernetesを使わずにDocker Swarm入りのDockerエンジンで負荷分散できるようになりました。

 Swarmクラスタで提供されるIngressオーバレイネットワーク上で稼働するコンテナのアプリケーションは、特定のポートを公開し、外部にサービスを提供します。クライアントからIngressオーバレイネットワーク上で公開されているアプリケーションのポートに対してアクセスすると、サービスが稼働しているクラスタのワーカノードに自動的にルーティングされます。このときのワーカノードの負荷は自動的に分散されます。

 マネージャノードは、「Ingressロードバランシング」と呼ばれる負荷分散機能によって、Swarm クラスタの外部に存在するクライアントにサービスを公開します。この時、公開用ポートが割り当てられます。クラスタ外に存在するクライアントは、公開用ポートを使ってSwarmクラスタ上のノードにアクセスできます。Swarmクラスタにおいては、ワーカノード間でサービスをどのように分散するかを指定できます。また、Swarm クラスタの内部には、 DNSがビルトインされており、Swarm マネージャノードは、負荷分散機能を使ってクラスタ内におけるサービスのDNS 名に基づいて、接続要求を分散処理することができます。

Docker Docker 1.12から搭載されている負荷分散機能

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ