ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

运维实操——docker容器(十)三剑客之swarm、监控、脚本、图形界面

2021-07-25 13:33:27  阅读:335  来源: 互联网

标签:图形界面 server2 swarm 集群 portainer Docker docker 三剑客


三剑客之swarm、监控、脚本、图形界面

1、swarm功能介绍

Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具,swarm和docker是无缝衔接,且操作简单,小巧灵活。Swarm可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络,组成docker集群。
一般来说swarm很适合小规模集群使用,性能表现良好;对于容器的调度很灵活;它提供api接口,支持更多功能模块的兼容;Docker Swarm 为 Docker 化应用的核心功能(诸如多主机网络和存储卷管理)提供原生支持。
在这里插入图片描述
docker swarm节点分为manager节点和worker节点,他们之间的连接是通过http。任务 (Task)是最小的调度单位,目前来说就是一个单一的容器。服务 (Services) 是指一组任务的集合,服务定义了任务的属性。
在这里插入图片描述

在 Docker 1.12 版本发布之后,swarm内嵌在docker中,成为 Docker 的一个子命令,无需额外安装,使用便利

2、Docker Swarm实现

现在准备四台虚拟机,server1(172.25.11.1)、server2(172.25.11.2)、server3(172.25.11.3)、server4(172.25.11.4)都已经安装docker,我们想在server1中部署harbor仓库,server2做Docker Swarm集群的manager,server3和server4做Docker Swarm集群的worker。
这里加入harbor仓库的目的是可以加速docker pull拉取镜像,不然本地找不到就去网上拉取,速度很慢。因为前面已经搭建harbor,这里不再赘述,详见以前博客运维实操——docker容器(四)搭建远程容器仓库harbor、漏洞扫描和内容信任.
server2、server3、sever4都提前安装了docker-ce

(1)准备工作

首先server1关闭上个haproxy实验的环境
在这里插入图片描述

docker-compose up -d后台开启harbor
在这里插入图片描述

为了免密,通信方便,之前server1已经给了server2和server3,现在再给一份server4
在这里插入图片描述

server1把证书发给server2、server3、server4
在这里插入图片描述

为了使server2、server3、server4可以访问到仓库地址,我们需要在/etc/docker中写入daemon.json文件,告诉仓库地址。
server2、server3、server4都需要有daemon.json文件
在这里插入图片描述

然后都重启docker,docker info查看可以知道仓库地址
在这里插入图片描述

server2、server3、server4都要加入仓库的地址解析
在这里插入图片描述

为了后续的效果,提前给仓库导入myapp镜像,他包括myapp:v1和myapp:v2
在这里插入图片描述

修改标签为仓库中的library库,并上传至harbor仓库中
在这里插入图片描述

进入web可以查看已经上传至仓库
在这里插入图片描述

在这里插入图片描述

(2)初始化

server2初始化swarm集群,谁初始化,谁默认就是manager
在这里插入图片描述

注意初始化的结果里有其他节点加入的token,保留好

(3)节点加入集群

server3和server4加入集群
在这里插入图片描述
在这里插入图片描述

在server2中,docker node ls查看节点是否成功加入,可以看到server2是leader
在这里插入图片描述

(4)创建集群服务

docker service create --name webservice --publish 80:80 --replicas 3 myapp:v1
创建集群服务,命名为webservice,物理机的80端口映射到容器内的80端口,副本数量为3,使用myapp:v1镜像
在这里插入图片描述

查看服务正常
在这里插入图片描述

(5)测试

curl 172.25.9.2/hostname.html 可以看到访问的服务自动负载均衡,三个服务,一人一次
在这里插入图片描述

(6)扩容

扩充服务的数量为6,平均的分布在三个服务器上
在这里插入图片描述

(7)测试

curl 172.25.9.2/hostname.html 可以看到访问的服务自动负载均衡,六个结点,一人一次
在这里插入图片描述

3、Docker Swarm监控

github上可以搜索visualizer
我们想要有个监控方便查看

为了不影响接下来的实验结果,先将上面的实验清理
在这里插入图片描述

首先导入visualizer镜像
在这里插入图片描述
修改标签为仓库library中,上传镜像
在这里插入图片描述

创建服务,副本6个。
创建监控,名字叫viz,8080端口映射到8080。
在这里插入图片描述

访问172.25.11.2:8080,可以看到六个服务,一个监控
在这里插入图片描述

扩容到20个
在这里插入图片描述

查看
在这里插入图片描述

把原来的v1更新为v2,parallelism参数是表示一次更新几个,这里是一次更新五个;delay参数是表示延迟几秒,这里是每隔5秒更新一次。网页也可以清晰的看出这个过程
在这里插入图片描述

假如更新的版本发现有问题,可以回滚,默认是一个一个回滚
在这里插入图片描述

现在又恢复为v1了
在这里插入图片描述

4、编写脚本自动创建

在前面的操作中,我们采用命令行的方式建立了swarm集群,但是这样的命令行并不是每一个运维或开发人员都熟记的,而且操作起来会比较麻烦,想要一个脚本直接执行。

删除上面的实验环境
在这里插入图片描述

编写docker-compose脚本

[root@server2 ~]# cat docker-compose.yml
version: "3.8"
services:
  web:
    image: myapp:v1
    ports:
      - "80:80" 			%端口映射,主机80映射容器80
    networks:
      - webnet 				%网络接口为webnet
    deploy:
      replicas: 6 			%副本数量为6
      update_config:
        parallelism: 2 		%每次更新的数量为2
        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:

在这里插入图片描述

使用脚本部署集群,名为mycluster
在这里插入图片描述

修改脚本,
在这里插入图片描述

重新部署即为更新版本,扩容为60个
在这里插入图片描述

在这里插入图片描述

网页也可以看到60个
在这里插入图片描述

修改脚本
在这里插入图片描述

重新部署,把v1更新为v2
在这里插入图片描述

监控查看,20个20个更新的
在这里插入图片描述

docker stack ps mycluster,查看到原来的v1也在,这是为了回滚的时候有。
在这里插入图片描述

swarm集群在创建成功时会自动添加虚拟网卡
在这里插入图片描述

5、swarm图形界面

光有监控还是不够理想,想要为swarm集群管理添加图形化管理界面。
准备portainer-agent.tar和portainer.tar
为了更好的区分,在仓库中新建一个项目portainer,公开
在这里插入图片描述

导入镜像,修改标签,上传到仓库的portainer项目中
在这里插入图片描述

网页仓库可以看到
在这里插入图片描述

编写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:

执行portainer-agent-stack.yml文件部署服务
在这里插入图片描述

查看portainer开启了9000端口
在这里插入图片描述

网页访问172.25.11.2:9000进入图形界面
在这里插入图片描述

输入账户密码,即可进入管理界面,首次进入需要设定管理账户和密码
在这里插入图片描述

scale修改数字,直接就可以扩容,很方便
在这里插入图片描述

监控到六个
在这里插入图片描述

添加仓库信息
在这里插入图片描述

添加服务game2048,8000端口映射为80
在这里插入图片描述

成功开启
在这里插入图片描述

网页输入172.25.11.3:8000
在这里插入图片描述

如果要离开集群
对于worker输入docker swarm leave
对于manager输入docker swarm leave --force

标签:图形界面,server2,swarm,集群,portainer,Docker,docker,三剑客
来源: https://blog.csdn.net/qq_40764171/article/details/119078102

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有