Docker集群管理(docker stsack多服务部署、portanier可视化)

目录

一、Docker Stack 的概述及相关命令

二、实验环境的部署和清理

三、部署一个简单的Stack服务

四、镜像的更新

五、资源的控制

六、图形界面portainer的部署

 

一、Docker Stack概念

  •     技术由来:Docker Swarm在大规模场景下的多服务部署和管理是一件很难的事情,为解决此问题,产生了Docker stack,
  •     Docker Stack基于Docker Swarm之上来完成对多服务进行部署和管理的
  •     实现方式:通过使用与Compose一样的yml文件中定义应用,然后通过 docker stack deploy 命令完成部署和管理
  •     体系结构:Stack 位于 Docker 应用层级的最顶端。Stack 基于服务进行构建,而服务又基于容器
  •     Docker Stack与Docker Compose区别:
  •    Docker stack 不支持 "build" 指令它需要的镜像是预先已经构建好的,所以Docker-Compose 更适合开发场景
  •    Docker stack 功能包含在Docker引擎中,是Swarm mode的一部分
  •    Docker Stack是集成在Docker引擎中的,直接使用命令即可,而Docker Compose 则是一个Python项目,使用Docker API规范操作容器
  •    Docker Stack不支持version 2的yml文件,至少version 3以上。而Docker Compose 对version 2或3都可以处理
  •    Docker Stack 更适合处理多服务也能处理单机服务,而Docker Compose 仅能处理单机服务,所以Docker Stack 可以把Docker Compose的工作都处理了,占据了主导地位。
  • 命令
  •  


docker stack 相关的命令:

格式
Usage:    docker stack [OPTIONS] COMMAND
#Docker stack任务管理
Manage Docker stacks
#选项
Options:
      --orchestrator string   Orchestrator to use (swarm|kubernetes|all)|选择协调器是swarm还是k8s或者2者
#子命令
Commands:
  docker stack deploy                  ##加载一个新的stack任务或者更新某一stack任务
  docker stack  ls                     ##显示所有stack任务的列表
 docker  stack   ps                    ##列出某一个stack的详细任务
  docker stack   rm                    ##删除一个或者多个stack任务
  docker stack  services               ##列出某一个stack的所有服务

二、实验环境的部署和清理

主机 IP 作用
reg.westos.org 172.25.6.2 安装有Docker(18.09.6) 、私有仓库管理节点
server1 172.25.6.1 安装有Docker(18.09.6)、集群管理节点、可访问私有仓库
server3 172.25.6.3 安装有Docker(18.09.6)、集群工作节点、可访问私有仓库
server4 172.25.6.4 安装有Docker(18.09.6)、集群工作节点、可访问私有仓库

 

  1. 官网链接:https://docs.docker.com/compose/compose-file/

如何缩短镜像的名称 创建一个私有加速器的文件 这样拉取到的镜像名称就会缩短

[root@server1 ~]# cd /etc/docker/
[root@server1 docker]# cat daemon.json 
{
  "registry-mirrors":["https://reg.westos.org"]
}

查看镜像


 

查看数据卷列表

清理掉不用的网络

docker network prune                ##清理掉不用的网络

在reg.westos.org上 :

清理掉不用的卷组:

[root@server3 ~]# docker volume ls        ##查看卷组列表
[root@server3 ~]# docker volume prune     ##清理掉不用的卷组

三、部署一个简单的Stack服务

  • 配置docker-compose.yml文件
  • 测试
  • 副本的拉伸
  • 对于存储的简介

1、制作一个yml文件,开启一个web服务,使用nginx容器,生成3个副本,自定义卷与网络

[root@org compose]# vim docker-compose.yml
version: '3'                              ##版本好为3
services:                  
  web:
    image: library/nginx                  ##镜像的名称
    ports:                                ##端口映射为80
      - "80:80"
    volumes:                          
      - web-data:/usr/share/nginx/html    ##数据卷存放的地方
    networks:                             
      - vm_net                            ##网络名称 
    deploy:
      replicas: 3                         ##副本数为3自动均摊但3个节点上 
volumes:
  web-data:                               磁盘存储的名称 
networks:
  vm_net:

(1)、查看官网的配置信息

(2)、将官网的配置信息写入docker-compose.yml文件中

(3)、自动部署stack

[root@reg compose]# docker stack deploy -c docker-compose.yml my_cluster  ##stack 部署告诉文件在哪  命名为my_cluster

2、测试:

查看创建的3个副本与各个节的匹配情况

[root@server1 compose]# docker service ps my_cluster_web

3、拉伸副本的个数 :

[root@org compose]# vim docker-compose.yml
##version: '3'                              ##版本好为3
##services:                  
 ## web:
   ## image: library/nginx                  ##镜像的名称
    ##ports:                                ##端口映射为80
      - "80:80"
    ##volumes:                          
      ##- web-data:/usr/share/nginx/html    ##数据卷存放的地方
    ##networks:                             
      ##- vm_net                            ##网络名称 
    ##deploy:
      replicas: 10                         ##副本数为:10
##volumes:
  ##web-data:                               磁盘存储的名称 
##networks:
  ##vm_net:

拉伸副本数为10个

创建stack副本

4、Stack存储简介

每个节点上会自动创建一个挂载卷 (但是每个节点上的数据都是独立的)

在本地挂载的卷,数据不能同步到其他节点上

(如果想要同步各个节点的数据,需要做分布式存储)

stack的存储:

docker volume ls        ##查看存储的信息

查看磁盘存储的位置

[root@reg compose]#docker volume inspect my_cluster_web-data   ##查看磁盘存储的信息

在发布的目录中写入

cd /var/lib/docker/volumes/my_cluster_web-data/_data    ##查看磁盘存储的发布目录
vim index.html
reg.westos.org                                  

