什么是docker swarm?
Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。用户可以把集群中所有 Docker Engine 整合进一个「虚拟 Engine」的资源池,通过执行命令与单一的主 Swarm 进行沟通,而不必分别和每个 Docker Engine 沟通。在灵活的调度策略下,IT 团队可以更好地管理可用的主机资源,保证应用容器的高效运行。
Swarm的基本架构如下图所示:
Docker Swarm 优点
任何规模都有高性能表现 对于企业级的 Docker Engine 集群和容器调度而言,可拓展性是关键。任何规模的公司——不论是拥有五个还是上千个服务器——都能在其环境下有效使用 Swarm。 经过测试,Swarm 可拓展性的极限是在 1000 个节点上运行 50000 个部署容器,每个容器的启动时间为亚秒级,同时性能无减损。
灵活的容器调度
Swarm 帮助 IT 运维团队在有限条件下将性能表现和资源利用最优化。Swarm 的内置调度器(scheduler)支持多种过滤器,包括:节点标签,亲和性和多种容器部策略如 binpack、spread、random 等等。
服务的持续可用性
Docker Swarm 由 Swarm Manager 提供高可用性,通过创建多个 Swarm master 节点和制定主 master 节点宕机时的备选策略。如果一个 master 节点宕机,那么一个 slave 节点就会被升格为 master 节点,直到原来的 master 节点恢复正常。 此外,如果某个节点无法加入集群,Swarm 会继续尝试加入,并提供错误警报和日志。在节点出错时,Swarm 现在可以尝试把容器重新调度到正常的节点上去。
和 Docker API 及整合支持的兼容性
Swarm 对 Docker API 完全支持,这意味着它能为使用不同 Docker 工具(如 Docker CLI,Compose,Trusted Registry,Hub 和 UCP)的用户提供无缝衔接的使用体验。
Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持
开发的 Compose 文件能(通过 docker-compose up )轻易地部署到测试服务器或 Swarm 集群上。Docker Swarm 还可以从 Docker Trusted Registry 或 Hub 里 pull 并 run 镜像。
一. 实验环境
主机 | IP地址 | 服务 |
---|---|---|
docker01 | 192.168.1.11 | swarm+service+webUI+registry |
docker02 | 192.168.1.13 | docker |
docker03 | 192.168.1.20 | docker |
三台主机都关闭防火墙,禁用selinux,修改主机名,时间同步,并添加域名解析。
docker版本必须是:v1.12版本开始(可使用docker version查看版本)
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.修改主机名(三台都要)
[root@localhost ~]# hostnamectl set-hostname docker01
[root@localhost ~]# su -
4.添加域名解析
[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: