docker swarm集群及其UI部署
一、規劃
①swarm01作為manager節點,swarm02和swarm03作為worker節點。
# cat /etc/hosts 127.0.0.1 localhost 192.168.139.175 swarm01 192.168.139.176 swarm02 192.168.139.177 swarm03
②配置SSH免密登陸
# ssh-keygen -t rsa -P ‘‘ # ssh-copy-id -i .ssh/id_rsa.pub [email protected] # ssh-copy-id -i .ssh/id_rsa.pub [email protected]
二、安裝docker和ansible
①安裝配置ansible
# yum -y install ansible # cat /etc/ansible/hosts | grep -v ^# | grep -v ^$ [node] 192.168.139.176 192.168.139.177
②安裝docker
a.在manager節點安裝docker
# yum install -y yum-utils device-mapper-persistent-data lvm2 # yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # yum list docker-ce --showduplicates | sort -r # yum -y install docker-ce # docker --version Docker version 17.06.0-ce, build 02c1d87 # systemctl start docker # systemctl status docker # systemctl enable docker
b.使用ansible在worker節點安裝docker
# ansible node -m copy -a ‘src=/etc/yum.repos.d/docker-ce.repo dest=/etc/yum.repos.d/‘ # ansible node -m yum -a "state=present name=docker-ce" # ansible node -a ‘docker --version‘ 192.168.139.173 | SUCCESS | rc=0 >> Docker version 17.06.0-ce, build 02c1d87 192.168.139.174 | SUCCESS | rc=0 >> Docker version 17.06.0-ce, build 02c1d87 # ansible node -a ‘systemctl start docker‘ # ansible node -a ‘systemctl status docker‘ # ansible node -a ‘systemctl enable docker‘
三、配置docker swarm集群
①創建docker swarm集群
# docker swarm init --listen-addr 0.0.0.0 Swarm initialized: current node (a1tno675d14sm6bqlc512vf10) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3sp9uxzokgr252u1jauoowv74930s7f8f5tsmm5mlk5oim359e-dk52k5uul50w49gbq4j1y7zzb 192.168.139.175:2377 To add a manager to this swarm, run ‘docker swarm join-token manager‘ and follow the instructions.
②查看節點
# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS a1tno675d14sm6bqlc512vf10 * swarm01 Ready Active Leader
③查看加入集群manager管理節點的命令
# docker swarm join-token manager To add a manager to this swarm, run the following command: docker swarm join --token SWMTKN-1-3sp9uxzokgr252u1jauoowv74930s7f8f5tsmm5mlk5oim359e-7tdlpdnkyfl1bnq34ftik9wxw 192.168.139.175:2377
④查看加入集群worker節點的命令
# docker swarm join-token worker To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-3sp9uxzokgr252u1jauoowv74930s7f8f5tsmm5mlk5oim359e-dk52k5uul50w49gbq4j1y7zzb 192.168.139.175:2377
⑤將前面規劃的兩個worker節點加入集群
# docker swarm join --token SWMTKN-1-3sp9uxzokgr252u1jauoowv74930s7f8f5tsmm5mlk5oim359e-dk52k5uul50w49gbq4j1y7zzb 192.168.139.175:2377 This node joined a swarm as a worker.
⑥查看worker節點是否已加入集群
# docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS 7zkbqgrjlsn8c09l3fagtfwre swarm02 Ready Active a1tno675d14sm6bqlc512vf10 * swarm01 Ready Active Leader apy9zys2ch4dlwbmgdqwc0pn3 swarm03 Ready Active
⑦查看docker swarm的管理網絡
# docker network ls NETWORK ID NAME DRIVER SCOPE 05efca714d2f bridge bridge local c9cd9c37edd7 docker_gwbridge bridge local 10ac9e48d81b host host local n60tdenc5jy7 ingress overlay swarm a9284277dc18 none null local
這裏,一個docker swarm集群就搭建好了
四、搭建docker swarm的UI---Portainer
Portainer地址:https://portainer.io/。
①使用該命令部署Portainer
# docker service create --name portainer --publish 9000:9000 --constraint ‘node.role == manager‘ --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock portainer/portainer -H unix:///var/run/docker.sock # docker images |grep portainer portainer/portainer latest 07cde96d4789 2 weeks ago 10.4MB # docker service ls ###查看集群列表 ID NAME MODE REPLICAS IMAGE PORTS p5bo3n0fmqgz portainer replicated 1/1 portainer/portainer:latest *:9000->9000/tcp
這就部署好了
②瀏覽器輸入http://localhost:9000進入該UI界面,如下所示,第一次進入Portainer,配置8位數的admin密碼
密碼修改完成後點擊“validate”驗證
如下圖所示,輸入admin用戶名和密碼進入Portainer
首頁如下
查看swarm節點模塊
這裏可以在images模塊pull鏡像,在這裏我pull了nginx
在Services模塊下創建nginx服務,Services > Add service,這裏創建三個副本,並將80端口映射出去,最後點擊“Create Service”創建服務
刷新服務列表,查看是否創建成功
③使用命令進行確認
# docker images | grep nginx nginx latest b8efb18f159b 7 days ago 107MB # ansible node -m shell -a ‘docker images|grep nginx‘ 192.168.139.177 | SUCCESS | rc=0 >> nginx latest b8efb18f159b 8 days ago 107MB 192.168.139.176 | SUCCESS | rc=0 >> nginx latest b8efb18f159b 8 days ago 107MB # docker service ls ###查看服務的任務列表 ID NAME MODE REPLICAS IMAGE PORTS emrs3rj73bwh Nginx replicated 3/3 nginx:latest *:80->80/tcp p5bo3n0fmqgz portainer replicated 1/1 portainer/portainer:latest *:9000->9000/tcp # docker service ps Nginx ID NAME IMAGE NODE 0smpndfx0bwc Nginx.1 nginx:latest swarm03 werrrzlyfbf1 Nginx.2 nginx:latest swarm01 l7puro0787cj Nginx.3 nginx:latest swarm02 DESIRED STATE CURRENT STATE ERROR PORTS Running Running 15 minutes ago Running Running 15 minutes ago Running Running 15 minutes ago
五、搭建docker swarm的UI---Shipyard
Shipyard的UI也是比較簡單的,但是比較反復,它需要在每個節點都pull相應鏡像才能加入Shipyard的UI。
①先pull相應鏡像到本地,這裏我使用的是網易蜂巢的鏡像,很快而且鏡像也是比較新的
# docker pull hub.c.163.com/library/alpine:latest # docker pull hub.c.163.com/library/rethinkdb:latest # docker pull hub.c.163.com/longjuxu/microbox/etcd:latest # docker pull hub.c.163.com/wangjiaen/shipyard/docker.io/shipyard/docker-proxy:latest # docker pull hub.c.163.com/library/swarm:latest # docker pull hub.c.163.com/wangjiaen/shipyard/docker.io/shipyard/shipyard:latest
②給這些鏡像新建一個tag標簽
# docker tag 7328f6f8b418 alpine # docker tag 4a511141860c rethinkdb # docker tag 6aef84b9ec5a microbox/etcd # docker tag cfee14e5d6f2 shipyard/docker-proxy # docker tag 0198d9ac25d1 swarm # docker tag 36fb3dc0907d shipyard/shipyard
③使用如下命令搭建Shipyard的UI
# curl -sSL https://shipyard-project.com/deploy | bash -s Deploying Shipyard -> Starting Database -> Starting Discovery -> Starting Cert Volume -> Starting Proxy -> Starting Swarm Manager -> Starting Swarm Agent -> Starting Controller Waiting for Shipyard on 192.168.139.175:8080 .. Shipyard available at http://192.168.139.175:8080 Username: admin Password: shipyard
④根據提示輸入http://localhost:8080,輸入用戶名admin,密碼shipyard進入shipyard
⑤進入shipyard首頁容器界面
⑥進入nodes模塊查看,這裏現在只有manager節點
⑦在worker節點上pull並tag鏡像,即是重復如上的第①和第②步,之後,在該worker節點上輸入如下命令將其加入shipyard
# curl -sSL https://shipyard-project.com/deploy | ACTION=node DISCOVERY=etcd://192.168.139.175:4001 bash -s Adding Node -> Starting Cert Volume -> Starting Proxy -> Starting Swarm Manager -> Starting Swarm Agent Node added to Swarm: 192.168.139.176
其他節點同理。
對比兩種UI,其實都是比較簡單的,個人認為Portainer較好,在manager節點pull一個鏡像即可搭建UI。
問題:
manager:
# docker swarm init --advertise-addr 192.168.139.175
worker:
# docker swarm join --token SWMTKN-1-4dwtfbdvjmuf3limglbpy66k85ply2cn66hd0ugsaxfed5fj1d-3rp33pedt9k7ewpfizbzc9bvi 192.168.139.175:2377 Error response from daemon: Timeout was reached before node was joined. The attempt to join the swarm will continue in the background. Use the "docker info" command to see the current swarm status of your node.
出現worker節點無法加入集群的問題,這裏需要設置監聽地址全零。
本文出自 “記事本” 博客,請務必保留此出處http://wangzhijian.blog.51cto.com/6427016/1953677
docker swarm集群及其UI部署