企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群

  • 前言-docker swarm简介
  • Docker swarm实践
    • docker swarm实现小规模集群负载均衡
    • 图形化集群管理


前言-docker swarm简介

在 Docker 1.12 版本发布之后,swarm合并到了 Docker 中,成为 Docker 的一个子命令。Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具,它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络
Docker swarm 是一个为 IT 运维团队提供集群和调度能力的编排工具。
本章节将要讲解docker compose、docker machine、docker swarm中的docker swarm ,这三个项目都是docker的原生支持,号称docker三剑客,掌握后基本可以帮助您管理docker集群。

Docker Swarm 优点

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

Docker swarm节点分为manager管理节点和worker工作节点。
Task任务是swarm中的最小调度单位,可以理解为一个单一的容器
Services服务是指一组任务的集合,服务定义了任务的属性。

大致的工作原理图如下:
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第1张图片

docker swarm相比kubernetes、mesos项目,还是显得单薄,更加适合小规模docker集群。

Docker swarm实践

docker swarm实现小规模集群负载均衡

准备虚拟机,server1负责私有harbor仓库,server2负责docker swarm 集群leader , server3、server4为集群后端

server1:

配置harbor私有容器仓库,详细配置步骤可查看本人博客:
企业运维实战–最全Docker学习笔记2.本地容器仓库加密认证、harbor远程容器仓库搭建

配置好harbor后,启动(第一次执行脚本安装后无需此操作)

docker-compose up -d

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第2张图片
docker-compose ps 查看是否健康启动
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第3张图片

上传镜像myapp到容器仓库

docker load -i myapp.tar

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第4张图片

打标签

docker  tag ikubernetes/myapp:v1 hyl.westos.org/library/myapp:v1
docker  tag ikubernetes/myapp:v2 hyl.westos.org/library/myapp:v2

在这里插入图片描述

docker push hyl.westos.org/library/myapp:v1
docker push hyl.westos.org/library/myapp:v2

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第5张图片
进入harbor仓库web查看
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第6张图片

server2:

初始化集群

docker swarm init
docker node ls

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第7张图片

为server3、server4安装docker-ce,解决warning

cd /etc/sysctl.d/
scp docker.conf [email protected]:/etc/sysctl.d/
scp docker.conf [email protected]:/etc/sysctl.d/

server3、server4连接仓库,传递认证key和仓库json文件

cd /etc/docker/
ls
cat daemon.json
{
  "registry-mirrors": ["https://hyl.westos.org"]
}
scp daemon.json root@172.25.9.3:/etc/docker/
scp daemon.json root@172.25.9.4:/etc/docker/
scp -r certs.d/ root@172.25.9.3:/etc/docker/
scp -r certs.d/ root@172.25.9.4:/etc/docker/

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第8张图片

server3、4:

安装docker-ce服务,配置连接server1仓库,加入servre2docker swarm集群

# 取消warning
sysctl --system

# 密钥和仓库文件接收完成后,reload docker
systemctl reload docker

# 加入172.25.9.2的集群当中,需要配置好docker才可操作
docker swarm join --token SWMTKN-1-1ttb8r7xm8d390mczvei5wpgi1fmjsdykoyp1h8oa7d9v91wq4-0zu8b6xmia2nocdctozzvt6kp 172.25.9.2:2377

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第9张图片
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第10张图片

server2:

创建集群服务,名为webservice 端口映射80:80 开启三个节点 镜像为myapp:v1

docker service create --name webservice --publish 80:80 --replicas 3 myapp:v1

查看集群和集群节点服务

docker service ls
docker service ps webservice

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第11张图片

可以在worker主机中查看镜像myapp已经pull到本地
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第12张图片

测试访问:curl 172.25.9.2/hostname.html 可以看到访问的主机节点负载均衡
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第13张图片

命令扩容:添加集群数量到6个

docker service scale webservice=6

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第14张图片