vim index.com

访问reg.westos.org

[root@reg ]# curl 172.25.6.1
reg.westos.org
    

(因为有10个副本三个节点所以一个节点对应多个副本

在server4上 :

(reg.westos.org上的步骤)

(访问的各个节点的数据都不一样)

四、给服务加监控:

  • 配置docker-compose.yml文件
  • 测试
  • 登录网页查相关的监控信息

1、配置docker-compose.yml文件、部署Stack

(1)、配置docker-compose.yml文件

version: '3'
services:
  web:
    image: library/nginx
    ports:
      - "80:80"
    volumes:
      - web-data:/usr/share/nginx/html
    networks:
      - vm_net
    deploy:
      replicas: 6										#副本扩容为6
  visualizer:											#添加监控visualizer,docker官方模板
    image: dockersamples/visualizer
    ports:
      - "8080:8080"                             ##监听的端口为8080
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
volumes:
  web-data:
networks:
  vm_net:

(2)部署Stack

[root@server1 compose]# docker stack deploy -c docker-compose.yml my_cluster  ##stack 部署告诉文件在哪  命名为my_cluster

(3)、查看部署项目的名称

[root@server1 compose]#docker stack service mu_cluster         ##查看文件中部署项目的名称

(可以看到新部署的镜像已经生效)

2、测试

(1)、查看8080端口是否开启

3、打开浏览器输入:172.25.6.1:8080

五、镜像的滚动更新

(只需要在文件中将原来的镜像修改为需要更新的镜像即可)

  • 私有仓库导入镜像、查看官网信息
  • 配置docker-compose.yml文件、添加限制内存的配置
  • 在网页上查看更

1、在私有仓库的管理节点上首先导入httpd镜像

[root@reg]#docker login httpd.tar          ##导入镜像 

(1)、上传镜像

(3)、在私有仓库的登录页面上:

(4)、在server1上拉取镜像:

[root@server1 ]#docker pull library/httpd

(5)、打开官网查看滚动更新的配置信息

2、修改yml文件,更新内容由容器nginx变为httpd

version: '3'
services:
  web:
    image: library/httpd						#容器变更
    ports:
      - "80:80"
    volumes:
      - web-data:/usr/local/apache2/htdocs		#挂载地址改变
    networks:
      - vm_net
    deploy:
      replicas: 6
      update_config:							#升级规则
        parallelism: 2							#每次更新2个副本
        delay: 5s								#每批次间隔5秒
      restart_policy:							#副本重启规则
        condition: on-failure
  visualizer:
    image: dockersamples/visualizer
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]
volumes:
  web-data:
networks:
  vm_net:

部署、

[root@server1 compose]# docker stack deploy -c docker-compose.yml my_cluster  ##stack 部署告诉文件在哪  命名为my_cluster

3、在网页上输入:172.25.6.1:8080 查看更新的情况

查看httpd镜像对应的Pid

六、资源控制

官方文档中:RESOURCES部分

  • 查看没有限制前的内存
  • 配置docker-compose.yml文件、添加限制内存的配置
  • 测试

1、查看没有限制时的状态

[root@server1 stack]# cd /sys/fs/cgroup/memory/docker/   ##进入cgroup文件下内存
[root@server1 docker]# cd cd8318ca5acc823e25d2fe5ddb2b4a01cc0635f0587cd1e6ec324e55718f5679/
[root@server1 cd8318ca5acc823e25d2fe5ddb2b4a01cc0635f0587cd1e6ec324e55718f5679]# cat memory.limit_in_bytes
9223372036854771712                     #查看容器上限

(2)查看内存容量的大小

2、限制内存

配置docker-compose.yml文件、添加限制内存的配置

[root@server1 ~]# cd compose/
[root@server1 compose]# vim docker-compose.yml 

(1)、查看官网信息

(2)、修改docker-compose.yml文件信息

version: "3"
services:
  web:
    image: library/httpd
    ports:
      - "80:80"
    volumes:
      - web-data:/usr/local/apache2/htdocs
    networks:
      - my_net
    deploy:
      replicas: 6
      update_config:
        parallelism: 2
        delay: 5s
      restart_policy:
        condition: on-failure
      resources:
        limits:
          cpus: '0.50'                              ##限制内存为之前的二分之一
          memory: 50M

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


volumes:
  web-data:
networks:
  my_net:

3、测试

再次查看内存已经变成原来的二分之一

图形界面portainer的部署

    官方网站:https://www.portainer.io/

安装前准备

    portainer运行文件:https://downloads.portainer.io/portainer-agent-stack.yml
    portainer软件:portainer/portainer 和portainer/agent,在公有DockerHUB中可以下载,存放在本地harbor仓库中

  • 在私有仓库的控制节点上拉取镜像
  • 在server1上部署portainer图形化
  • 在网页上登录验证

1、在私有仓库的管理节点上使用阿里云加速从官网上直接拉取镜像

[root@reg ]# docker pull portaninet/portainer           
[root@reg ]# docker pull portaninet/agent

2、部署portainer图形化命名为portaine

[root@server1 ~]# docker stack service portaine      ##查看portaine图形化监控的服务信息 

(2)、在各个节点上也要部署portaninet/agent 镜像(否则无法监控到其他页面的情况)

[root@server1 ~]# docker stack deploy -c portainer-agent-stack.yml portainer   ##重新部署 

3、在网页上输入:172.25.6.1:9000
 

(1)、第一次登录,设置8位数密码

(2)、查看服务:

(3)、改变监控的个数

(4)、查看集群的监控页面

(4)、直接在原来页面上修改:

发布了93 篇原创文章 · 获赞 1 · 访问量 1928

猜你喜欢

转载自blog.csdn.net/dghfttgv/article/details/104544088