Raft :一致性算法,在保证大多数管理节点存活的情况下,集群才能使用, 所以就要求如果集群的话, manager 节点必须 >=3 台 ,如果是两个台,其中一台宕机,剩余的一台也将不可用,以致整个集群不可用
Manager : 管理节点,用于管理工作节点,为了利用 swarm 模式的容错特性, Docker 建议根据组织的高可用性要求实现 奇数个节点, 当有多个管理器时,可以从管理器节点的故障中恢复而无需停机
- 一个有三台管理器集群最多可以容忍一台管理器的宕机
- 一个有五台管理器集群最多可以同时丢失两个管理器节点宕机
- 一个有N台管理器集群最多可以容忍丢失 (N-1)/2管理器宕机
- Docker 建议一个 swarm 最多使用七个管理器节点
可以在前面章节的基础上,再次创建2台服务器,作为manager,这样就有3台机器作为mananger了,分别为:192.168.31.81,192.168.31.82,192.168.31.83, 在192.168.31.81机器上创建一个集群,命令:
docker swarm init --advertise-addr 192.168.31.81
然后执行命令: docker swarm join-token manager,获取增加manager管理节点的命令,如下:
[root@manager_81 conf.d]# docker swarm join-token manager
To add a manager to this swarm, run the following command:
docker swarm join --token SWMTKN-1-5hts6hqq9ooww75omdfdd2v4tx9vpy20cpjcoc4ieetdys4tc3-8zth4t1az8rbg4yaj1quantoo 192.168.31.81:2377
把上面命令分别在192.168.31.82,192.168.31.83上执行,这样这三台机器就是集群的manager了,其中一台为Leader,可以通过命令docker node ls查看集群状态,然后可以对这几台manager就行操作
当Docker部署规模逐步变大后,可视化监控容器环境的性能和健康状态将会变得越来越重要,Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能,常用工具如下:
- docker UI(local)
- portainer
- daocloud
使用portainer不仅可以管理docker swarm,还可以管理k8s,官网:https://www.portainer.io/
需要在manager节点docker pull portainer/portainer,这里以192.168.31.81这个manager节点为例
[root@manager_81 conf.d]# docker pull portainer/portainer
docker: 'pull portainer/portainer' is not a docker command.
See 'docker --help'
[root@manager_81 conf.d]# docker pull portainer/portainer
docker: 'pull portainer/portainer' is not a docker command.
See 'docker --help'
[root@manager_81 conf.d]#
[root@manager_81 conf.d]#
[root@manager_81 conf.d]# docker pull portainer/portainer
Using default tag: latest
latest: Pulling from portainer/portainer
772227786281: Pull complete
96fd13befc87: Pull complete
0bad1d247b5b: Pull complete
b5d1b01b1d39: Pull complete
Digest: sha256:47b064434edf437badf7337e516e07f64477485c8ecc663ddabbe824b20c672d
Status: Downloaded newer image for portainer/portainer:latest
docker.io/portainer/portainer:latest
[root@manager_81 conf.d]#
[root@manager_81 conf.d]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gowebimg v1.0.1 be3c1ee42ce2 2 days ago 237MB
mycentos v1 4ba38cf3943b 3 days ago 434MB
nginx latest a6bd71f48f68 3 days ago 187MB
mysql latest a3b6608898d6 4 weeks ago 596MB
portainer/portainer latest 5f11582196a4 12 months ago 287MB
[root@manager_81 conf.d]#
portainer其实就是一个web网站,只不过把它制作成为了一个容器而已
docker run -p 9000:9000 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /mydata/portainer/data:/data \
-d portainer/portainer
[root@manager_81 ~]# docker run -p 9000:9000 --name portainer \
> --restart=always \
> -v /var/run/docker.sock:/var/run/docker.sock \
> -v /mydata/portainer/data:/data \
> -d portainer/portainer
be27e0d46d28fff3fc04f5fff3a57381ca5682e05397fcdb21c86237e245f4b7
[root@manager_81 ~]#
[root@manager_81 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
be27e0d46d28 portainer/portainer "/portainer" 30 seconds ago Up 20 seconds 8000/tcp, 9443/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer
访问192.168.31.81:9000
官网地址:https://hub.docker.com/r/6053537/portainer-ce
[root@manager_81 ~]# docker pull 6053537/portainer-ce
Using default tag: latest
latest: Pulling from 6053537/portainer-ce
795a208431d7: Pull complete
...
b8d846b08218: Pull complete
Digest: sha256:059e3de691409f22b1cdcc8ef36e2c12cd45f305652a7a163efe465d10af9473
Status: Downloaded newer image for 6053537/portainer-ce:latest
docker.io/6053537/portainer-ce:latest
[root@manager_81 ~]#
[root@manager_81 ~]#
[root@manager_81 ~]#
[root@manager_81 ~]#
[root@manager_81 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gowebimg v1.0.1 be3c1ee42ce2 2 days ago 237MB
mycentos v1 4ba38cf3943b 3 days ago 434MB
nginx latest a6bd71f48f68 3 days ago 187MB
6053537/portainer-ce latest b9c565f94ccc 4 weeks ago 322MB
mysql latest a3b6608898d6 4 weeks ago 596MB
portainer/portainer latest 5f11582196a4 12 months ago 287MB
[root@manager_81 ~]#
在启动之前,先停止portainer
docker run -p 9000:9000 --name portainer-ce \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /mydata/portainer/data:/data \
-d 6053537/portainer-ce
[root@manager_81 ~]# docker run -p 9000:9000 --name portainer-ce \
> --restart=always \
> -v /var/run/docker.sock:/var/run/docker.sock \
> -v /mydata/portainer/data:/data \
> -d 6053537/portainer-ce
29d46940629a1ef0d385718d1b8ebcacdc39e72e718d84f5fb2c8a091afa35c4
[root@manager_81 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
29d46940629a 6053537/portainer-ce "/portainer" 7 seconds ago Up 3 seconds 8000/tcp, 9443/tcp, 0.0.0.0:9000->9000/tcp, :::9000->9000/tcp portainer-ce
该portainer工具可以帮助我们查看集群信息,容器信息,服务信息,以及一些简单的操作,比较直观, 如果要操作集群的话,还是推荐使用命令行工具
[上一节][Docker]十.Docker Swarm讲解