docker service ps webservice

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第15张图片
再次访问,六台worker主机均负载均衡,采用算法为默认的rr轮询
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第16张图片

使用yaml脚本添加监控visualizer并更新设定swarm镜像版本

首先,先将上面的实验清理,避免影响接下来的实验结果。
在这里插入图片描述

harbor容器仓库主机server1操作:
将visualizer镜像压入harbor仓库,
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第17张图片

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第18张图片
manager主机server2操作:

编写docker-compose脚本

vim docker-compose.yml
version: "3.8"
services:
  web:
    image: myapp:v2
    ports:
      - "80:80" #端口映射,主机80映射容器80
    networks:
      - webnet #网络接口为webnet
    deploy:
      replicas: 6 #20 拉起容器的数量
      update_config:
        parallelism: 2 #5 每次更新的数量
        delay: 5s  #更新时间间隔
      restart_policy:
        condition: on-failure

  visualizer:
    image: visualizer:latest
    ports:
      - "8080:8080" #监控端口为主机映射8080到容器的8080
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints:
          - "node.role==manager"

networks:
  webnet:

使用脚本拉起swarm服务集群,名为mycluster

docker stack deploy -c docker-compose.yml mycluster

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第19张图片

查看集群状态

docker stack ls
docker stack ps mycluster

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第20张图片
网页访问监控visualizer,映射端口到主机的8080
firefox:172.25.9.2:8080
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第21张图片
修改yaml脚本,重新拉起容器即视为更新版本
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第22张图片

swarm集群在创建成功时会自动添加虚拟网卡
docker network ls
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第23张图片

图形化集群管理

在前面的操作中,我们采用命令行的方式建立了swarm集群,但是这样的命令行并不是每一个运维或开发人员都熟记的,而且操作起来会比较麻烦。所以需要添加为swarm集群管理添加图形化管理界面

将准备好的镜像压入harbor容器仓库

docker load -i portainer-agent.tar
docker load -i portainer.tar

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第24张图片
创建harbor新项目,portainer
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第25张图片
注意:此处一定要将仓库设置为公开,否则无法匿名push镜像!!

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第26张图片

添加标签,压入仓库

docker tag portainer/portainer:latest hyl.westos.org/portainer/portainer:latest
docker tag portainer/agent:latest hyl.westos.org/portainer/agent:latest
docker push hyl.westos.org/portainer/portainer:latest 
 docker push hyl.westos.org/portainer/agent:latest

在这里插入图片描述

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第27张图片

查看镜像是否上传完成

在manager主机中执行脚本

scp portainer-agent-stack.yml root@172.25.9.2:
docker stack deploy -c portainer-agent-stack.yml portainer
docker service ls

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第28张图片

企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第29张图片
拉起服务后查看服务状态
docker service ls
在这里插入图片描述

查看测试脚本
cat portainer-agent-stack.yml

version: '3.2'

services:
  agent:
    image: portainer/agent
    environment:
      # REQUIRED: Should be equal to the service name prefixed by "tasks." when
      # deployed inside an overlay network
      AGENT_CLUSTER_ADDR: tasks.agent
      # AGENT_PORT: 9001
      # LOG_LEVEL: debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /var/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - agent_network
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  portainer:
    image: portainer/portainer
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    ports:
      - "9000:9000"
    volumes:
      - portainer_data:/data
    networks:
      - agent_network
    deploy:
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]

networks:
  agent_network:
    driver: overlay
    attachable: true

volumes:
  portainer_data:

网页访问图形管理界面,映射端口为9000
172.25.9.2:9000
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第30张图片

输入账户密码,即可进入管理界面,首次进入需要设定管理账户和密码
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第31张图片
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第32张图片
企业运维实战--Docker三剑客三之docker swarm小规模集群搭建、图形化管理docker集群_第33张图片

关闭并离开集群:
manager主机:

docker swarm leave  --force

worker主机:

docker swarm leave 

你可能感兴趣的:(企业运维实战--Docker,运维,容器,docker,docker,swarm)