Linux企业运维##Docker(八)三剑客之Docker Swarm

目录

一、Docker Swarm简介

二、Docker Swarm部署实践 

三、监控Swarm集群 

四、使用脚本创建集群


一、Docker Swarm简介

  • Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令。
  • Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具。
  • Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络。
  • Docker Swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。

Docker三剑客Docker machine、Docker compose、Docker Swarm中,只有Docker Swarm不需要额外安装,它是Docker中一个内嵌的子命令模块,相较于k8s更加轻量级,但应用于生产环境还存在一些问题。

在这里插入图片描述

Docker Swarm 优点: 

  • 任何规模都有高性能表现
  • 灵活的容器调度
  • 服务的持续可用性
  • 和 Docker API 及整合支持的兼容性
  • Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。

Docker Swarm 相关概念:

  • 节点分为管理 (manager) 节点和工作 (worker) 节点
  • 任务 (Task)是 Swarm 中的最小的调度单位,目前来说就是一个单一的容器。
  • 服务 (Services) 是指一组任务的集合,服务定义了任务的属性。
    在这里插入图片描述

二、Docker Swarm部署实践 

实验环境:四台虚拟机,test1中部署了Habbor仓库,test2初始化一个swarm集群部署swarm管理节点,在test3、4部署swarm工作节点 

准备工作:(开启harbor仓库,安装docker-ce,拉取myapp镜像,配置镜像源为harbor仓库)

(1)由于test4是新创建的虚拟机,我们要将其部署为swarm集群中的一个节点,所以需要将test3上的docker源指向文件复制给test4,为test4配置docker源,安装docker-ce

(2)test1中部署了Habbor仓库,test2、3、4在做swarm集群部署时,从test1中拉取镜像,为了后续配置,这里为test1和test4做免密传输(test2、3之前做过)

(3)打开test3,4的地址转发

在test3,4上刷新内核文件,读取添加的文件

 (4)由于habbor仓库做了认证,所以我们需要把test1中的认证证书复制给test2、3、4,test2、3、4才能从仓库中拉取镜像(test2在之前的实验中已经复制了证书,故此处我直接从test2复制给test3,4)

将test2之前部署过的docker镜像仓库指向文件也复制给test3、4

重载test3、4的docker服务 

(5)为test3、4配置test1中habbor仓库的域名地址解析 (test2已做过解析)(6)在habbor目录下开启docker-compose服务并打入后台运行

(7)在harbor仓库中关闭内容信任功能

(8)在test1中拉取myapp:v1和myapp:v2并上传到harbor仓库中

 

集群部署:test2初始化一个swarm集群部署swarm管理节点,在test3、4部署swarm工作节点

(1)在test2初始化一个swarm集群,部署swarm管理节点(2)在test3、4部署swarm工作节点

此时在test2可以看到swarm集群的所有节点,test2为leader

(3)在test2管理节点可以创建服务,使用–replicas指定创建三个副本(注意:一定要做端口映射,否则外网无法访问容器),此时查看服务可以看到三个swarm节点上各有一个副本服务(在生产环境中master尽量不要参与到负载均衡中,只负责调度)

docker service create --name webcluster -p 80:80 --replicas 3 myapp:v1

(4)此时在test1上连续访问terst2、3、4中的任一swarm节点,都可以看到三个副本容器自动进行了负载均衡

(5)这里还可以对服务副本数量进行扩充(规定扩至多少个)

docker service scale webcluster=6

 

测试访问,可以看到6个副本容器自动进行了负载均衡

 

三、监控Swarm集群 

(1)监控服务需要由visualizer来提供,在test1中拉取dockersamples/visualizer:stable并上传到harbor仓库中

docker pull dockersamples/visualizer:stable
docker tag dockersamples/visualizer:stable reg.westos.org/library/visualizer:latest
docker push reg.westos.org/library/visualizer:latest

(2)在test2中创建监控,指定名字是viz,公开8080端口 

docker service create \
  --name=viz \
  --publish=8080:8080/tcp \
  --constraint=node.role==manager \
  --mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
  visualizer

(3)访问172.25.73.2:8080,页面显示6个web服务和一个我们刚才创建的监控viz

(4)将服务副本数量扩充到10个,再次访问172.25.73.2:8080,可以看到10个web服务和1个监控

(5)把原来的v1镜像更新为v2镜像

docker service update --image myapp:v2 --update-parallelism 2 --update-delay 5s webcluster

–update-parallelism:表示一次更新几个节点,这里指定一次更新2个
–update-delay:表示每几秒更新一次,这里指定每隔5秒更新一次

(6)如果版本更新后需要回滚,可以使用如图命令,默认一次回滚一个节点

docker service rollback webcluster

四、使用脚本创建集群

通过命令行的方式创建集群效率比较低,我们可以通过编写脚本来快速创建集群

(1)删除之前的实验环境

 (2)在test2的家目录编写webcluster.yml

version: "3.9"
services:

  webcluster:
    image: myapp:v2
    ports:
      - "80:80"
    deploy:
      replicas: 6
      update_config:
        parallelism: 2
        delay: 5s
      restart_policy:
        condition: on-failure

  visualizer:
    image: visualizer
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints:
          - "node.role==manager"

 

(3)编写好webcluster.yml文件后,在当前目录下部署集群

docker stack deploy web -c webcluster.yml

查看该集群,可以看到我们在yml配置文件中配置的6个副本 

 查看监控

(4)修改脚本,扩充到12个副本

执行脚本

查看监控 

(5)修改脚本,将v2版本更新为v1

执行脚本

查看监控,可看到版本变为v1

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值