本文档针对docker swarm操作。 针对的系统是以一个本地的测试系统为例。其中机器信息如下,172.16.1.13作为docker swarm的管理机。
根据规划在172.16.1.13这台机器上操作:
[root@mini03 ~]# docker swarm init # 针对机器只有一个IP的情况 Error response from daemon: could not choose an IP address to advertise since this system has multiple addresses on different interfaces (172.16.1.13 on eth0 and 10.0.0.13 on eth1) - specify one with --advertise-addr [root@mini03 ~]# docker swarm init --advertise-addr 172.16.1.13 # 针对机器有多个IP的情况,需要指定一个IP,一般都是指定内网IP Swarm initialized: current node (yo5f7qb28gf6g38ve4xhcis17) is now a manager. To add a worker to this swarm, run the following command: # 在其他机器上执行,这样可以加入该swarm管理 docker swarm join --token SWMTKN-1-4929ovxh6agko49u0yokrzustjf6yzt30iv1zvwqn8d3pndm92-0kuha3sa80u2u27yca6kzdbnb 172.16.1.13:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.初始化一个swarm网络,让系统组件使用这个指定的网络。
[root@mini03 ~]# docker network create -d overlay --attachable zhang vu07em5fvpuojih6wgckdkdzj [root@mini03 docker-swarm]# docker network ls # 查看网络 NETWORK ID NAME DRIVER SCOPE fa8a244c6bd5 bridge bridge local 51c95dea1e5c docker_gwbridge bridge local 7a7e31f4bce8 host host local 5hgg372xwxbl ingress overlay swarm lmt3pjswf7l0 zhang overlay swarm 5ea08e9a282f none null local [root@mini03 ~]# docker network inspect zhang # 查看网络信息 [ { "Name": "zhang", "Id": "xiykborz8hn2td40ykhi20dck", "Created": "0001-01-01T00:00:00Z", "Scope": "swarm", "Driver": "overlay", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": null, "Config": [] }, "Internal": false, "Attachable": true, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": null, "Options": { "com.docker.network.driver.overlay.vxlanid_list": "4097" }, "Labels": null } ]删除docker中的zhang网络
[root@mini03 docker-swarm]# docker network rm zhang zhang [root@mini03 docker-swarm]# docker network ls NETWORK ID NAME DRIVER SCOPE fa8a244c6bd5 bridge bridge local 51c95dea1e5c docker_gwbridge bridge local 7a7e31f4bce8 host host local 5hgg372xwxbl ingress overlay swarm 5ea08e9a282f none null local在mini01、mini02上执行如下命令:
docker swarm join --token SWMTKN-1-4929ovxh6agko49u0yokrzustjf6yzt30iv1zvwqn8d3pndm92-0kuha3sa80u2u27yca6kzdbnb 172.16.1.13:2377首先需要删除所有节点,然后强制退出swarm即可
[root@mini03 ~]# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION yo5f7qb28gf6g38ve4xhcis17 * mini03 Ready Active Leader 17.09.0-ce [root@mini03 ~]# docker swarm leave --force # swarm管理机退出swarm,需要 --force 参数 Node left the swarm. [root@mini03 ~]# docker node ls Error response from daemon: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again.根据最开始的主机和组件部署规划,标签规划如下:在swarm管理机mini03上执行。
# 给mini01机器的标签 docker node update --label-add tomcat=true mini01 docker node update --label-add datanode=true mini01 docker node update --label-add hbase-regionserver-1=true mini01 # 给mini02机器的标签 docker node update --label-add tomcat=true mini02 docker node update --label-add datanode=true mini02 docker node update --label-add hbase-regionserver-2=true mini02 # 给mini03机器的标签 docker node update --label-add spark=true mini03 docker node update --label-add zookeeper=true mini03 docker node update --label-add namenode=true mini03 docker node update --label-add hbase-master=true mini03在swarm管理机mini03上执行,示例如下:
docker node update --label-rm zookeeper mini03在swarm管理机mini03上执行:
[root@mini03 ~]# docker node ls -q | xargs docker node inspect -f '{{.ID}}[{{.Description.Hostname}}]:{{.Spec.Labels}}' 6f7dwt47y6qvgs3yc6l00nmjd[mini01]:map[tomcat:true datanode:true hbase-regionserver-1:true] 5q2nmm2xaexhkn20z8f8ezglr[mini02]:map[tomcat:true datanode:true hbase-regionserver-2:true] ncppwjknhcwbegmliafut0718[mini03]:map[hbase-master:true namenode:true spark:true zookeeper:true]启动容器时,查看相关日志,例如如下:
docker stack ps hadoop docker stack ps hadoop --format "{{.Name}}: {{.Error}}" docker stack ps hadoop --format "{{.Name}}: {{.Error}}" --no-trunc docker stack ps hadoop --no-trunc