docker swarm集群及其UI部署

简介:

一、规划

①swarm01作为manager节点,swarm02和swarm03作为worker节点。

1
2
3
4
5
# cat /etc/hosts
127.0.0.1   localhost
192.168.139.175  swarm01 
192.168.139.176  swarm02 
192.168.139.177  swarm03


②配置SSH免密登陆

1
2
3
# ssh-keygen -t rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.139.176
# ssh-copy-id -i .ssh/id_rsa.pub root@192.168.139.177


二、安装docker和ansible

①安装配置ansible

1
2
3
4
5
6
7
8
9
10
11
# yum -y install ansible
# cat /etc/ansible/hosts | grep -v ^# | grep -v ^$
[node]
192.168.139.176
192.168.139.177
# sed -i "s/SELINUX=enforcing/SELINUX=disabled" /etc/selinux/config
# ansible node -m copy -a 'src=/etc/selinux/config dest=/etc/selinux/'
# systemctl stop firewalld
# systemctl disable firewalld
# ansible node -a 'systemctl stop firewalld'
# ansible node -a 'systemctl disable firewalld'

注:这里选择关闭防火墙,实际环境中可自行开放端口。


②安装docker

a.在manager节点安装docker

1
2
3
4
5
6
7
8
9
# 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

1
2
3
4
5
6
7
8
9
10
# 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集群

1
2
3
4
5
# 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.


②查看节点

1
2
3
# docker node ls
ID                           HOSTNAME      STATUS      AVAILABILITY   MANAGER STATUS
a1tno675d14sm6bqlc512vf10 *  swarm01        Ready         Active           Leader


③查看加入集群manager管理节点的命令

1
2
3
# 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节点的命令

1
2
3
# 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节点加入集群

1
2
# docker swarm join --token SWMTKN-1-3sp9uxzokgr252u1jauoowv74930s7f8f5tsmm5mlk5oim359e-dk52k5uul50w49gbq4j1y7zzb 192.168.139.175:2377
This node joined a swarm as a worker.


⑥查看worker节点是否已加入集群

1
2
3
4
5
# docker node ls
ID                        HOSTNAME    STATUS  AVAILABILITY  MANAGER STATUS
7zkbqgrjlsn8c09l3fagtfwre     swarm02  Ready      Active              
a1tno675d14sm6bqlc512vf10 *   swarm01  Ready      Active         Leader
apy9zys2ch4dlwbmgdqwc0pn3     swarm03  Ready      Active


⑦查看docker swarm的管理网络

1
2
3
4
5
6
7
# 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

1
2
3
4
5
6
7
8
9
10
11
12
# 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密码

wKioL1mEM6Cxc0aPAAAwIzfGw_M202.png


密码修改完成后点击“validate”验证

wKioL1mENCvAKI-BAAAxitxXbLw304.png


如下图所示,输入admin用户名和密码进入Portainer

wKioL1mENUPQiWZFAAAi6DgCxBc318.png


首页如下

wKiom1mENiGQR3wTAABYpkVe-dU381.png


查看swarm节点模块

wKioL1mEN8bCiUCMAABVv3Ya1jY924.png


这里可以在images模块pull镜像,在这里我pull了nginxwKioL1mEOKSTd4FDAABNC3m1Qt4756.png


在Services模块下创建nginx服务,Services > Add service,这里创建三个副本,并将80端口映射出去,最后点击“Create Service”创建服务

wKioL1mEOZbhMNmhAABqnRU0yHI223.png


刷新服务列表,查看是否创建成功

wKioL1mEOwiSu_csAAA6-W7QVSQ884.png

③使用命令进行确认

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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


wKioL1mEQ92CLwgaAAAZoiKr_Ns993.png



五、搭建docker swarm的UI---Shipyard

Shipyard的UI也是比较简单的,但是比较反复,它需要在每个节点都pull相应镜像才能加入Shipyard的UI。


①先pull相应镜像到本地,这里我使用的是网易蜂巢的镜像,很快而且镜像也是比较新的

1
2
3
4
5
6
# 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标签

1
2
3
4
5
6
# 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

1
2
3
4
5
6
7
8
9
10
11
12
13
# 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

wKioL1mERqPAOVcmAAAvlJtRgYM012.png


⑤进入shipyard首页容器界面

wKioL1mER7nC5aYSAACgkKkUKjo303.png


⑥进入nodes模块查看,这里现在只有manager节点

wKiom1mESAexeohTAAA04Jty5cU301.png

⑦在worker节点上pull并tag镜像,即是重复如上的第①和第②步,之后,在该worker节点上输入如下命令将其加入shipyard

1
2
3
4
5
6
7
# 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

wKiom1mESRHR_kmQAABMAOizegk002.png

其他节点同理。


对比两种UI,其实都是比较简单的,个人认为Portainer较好,在manager节点pull一个镜像即可搭建UI。


问题:

manager:

1
# docker swarm init --advertise-addr 192.168.139.175

worker:

1
2
# 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节点无法加入集群的问题,这里需要设置监听地址全零。


本文转自  结束的伤感  51CTO博客,原文链接:
http://blog.51cto.com/wangzhijian/1953677

相关文章
|
2月前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
370 91
|
20天前
|
Ubuntu 安全 Docker
Ubuntu下部署及操作Docker技巧
以上就是在Ubuntu下部署及操作Docker的具体步骤。但这只是冰山一角,Docker的魅力远不仅如此。你可以将其视为存放各种工具的小箱子,随时随地取用,极大地提升工作效率。你也可以私人订制,适应不同的开发环境,就像一个拥有各种口味冰淇淋的冰箱,满足各种各样的需求。好了,现在你已经掌握了基本的Docker运用技巧,快去尝试使用吧!记住,沉浸在探索中,你会找到无尽的乐趣和满满的收获。
84 23
|
2月前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
29天前
|
安全 API 算法框架/工具
大模型文件Docker镜像化部署技术详解
大模型文件Docker镜像化部署技术详解
202 2
|
3月前
|
存储 关系型数据库 MySQL
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
|
1月前
|
JSON 运维 Ubuntu
在Docker上部署Ollama+AnythingLLM完成本地LLM Agent部署
通过以上步骤,您可以成功在Docker上部署Ollama和AnythingLLM,实现本地LLM Agent的功能。在部署过程中,确保环境和配置正确,以避免不必要的问题。希望本文能够帮助您顺利完成部署,并在本地环境中高效地使用LLM模型。
672 8
|
2月前
|
人工智能 文字识别 安全
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
Stirling-PDF 是一款基于 Docker 的本地化 PDF 编辑工具,支持 50 多种 PDF 操作,包括合并、拆分、转换、压缩等,同时提供多语言支持和企业级功能,满足个人和企业用户的多样化需求。
158 6
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
|
2月前
|
JavaScript 前端开发 Docker
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
289 44
|
2月前
|
中间件 关系型数据库 数据库
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
84 19
|
1月前
|
Docker Python 容器
Docker——阿里云服务器使用Docker部署python项目全程小记
本文记录了我在阿里云服务器上使用Docker部署python项目(flask为例)的全过程,在这里记录和分享一下,希望可以给大家提供一些参考。
182 2
下一篇
oss创建bucket