Docker Swarm:クラスタ管理
5985 ワード
前言
以前docker machineをまとめたとき、dockerに対する理解はまだ深くなく、docker machineとdocker swarmの違いさえ知らなかった.
資料や公式文書を調べた後、今日はほぼ徹底的に分かりました.実はdocker machineはdockerマルチノードの管理ツールにすぎず、他のノードにdockerをインストールしたり、dockerコンテナを実行したりするのに役立ちます.一方、docker swarmはdockerクラスタ管理ツールであり、クラスタ全体が協働して動作し、コンテナの観点からはopenstackのような感じで、クラスタ全体を直接管理することができ、分散の観点からはhadoopに似ているが、もちろん分布式のこの観点から考えるだけだ.
本稿では、docker swarmでのホスト間通信と、最も強力なdocker swarmクラスタ管理機能について簡単に説明します.
一、docker swarmインストール
1.1 docker machine作成ノード
ここでもdocker machineとdocker swarmの違いを体現することができ、簡単に言えばdocker machineはdocker swarmのためにサービスされている.
まずdocker-machineを使用して3つのdockerノードを作成します.
docker-machineプライマリノードでは、ipが作成するホストのipアドレスであり、nameが作成するホストに名前を変更するhost名である上記の操作を3回実行します.ここでは、swarm-manager、swarm-node 1、swarm-node 2と仮定し、swarm-managerをmanagerノードとして選択することは明らかである(以下詳細に説明する).
1.2 swarmクラスタの作成
docker swarmはmanagerノードとworkerノードに分かれており、managerノードはプライマリノードに相当し、すべてのworkerノードを管理できることは明らかです.
managerノードの作成
上記で作成した3つのdockerノードのうち1つをmanagerノードとして選択し(swarm-managerノードが上記で選択されている)、docker-machineノードで次の操作を行います.
上記の操作を実行すると、作成に成功したことを示し、managerノードがサブノードを識別する識別子であるtokenなどの情報を含むworkerノードを作成するコマンドが表示されます.
workerノードの作成
同様にdocker-machineでは、次の操作を行います.
ここで、上記token、ipはmanagerノードipアドレスであり、これらは成功したmanagerノードが作成された後に与えられる.
すべてのクラスタ内のすべてのノードを表示するには、managerノードで次のコマンドを実行します.
このコマンドは、クラスタ内のすべてのノードをリストし、各ノードの役割を示します.もちろんここではdocker-machineでsshで実行することもできます.以下同じです.
二、docker swarmホスト間通信
swarmのホスト間通信にはoverlayネットワークも必要です(または、他のいくつかのオプションがありますが、まだテストされていません).しかし、前述とは異なり、swarmはconsulサービスを必要とせず、実際にはswarmがconsulの機能を提供し、ホスト間通信の操作を簡素化することに相当する.
managerノードで次のコマンドを実行してoverlayネットワークを作成します.
ここでは--attachableパラメータを追加する必要があります.そうしないと、コンテナには使用できません.
プライマリノード上にoverlayネットワークを作成する後、workerノードはconsulの方式を採用するように自動的にネットワークを認識することはできないが、--network
これにより、ネットワークを使用するすべてのノードが通信できるようになります.同様にbrctl showコマンドを使用すると、ノードがdocker_を生成していることがわかります.gwbridgeブリッジは、以前の解析と同様にoverlayネットワークの動作原理である対応するvethxxxをマウントしている.
三、docker swarmクラスタ管理——応用を配置する
これはdocker swarmの強みであり、負荷バランス、プライマリ・スペア、災害対応などの機能を直接実現することができます.アプリケーションを自動的に作成し、一連のサービスを含むアプリケーションを適用することができます.各サービスは簡単に言えば、ミラーがいくつかのコンテナを作成し、これらのコンテナが集合して特定の機能を実現し、ユーザーがこれらのコンテナがどのノードで実行されるかを指定する必要がなく、swarmが自動的に割り当てられ、異なるノードでジャンプすることもあります.ワークノードが削除されると、その上で実行されているすべてのコンテナも自動的に他のノードに移行します.
多くのメリットを説明しましたが、サービスを公開する方法について詳しく説明します.
3.1プロファイルの作成
まず、アプリケーションのすべての情報、必要なサービス、各サービスで使用されるミラー、作成されたコンテナ数、ポートマッピング、ストレージマッピング、ネットワークなどを含むプロファイルを作成します.基本的には、前述したコンテナ情報のセットです.
そのプロファイルはYAML形式で、YAMLはプロファイルを書くための言語で、非常に簡潔です.YAMLの基本ルールは次のとおりです.大文字と小文字が敏感です. は、階層関係をインデントで表す. 入力時にTabキーは使用できません.スペースのみ使用できます. インデントされたスペースの数は重要ではありません.同じレベルの要素が左側に位置合わせされている限りです. #はコメントを表し、この文字から行末まで解析器に無視されます.
YAML詳細ルールは参照できますhttp://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
swarmアプリケーションの基本テンプレートは次のとおりです.
ここでversion:「3」は、バージョンごとに構成ルールが異なり、サービス項目の下にwebとvisualizerの2つ(ここでは名前は任意で、自分が知っている限り)があり、アプリケーションには2つのサービスがあり、各サービスの下に使用されているミラーとポートマッピング、ストレージマッピング、ネットワークなどの情報があることを示します.重点的にdeploy項を見て、replicasは実行容器の実行個数を表して、restart_policyは再起動ポリシーを表し、resourcesの下にはコンテナの実行リソース、limitsは実行制限であり、cpu、メモリなどの制限を含み、cpus値が「0.1」はすべてのcpuの10パーセントを表し、constraints:[node.role==manager]はコンテナがmanagerノードにのみ配置されていることを示します.各サービスの下にあるnetworksは複数ありますが、トップレベルのnetworksに含める必要があります.トップレベルのnetworksには複数のネットワークも含まれます.各ネットワークは何も設定せずに上記のように設定できます.最終的にswarmはappname_を作成します.webnetのネットワークは、ここでwebnetの名前も任意に取ることができ、appnameは作成するサービスの名前で、以下で紹介します.
上記のプロファイルをdocker-compose.ymlファイルに保存し、使用します.
3.2アプリケーションの導入
次のコマンドを実行してアプリケーションを配置します.
appnameはアプリケーションの名前です.これにより、3つのサービスを含むアプリケーションの導入に成功しました.
swarmクラスタの下のipアドレスの上記のポートにアクセスすると、swarmはstackの下のいずれかのcontainerにランダムに転送し、負荷の均衡、災害対応、プライマリ・スペアなどの機能を果たすことができます.
3.3 docker stack共通コマンド
docker stack ls
配置されたすべてのアプリケーションを表示します.アプリケーション名と含まれるサービス数を表示できます.
docker stack deploy
上記の導入アプリケーションです.
docker stack services
アプリケーションのサービス詳細を表示します.
docker stack ps
各コンテナの構成や、どのノードで実行されるかなど、アプリケーションの詳細を表示します.
docker stack rm
アプリケーションを削除します.
四、まとめ
この文書では、docker swarmおよびそのインストール、導入アプリケーション、docker stackに関する操作について簡単に説明します.swarmの機能は非常に強く、基本的に小さなopenstackに等しく、その後も深く勉強し続けることがわかります.
以前docker machineをまとめたとき、dockerに対する理解はまだ深くなく、docker machineとdocker swarmの違いさえ知らなかった.
資料や公式文書を調べた後、今日はほぼ徹底的に分かりました.実はdocker machineはdockerマルチノードの管理ツールにすぎず、他のノードにdockerをインストールしたり、dockerコンテナを実行したりするのに役立ちます.一方、docker swarmはdockerクラスタ管理ツールであり、クラスタ全体が協働して動作し、コンテナの観点からはopenstackのような感じで、クラスタ全体を直接管理することができ、分散の観点からはhadoopに似ているが、もちろん分布式のこの観点から考えるだけだ.
本稿では、docker swarmでのホスト間通信と、最も強力なdocker swarmクラスタ管理機能について簡単に説明します.
一、docker swarmインストール
1.1 docker machine作成ノード
ここでもdocker machineとdocker swarmの違いを体現することができ、簡単に言えばdocker machineはdocker swarmのためにサービスされている.
まずdocker-machineを使用して3つのdockerノードを作成します.
docker-machine create -d generic --generic-ip-address
docker-machineプライマリノードでは、ipが作成するホストのipアドレスであり、nameが作成するホストに名前を変更するhost名である上記の操作を3回実行します.ここでは、swarm-manager、swarm-node 1、swarm-node 2と仮定し、swarm-managerをmanagerノードとして選択することは明らかである(以下詳細に説明する).
1.2 swarmクラスタの作成
docker swarmはmanagerノードとworkerノードに分かれており、managerノードはプライマリノードに相当し、すべてのworkerノードを管理できることは明らかです.
managerノードの作成
上記で作成した3つのdockerノードのうち1つをmanagerノードとして選択し(swarm-managerノードが上記で選択されている)、docker-machineノードで次の操作を行います.
docker-machine ssh swarm-manager "docker swarm init"
上記の操作を実行すると、作成に成功したことを示し、managerノードがサブノードを識別する識別子であるtokenなどの情報を含むworkerノードを作成するコマンドが表示されます.
workerノードの作成
同様にdocker-machineでは、次の操作を行います.
docker-machine ssh swarm-node1 "docker swarm join --token :2377"
docker-machine ssh swarm-node2 "docker swarm join --token :2377"
ここで、上記token、ipはmanagerノードipアドレスであり、これらは成功したmanagerノードが作成された後に与えられる.
すべてのクラスタ内のすべてのノードを表示するには、managerノードで次のコマンドを実行します.
docker node ls
このコマンドは、クラスタ内のすべてのノードをリストし、各ノードの役割を示します.もちろんここではdocker-machineでsshで実行することもできます.以下同じです.
二、docker swarmホスト間通信
swarmのホスト間通信にはoverlayネットワークも必要です(または、他のいくつかのオプションがありますが、まだテストされていません).しかし、前述とは異なり、swarmはconsulサービスを必要とせず、実際にはswarmがconsulの機能を提供し、ホスト間通信の操作を簡素化することに相当する.
managerノードで次のコマンドを実行してoverlayネットワークを作成します.
docker network create -d overlay --attachable my_net
ここでは--attachableパラメータを追加する必要があります.そうしないと、コンテナには使用できません.
プライマリノード上にoverlayネットワークを作成する後、workerノードはconsulの方式を採用するように自動的にネットワークを認識することはできないが、--network
my_net
の方式でコンテナを作成する際にこのネットワークを使用することができ、workerノードが上述のようにコンデンサを実行してこのネットワークを使用した後、docker network lsを使用して、このworkerノードでネットワークを表示できます.これにより、ネットワークを使用するすべてのノードが通信できるようになります.同様にbrctl showコマンドを使用すると、ノードがdocker_を生成していることがわかります.gwbridgeブリッジは、以前の解析と同様にoverlayネットワークの動作原理である対応するvethxxxをマウントしている.
三、docker swarmクラスタ管理——応用を配置する
これはdocker swarmの強みであり、負荷バランス、プライマリ・スペア、災害対応などの機能を直接実現することができます.アプリケーションを自動的に作成し、一連のサービスを含むアプリケーションを適用することができます.各サービスは簡単に言えば、ミラーがいくつかのコンテナを作成し、これらのコンテナが集合して特定の機能を実現し、ユーザーがこれらのコンテナがどのノードで実行されるかを指定する必要がなく、swarmが自動的に割り当てられ、異なるノードでジャンプすることもあります.ワークノードが削除されると、その上で実行されているすべてのコンテナも自動的に他のノードに移行します.
多くのメリットを説明しましたが、サービスを公開する方法について詳しく説明します.
3.1プロファイルの作成
まず、アプリケーションのすべての情報、必要なサービス、各サービスで使用されるミラー、作成されたコンテナ数、ポートマッピング、ストレージマッピング、ネットワークなどを含むプロファイルを作成します.基本的には、前述したコンテナ情報のセットです.
そのプロファイルはYAML形式で、YAMLはプロファイルを書くための言語で、非常に簡潔です.YAMLの基本ルールは次のとおりです.
YAML詳細ルールは参照できますhttp://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
swarmアプリケーションの基本テンプレートは次のとおりです.
version: "3"
services:
web:
# replace username/repo:tag with your name and image details
image: username/repo:tag
deploy:
replicas: 5
restart_policy:
condition: on-failure
resources:
limits:
cpus: "0.1"
memory: 50M
ports:
- "80:80"
networks:
- webnet
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
- webnet
networks:
webnet:
ipam:
config:
- subnet: 172.19.0.0/24
ここでversion:「3」は、バージョンごとに構成ルールが異なり、サービス項目の下にwebとvisualizerの2つ(ここでは名前は任意で、自分が知っている限り)があり、アプリケーションには2つのサービスがあり、各サービスの下に使用されているミラーとポートマッピング、ストレージマッピング、ネットワークなどの情報があることを示します.重点的にdeploy項を見て、replicasは実行容器の実行個数を表して、restart_policyは再起動ポリシーを表し、resourcesの下にはコンテナの実行リソース、limitsは実行制限であり、cpu、メモリなどの制限を含み、cpus値が「0.1」はすべてのcpuの10パーセントを表し、constraints:[node.role==manager]はコンテナがmanagerノードにのみ配置されていることを示します.各サービスの下にあるnetworksは複数ありますが、トップレベルのnetworksに含める必要があります.トップレベルのnetworksには複数のネットワークも含まれます.各ネットワークは何も設定せずに上記のように設定できます.最終的にswarmはappname_を作成します.webnetのネットワークは、ここでwebnetの名前も任意に取ることができ、appnameは作成するサービスの名前で、以下で紹介します.
上記のプロファイルをdocker-compose.ymlファイルに保存し、使用します.
3.2アプリケーションの導入
次のコマンドを実行してアプリケーションを配置します.
docker stack deploy -c docker-compose.yml
appnameはアプリケーションの名前です.これにより、3つのサービスを含むアプリケーションの導入に成功しました.
swarmクラスタの下のipアドレスの上記のポートにアクセスすると、swarmはstackの下のいずれかのcontainerにランダムに転送し、負荷の均衡、災害対応、プライマリ・スペアなどの機能を果たすことができます.
3.3 docker stack共通コマンド
docker stack ls
配置されたすべてのアプリケーションを表示します.アプリケーション名と含まれるサービス数を表示できます.
docker stack deploy
docker stack deploy -c
上記の導入アプリケーションです.
docker stack services
docker stack services
アプリケーションのサービス詳細を表示します.
docker stack ps
docker stack ps
各コンテナの構成や、どのノードで実行されるかなど、アプリケーションの詳細を表示します.
docker stack rm
docker stack rm
アプリケーションを削除します.
四、まとめ
この文書では、docker swarmおよびそのインストール、導入アプリケーション、docker stackに関する操作について簡単に説明します.swarmの機能は非常に強く、基本的に小さなopenstackに等しく、その後も深く勉強し続けることがわかります.