【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

一、Docker Swarm简介

01_简介

  • Swram是Docker公司推出的官方容器集群平台,基于go语言实现,代码开源在https://github.com/docker/swarm
    .2016年2月对架构进行重新设计,推出了v2版本,支持超过1千个节点。作为容器集群管理器,Swarm最大的优势之一就是100%支持标准的DockerAPI及工具(如Compose,docker-py等),Docker本身就可以很好地与Swarm进行集成。
  • Swarm在Docker1.12版本之前属于-一个独立的项目,在Docker1.12版本发布之后,该项目合并到了Docker中,成为Docker的一个子命令。.
  • Swarm是Docker社区提供的唯一个原生支持Docker集群管理的工具。
  • Swarm可以把多个Docker主机组成的系统转换为单一的虛拟Docker主机,使得容器可以组成跨主机的子网网络
  • Docker Swarm是一个为IT运维团队提供集群和调度能力的编排工具。
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

02_Docker Swarm 优点

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

03_节点详解

  • Manager:接收客户端服务定义,将任务发送到agnet节点,维护集群期望状态和集群管理功能以及leader选举。默认情况下manager节点也会运行任务,也可以配置只做管理任务。
  • worker:接收并执行从管理节点分配的任务,并报告任务当前的状态,以便Manager节点维护每个服务期望状态。

04_相关概念

  • 任务(task)是Swarm中的最小调度单位,目前来说就是一个单一的容器
  • 服务(Services)是指一组任务的集合,服务定义了任务的属性

二、部署集群

Manager端:server1
worker端:server2,server3

  • Manager端配置
    docker swarm init:初始化集群
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)
  • worker端配置
    在所有worker节点执行初始化集群输出的指令:
docker swarm join --token SWMTKN-1-4eu8c3onspcfhxjhlmq71b4kyz7gt51qppoojed9s69t4l12lp-05lvm7a115xvnk4uy5gxgtb40 172.25.2.1:2377
  • Manager端查看信息
    docker node ls
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

三、创建测试服务

  • 以镜像 myapp:v1 为例,拉取镜像
    所有节点拉取镜像,改名为myapp:v1
    docker pull ikubernetes/myapp:v1
    docker tag ikubernetes/myapp:v1 myapp:v1

  • 创建服务:docker service create
    docker service create --name my_cluster --replicas 2 -p 80:80 myapp:v1
    –name:服务名称
    –replicas:部署服务的节点个数
    -p:映射端口
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

  • 测试服务
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

四、部署swarm监控服务

  • 拉取镜像
    docker pull dockersamples/visualizer
  • 部署监控服务
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 \
  dockersamples/visualizer
  • 访问:http://172.25.2.1:8080/ 可以看到监控页面
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

  • 增加服务调度数量,发现6个不相同
    docker service scale my_cluster=6
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

  • 停掉一个worker端,会从其他节点调度,重新开启这个,也不会再调度这个worker端,除非增加调度节点,会优先调度空闲worker
    systemctl stop docker
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)
    systemctl start docker
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)
    docker service scale my_cluster=9
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

五、滚动更新

私有仓库端:server1
Manager端:server2
worker端:server3,server4

01_环境搭建

  • 节点升级(将server2升级为Manager)
    docker node promote server2
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

  • 节点降级(将server1降级为worker)
    docker node demote server1
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

  • 删除worker(server1),先离开,后删除
    docker swarm leave:server1离开swarm集群(server1上)
    docker node rm server1:在manager端删除已经离开的节点(server2上)
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

  • 开启server4 安装部署docker,将server4加入集群
    docker swarm join --token SWMTKN-1-4eu8c3onspcfhxjhlmq71b4kyz7gt51qppoojed9s69t4l12lp-05lvm7a115xvnk4uy5gxgtb40 172.25.2.2:2377
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

02_搭建私有仓库

  • 仓库端server1:./install.sh --with-chartmuseum

  • server2、3、4:vim /etc/docker/daemon.json

{
  "registry-mirrors": ["https://reg.westos.org"]
}
  • server2拷贝证书:
    scp -r certs.d/ server3:/etc/docker/
    scp -r certs.d/ server4:/etc/docker/

  • server1、2、3、4解析:
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

  • 重载server2、3、4的docker服务
    systemctl reload docker.service

  • 测试:
    server1:
    docker login reg.westos.org
    用户:admin
    密码:westos
    docker push reg.westos.org/library/myapp:v1
    server4:
    docker login reg.westos.org
    用户:admin
    密码:westos
    docker pull myapp:v1

  • server2:docker service create --name my_web --replicas 3 -p 80:80 myapp:v1当1234都没有myapp镜像,0速度也很快!

03_滚动更新

  • 私有仓库端拉取镜像docker pull ikubernetes/myapp:v2
  • 修改标签docker tag ikubernetes/myapp:v2 reg.westos.org/library/myapp:v2
  • 上传镜像到私有仓库docker push reg.westos.org/library/myapp:v2
  • 设置滚动更新docker service update --image myapp:v2 --update-parallelism 2 --update-delay 5s my_web
    –image:指定要更新的镜像
    –update-parallelism:指定最大同步更新的任务数
    –update-delay:指定更新间隔

04_编写Dockerfile 部署服务

  • 上传镜像到私有仓库
    1.myapp镜像(已上传)
    2.监控镜像
    docker tag dockersamples/visualizer:latest zy.westos.org/library/visualizer:latest
    docker push zy.westos.org/library/visualizer:latest

  • 编写Dockerfile
    mkdir compose:创建目录
    vim compose/docker-compose.yml

version: "3.9"
services:
  web:
    image: myapp:v1
    networks:
      - mynet
    deploy:
      replicas: 2 #控制调度数量,直接修改文件,重新执行命令即可部署
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
  visualizer:
    image: visualizer:latest
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints:
          - "node.role==manager"
networks:
  mynet:
  • 删除原有服务
    docker service rm viz
    docker service rm my_web

  • 部署服务
    docker stack deploy -c compose/docker-compose.yml my_cluster:部署
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

  • 查看服务
    docker stack ps my_cluster:查看
    docker stack services my_cluster:查看
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

  • 修改调度数量
    1.直接修改Dockerfile中的replicas值:
    replicas: 6
    2.执行部署命令
    docker stack deploy -c compose/docker-compose.yml my_cluster
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

05_Portainer可视化

  • 创建目录
    mkdir portainer
    cd portainer/
  • 上传镜像到仓库
    docker load -i portainer-agent.tar
    docker load -i portainer.tar
    docker tag portainer/agent:latest reg.westos.org/library/agent:latest
    docker push reg.westos.org/library/agent:latest
  • manager端修改配置文件:
    vim portainer-agent-stack.yml
  • 删除其他服务
    docker service rm my_cluster_web
    docker service rm my_cluster_visualizer
  • 执行部署命令
    docker stack deploy -c portainer-agent-stack.yml portainer
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)
    查看服务
    docker stack ps portainer
    docker service ls
    【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)
  • 172.25.2.2:9000进入portainer可视化工具

【Docker】Docker swarm集群管理(部署集群、创建服务、监控服务、负载均衡、滚动更新、Portainer可视化)

上一篇:Java面试题及答案,docker监控容器


下一篇:Swarm_BZZ OS系统低调更新源码.从无人问津风靡一时再到应用落地