ドッキングウィンドウの群れとは何ですか?
ドッカー1.12バージョンの前に別のプロジェクトに属し群れは、ドッカー1.12リリース後、プロジェクトはドッカーに組み込まれ、ドッカーのサブコマンドになります。現在、スウォームは、コミュニティが提供する唯一のネイティブサポートドッカードッカークラスタ管理ツールです。容器は、クロスサブネットネットワークホストを形成することができるように、それは、ドッカーは、単一の仮想ホストドッカーに変換し、複数のホストから成るシステムを置くことができます。
ドッカースウォームは、ツールをスケジュールするIT運用チームのためのクラスタリングとスケジューリング機能を提供しています。ユーザは、すべてのドッカーエンジンではなく別々に比べて、単一のマスター群発と通信するためのコマンドを実行することにより、「仮想エンジン」リソースプールに統合クラスタ及び各ドッカーエンジン通信することができます。柔軟なスケジューリング戦略では、ITチームは、より良いアプリケーションコンテナの効率的な運用を確保するために使用可能なホストのリソースを管理することができます。
下に示すように、基本的なアーキテクチャを群れ:
ドッカースウォームの利点
任意のサイズの、ドッカーEngineクラスタおよびエンタープライズクラスの船舶スケジューリングのための高い性能を有し、スケーラビリティが鍵となります。あらゆる規模の企業 - 効果的にその環境にスウォームを使用することができます - 両方のサーバの5千を持っています。テストした後、群発制限スケーラビリティは、各容器の開始時刻1000ノード上に展開50,000血管を実行することで性能が衰えていないが、サブ秒です。
柔軟なスケジューリングコンテナ
群れは、最適化のパフォーマンスとリソース使用率に限られた条件の下でIT運用チームを支援します。ノードラベル、親和性、及びそのような容器部binpack、スプレッド、ランダムなど様々な戦略を:群れ内蔵スケジューラ(スケジューラ)を含む、複数のフィルタをサポートします。
サービスの継続的な可用性
複数のスウォームマスターノードとプライマリマスターノードの開発を作成することによって、代替戦略がダウンしたときにドッカー群れは、スウォームManagerによって、高い可用性を提供します。マスターノードがダウンした場合、スレーブノードは、正常に元のマスターノードバックまで、マスターノードにアップグレードされます。ノードがクラスタに参加できない場合はまた、スウォームは参加しようと、警告やエラーログを提供していきます。ノードを失敗したときは、スウォームは現在、通常のノードにコンテナを再スケジュールを試みることができます。
そして、ドッカーAPIの互換性と統合サポート
ドッカーAPIの群れフルサポート、(例えばドッカーCLI、作曲、信頼できるレジストリ、ハブやUCPなど)それはドッカーが異なるツールを使用することができることを意味し、シームレスなユーザーエクスペリエンスを提供します。
ドッカー群発は、アプリケーション(例えばマルチホストネットワーキング及びストレージボリューム管理など)ドッカーのコア機能のネイティブサポートを提供します
開発作曲ファイルを簡単にテストサーバーまたはクラスタスウォーム(ドッカ・コンアップによって)に展開することができます。また、ドッカーからドッカースウォームは、レジストリのハブやミラーでプルと実行を信頼しました。
A.実験環境
ホストコンピューター | IPアドレス | サービス |
---|---|---|
docker01 | 192.168.1.11 | 群れ+サービス+ WebUIの+レジストリ |
docker02 | 192.168.1.13 | ドッキングウィンドウ |
docker03 | 192.168.1.20 | ドッキングウィンドウ |
3つのホストは、ホスト名を変更し、時刻同期、およびDNSを追加し、ファイアウォールを無効にSELinuxを閉じています。
ドッキングウィンドウのバージョンでなければなりません:V1.12バージョン開始(ドッキングウィンドウのバージョンがビューバージョンに使用することができます)
ファイアウォールをオフ1.電源を入れ、無効にSELinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# hostnamectl set-hostname docker03
[root@localhost ~]# su -
2.時刻同期
mv /etc/localtime /etc/localtime.bk
cp /usr/share/zoneinfo/Asia/Shanghai/etc/localtime
ホスト名を変更します。3.(3つがあることを)
[root@localhost ~]# hostnamectl set-hostname docker01
[root@localhost ~]# su -
4. [追加のDNS
[root@docker01 ~]# echo 192.168.1.11 docker01 >> /etc/hosts
[root@docker01 ~]# echo 192.168.1.13 docker02 >> /etc/hosts
[root@docker01 ~]# echo 192.168.1.20 docker03 >> /etc/hosts
二つ。Docker01クラスタの初期化
[root@docker01 ~]# docker swarm init --advertise-addr 192.168.1.11
--advertise-ADDR:他の特定ドッカーと通信するためのアドレス。
トップの結果は、私たちに伝えるために戻っ:正常に初期化され、そしてあなたは、ノードの作業を追加したい場合は、次のコマンドを実行します。
注:トークントークンは24時間のみ有効です
次のコマンドを実行します。あなたはノードマネージャを追加したい場合
三、クラスタに参加するdocker02とdocker03ワーカー
[root@docker03 ~]# docker swarm join --token SWMTKN-1-5kxn9wloh7npnytklwbfciesr9di7uvu521gwnqm9h1n0pbokj-1e60wt0yr5583e4mzwbxnn3a8 192.168.1.11:2377
ビュークラスタdocker01
[root@docker01 ~]# docker node ls
*注:「**** 」ノードが現在属し表し
IV。管理ノード(docker01)を設定すると、作業に参加していません
[root@docker01 ~]# docker node update docker01 --availability drain
ホストを設定した後、コンテナdocker01を実行していないが、コンテナを実行されていないの停止
バック「--availability」のオプション設定可能な3つのオプションは次の通りあります:
「アクティブ」:仕事は、「一時停止」:一時的に動作していない。「ドレイン」 :永久的な仕事ありません
[root@docker01 ~]# docker node ls
ファイブ。Docker01配備Aのグラフィカル・インターフェースのWebUI
インポートミラー1.docker01
[root@docker01~]# docker pull dockersamples/visualizer
2. [スタート]コンテナベースのミラーリング
[root@docker01 ~]# docker run -d -p 8080:8080 -e HOST=192.168.1.100 -e PORT=8080 -v /var/run/docker.sock:/var/run/docker.sock --name visualiaer dockersamples/visualizer
ブラウザhttp://192.168.1.11:8080/経由のアクセスを確認します。3.
ページにアクセスすることができない場合は、ルーティングおよび転送有効にする必要があります
[root@docker01 ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
[root@docker01 ~]# sysctl -p
六。Docker01は民間倉庫を展開します
Docker01展開
72 docker pull registry
//下载registry镜像
73 docker run -itd --name registry -p 5000:5000 --restart=always registry:latest
//基于registry镜像,启动一台容器
78 vim /usr/lib/systemd/system/docker.service #13行修改
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.11:5000
80 systemctl daemon-reload
81 systemctl restart docker.service
//重启docker
76 docker tag busybox:latest 192.168.1.11:5000/busybox:v1
//把容器重命名一个标签
77 docker ps
78 vim /usr/lib/systemd/system/docker.service #13行修改
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.11:5000
80 systemctl daemon-reload
81 systemctl restart docker.service
//重启docker
100 docker push 192.168.1.11:5000/busybox:v1
//上传容器到私有仓库
Docker02とdocker03は、民間の倉庫に参加します
78 vim /usr/lib/systemd/system/docker.service #13行修改
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.11:5000
80 systemctl daemon-reload
81 systemctl restart docker.service
//重启docker
99 docker pull 192.168.1.11/busybox:v1
//测试下载
VII。カスタムミラー
要件:HTTPDベースのミラーリングは、アクセスインタフェースコンテンツを変更します。ミラータグバージョンV1、V2、V3、ホスト側V1に対応するコンテンツ、xgp666、V2、xgp666、V2、xgp666
[root@docker01 ~]# docker pull httpd
//下载httpd镜像
3つのテストのディレクトリを作成します。
[root@docker01 ~]# mkdir {v1,v2,v3}
//创建测试目录
docker01、V1ディレクトリの操作
[root@docker01 ~]# cd v1
[root@docker01 v1]# echo v1,xgp666 > index.html
//创建测试网页
[root@docker01 v1]# vim Dockerfile
//编写Dockerfile
FROM httpd
ADD index.html /usr/local/apache2/htdocs/index.html
[root@docker01 v1]# docker build -t 192.168.1.11:5000/httpd:v1 .
//基于dockerfile创建镜像
[root@docker01 v1]# docker push 192.168.1.11:5000/httpd:v1
//上传刚刚创建镜像到私有仓库
docker01、v2のディレクトリ操作
[root@docker01 v1]# cd ../v2
[root@docker01 v2]# echo v2,xgp666 > index.html
[root@docker01 v2]# vim Dockerfile
//编写Dockerfile
FROM httpd
ADD index.html /usr/local/apache2/htdocs/index.html
[root@docker01 v2]# docker build -t 192.168.1.11:5000/httpd:v2 .
//基于dockerfile创建镜像
[root@docker01 v2]# docker push 192.168.1.11:5000/httpd:v2
//上传刚刚创建镜像到私有仓库
docker01、v3のディレクトリ操作
[root@docker01 v1]# cd ../v3
[root@docker01 v2]# echo v3,xgp666 > index.html
[root@docker01 v2]# vim Dockerfile
//编写Dockerfile
FROM httpd
ADD index.html /usr/local/apache2/htdocs/index.html
[root@docker01 v2]# docker build -t 192.168.1.11:5000/httpd:v3 .
//基于dockerfile创建镜像
[root@docker01 v2]# docker push 192.168.1.11:5000/httpd:v3
//上传刚刚创建镜像到私有仓库
VIII。上の画像に基づいてサービスを、公開
要件:コピーの数が3です。サービスの名前は次のとおりです。bdqn
[root@docker01 v3]# docker service create --replicas 3 --name bdqn -p 80:80 192.168.1.11:5000/httpd:v1
ネットワークを見て
[root@docker03 ~]# docker network ls
統一された入り口を提供し、実際のコンテナバックエンドサービスをユーザーに提供するために、カスタムオーバーレイネットワークを作成するなど、イングレスネットワークをデフォルト。
service 通过 ingress load balancing 来发布服务,且 swarm 集群中所有 node 都参与到 ingress 路由网格(ingress routing mesh) 中,访问任意一个 node+PublishedPort 即可访问到服务。
当访问任何节点上的端口80时,Docker将您的请求路由到活动容器。在群节点本身,端口80可能并不实际绑定,但路由网格知道如何路由流量,并防止任何端口冲突的发生。
路由网格在发布的端口上监听分配给节点的任何IP地址。对于外部可路由的IP地址,该端口可从主机外部获得。对于所有其他IP地址,只能从主机内部访问。
查看一下创建的副本
[root@docker01 v3]# docker service ps bdqn
浏览器测试访问http://192.168.1.11:80,http://192.168.1.13:80,http://192.168.1.20:80
修改docker02和docker03测试网页内容
docker02
[root@docker02 ~]# docker exec -it 388f3bd9dd33 /bin/bash
root@388f3bd9dd33:/usr/local/apache2# cd htdocs/
root@388f3bd9dd33:/usr/local/apache2/htdocs# echo 123 > index.html
docker03
[root@docker03 ~]# docker exec -it 281454867fac /bin/bash
root@281454867fac:/usr/local/apache2# echo 321 > htdocs/index.html
测试访问(每一台都会显示,会负载均衡)
要求:副本数量为3个。服务的名称为:test
[root@docker01 v3]# docker service create --replicas 3 --name test -p 80 192.168.1.11:5000/httpd:v1
查看创建的服务映射端口
[root@docker01 v3]# docker service ls
默认映射端口30000-32767
九. 服务的扩容与缩容
扩容
[root@docker01 v3]# docker service scale bdqn=6
缩容
[root@docker01 v3]# docker service scale bdqn=4
扩容与缩容直接直接通过scale进行设置副本数量。
十.服务的升级与回滚
(1)升级
docker service upadte 命令参数详解
--force 强制更新重启服务,无论是否配置或镜像改变都更新
--image <image:tag> 制定更新的镜像
--with-registry-auth 向 Swarm 代理发送 Registry 认证详细信息,私有仓库需要携带该参数
[root@docker01 ~]# docker service update --image 192.168.1.11:5000/httpd:v2 bdqn
//把bdqn服务升级成v2的版本
测试访问一下
(2)平滑的更新
[root@docker01 ~]# docker service update --image 192.168.1.11:5000/httpd:v3 --update-parallelism 2 --update-delay 1m bdqn
//两个服务一起更新,然后,隔一分钟,继续更新
デフォルトでは、一度だけ更新swarm- -コピーをし、2つのコピーの間には待機時間がありません、我々はできる
--update-並列処理を、コピーの数は、パラレル更新を設定します。
--update-遅延:指定ローリング更新間隔。
テストアクセスを
(3)ロールバック
[root@docker01 ~]# docker service rollback bdqn
状態の動作を、指定された連続運転にないロールバックすることができます - 注意、ロールバックのドッキングウィンドウの群れは、デフォルトのみにロールバックすることができます。
テストアクセスを
XI、ノート:
それが起動コンパイル時にメモリにTomcat食べるようになるので、マシンは、CPUとメモリリソースの複数のサービス使用上の注意合理的な配分を可能にする場合は、マルチスレッドとドッキングウィンドウが開始され、すべてが何人も最高(セットresources.limits)ではないものを定義します同時に光でメモリが発生し、一部のサービスが開始に失敗し、もちろん、だけでなく、エラーの再起動(restart_policy.condition:オン失敗)を設定し、別のセットresources.reservationsは人が原因かどうか、総メモリやCPUの割合を超えないように注意してください(「[XXXX]ドッキングウィンドウスタックPS」を使用して、このエラーは、非常に奇妙であるサービスが起動しない、また出力ログエラー「insufficien(もし適切なノードを」サービスバックのCPUやメモリリソースを取得しないことができないがステータス表示このエラー)を表示するように見えます起動できません