企业—Docker容器之swarm集群

本文介绍了Docker Swarm集群的高可用性、基本架构和部署过程,包括创建集群、添加节点、部署服务并进行负载均衡测试。同时,文章详细阐述了如何使用Portainer作为图形化管理工具进行集群监控和管理,包括Portainer的部署和功能展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.swarm集群高可用简介

1.swarm

Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令

Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。

2.swarm的基本架构

在这里插入图片描述

  • 这个图作为一个整体实际上都处于一个所谓的集群中,它可能对应了一到多台的实际服务器。每台服务器上都装有Docker并且开启了基于HTTP的DockerAPI。这个集群中有一个SwarmManager的管理者,用来管理集群中的容器资源这个图作为一个整体实际上都处于一个所谓的集群中,它可能对应了一到多台的实际服务器。每台服务器上都装有Docker并且开启了基于HTTP的DockerAPI。这个集群中有一个SwarmManager的管理者,用来管理集群中的容器资源。
  • 管理者的管理对象不是服务器层面而是集群层面的,也就是说通过Manager,我们只能笼统地向集群发出指令而不能具体到某台具体的服务器上要干什么(这也是Swarm的根本所在)
  • 至于具体的管理实现方式,Manager向外暴露了一个HTTP接口,外部用户通过这个HTTP接口来实现对集群的管理。对于稍微大一点的集群,最好是拿出一台实际的服务器作为专门的管理者,作为学习而言,也可以把管理者和被管理者放在一台服务器上。

二.swarm集群部署

实验环境:

主机名(IP)服务
server1(172.25.254.1)docker,manager
server2(172.25.254.2)docker, node
server3(172.25.254.3)docker, node

1.swarm集群的创建

1.在server1作为manager节点上进行swarm的初始化
在这里插入图片描述
2.server2,server3节点作为node节点执行命令加入swarm集群
在这里插入图片描述
3.在server1上查看节点状态
在这里插入图片描述
4.自己创建一个docker集群网络
在这里插入图片描述
5.三个节点都带入nginx镜像

[root@server2 ~]# docker load -i nginx.tar
[root@server2 ~]# docker load -i nginx.tar
[root@server2 ~]# docker load -i nginx.tar

6.在manager节点部署nginx服务,服务数量为3,使用nginx镜像,注意在部署服务之前要确定已经导入本地镜像nginx

[root@server1 ~]# docker service create --name web --network webnet --publish 80:80 --replicas 3 nginx

在这里插入图片描述
在这里插入图片描述
//对生成的服务数量进行拉伸为6,则每个节点基本有2个web页面:
在这里插入图片描述
//对生成的服务数量进行缩减为3,即每个节点有一个web页面服务:
在这里插入图片描述
7.在浏览器进行测试
在这里插入图片描述
8.在三个节点的相应的nginx的测试目录下添加相应的测试内容

//server1
[root@server1 ~]# vim index.html
[root@server1 ~]# cat index.html 
server1
[root@server1 ~]# docker cp index.html web.1.m66pi2uywlm5blkfhw3ob2s4x:/usr/share/nginx/html       生成的相应web输入web自动补齐

//server2:
[root@server2 ~]# vim index.html
[root@server2 ~]# cat index.html 
server2
[root@server2 ~]# docker cp index.html web.2.4f1m4k2cimfzmkpf56va0n3j9:/usr/share/nginx/html

//server3:
[root@server3 ~]# vim index.html
[root@server3 ~]# cat index.html 
server3
[root@server3 ~]# docker cp index.html web.3.w2xj4sq10fxq5r6lklz0fqkfq:/usr/share/nginx/html

9.在物理机上进行测试负载均衡
在这里插入图片描述
2.swarm集群监控的添加

1.官网下载监控的镜像并且导入本地,三个节点都需要导入监控镜像
在这里插入图片描述

[root@server1 ~]# docker load -i visualizer.tar
[root@server2 ~]# docker load -i visualizer.tar
[root@server3 ~]# docker load -i visualizer.tar

2.在manager节点上使用监控镜像运行容器

[root@server1 ~]# 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

发现web服务分布在server1,server2及其server3三个节点上面:
在这里插入图片描述
3.监控镜像的滚动更新

1.拉升监控web服务器的数量为30个,监控界面会自动更新

[root@server1 ~]# docker service scale web=30

在这里插入图片描述
2.下载一个镜像并且导入三个节点

[root@server1 ~]# docker load -i httpd.tar
[root@server2 ~]# docker load -i httpd.tar
[root@server3 ~]# docker load -i httpd.tar

3.在manager节点进行镜像的更新

[root@server1 ~]# docker service update --image httpd --update-delay 5s --update-parallelism 5 web    每隔五秒更新,每次更新5个机子,是为了防止在更新过程中出现问题即使终止并且可以版本回退
docker  ps -aq | wc -l  ##可看到每个机子上开启了多少,一般都是平均

在这里插入图片描述
4.在浏览器上查看镜像由nginx变为httpd
在这里插入图片描述

三.搭建Portainer可视化界面

1.portainer简介

Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据的基本操作(包括上传下载镜像,创建容器等作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。

2.portainer部署

Docker Stack ,通过 Docker Stack 我们只需对已有的 docker-compose.yml 配置文件稍加改造就可以完成 Docker 集群环境下的多服务编排。

1.在server1的manager节点导入portainer及其portainer-agent镜像

[root@server1 portainer]# docker load -i portainer.tar 
[root@server1 ~]# docker load -i portainer-agent.tar 

2.在server2及server3上导入portainer-agent镜像

[root@server2 ~]# docker load -i portainer-agent.tar 
[root@server3 ~]# docker load -i portainer-agent.tar 

3.通过 Docker Stack 我们对已有的portainer-agent-stack.yml 配置文件进行集群环境下的多服务编排。

[root@server1 portainer]# 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:


[root@server1 ~]# docker stack deploy --compose-file=portainer-agent-stack.yml portainer
Creating network portainer_agent_network
Creating service portainer_agent
Creating service portainer_portainer   //完成之后查看端口会出现9000端口

4.浏览器上登陆设置密码并且登陆,用户默认为admin
在这里插入图片描述
5.查看相应的容器显示容器正在运行
在这里插入图片描述
6.查看能swarm集群管理相应信息
在这里插入图片描述
//visualizer 监控界面的信息:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值