3.1.3 网易docker最佳实践

目录

3.1.3.1 容器监控

1、CAdvisor

    1.1、CAdvisor的优点、缺点

    1.2、CAdvisor功能主要有两点

2、InfluxDB

    2.1、InfluxDB主要功能

    2.2、InfluxDB主要特点

3、Grafana

    3.1、Grafana主要特性

4、CAdvisor + InfluxDB + Grafana

 5、安装部署

    5.1、部署InfluxDB服务

    5.2、部署CAdvisor服务

    5.3、部署Granfana服务

​ 6、docker-compose快速部署

3.1.3.2 日志监控

1、docker日志

    1.1、日志处理机制

     1.2、Docker Logging Driver

    1.3、Graylog

    1.4、Graylog部署

    1.5、Graylog系统配置

3.1.3.3 资源管理

1、Docker Swarm

    1.1、基本概念

2、Swarm集群的2个概念

    2.1、节点

    2.2、服务和任务

3、创建Swarm集群

    3.1、初始化集群

    3.2、增加工作节点

​    3.3、查看集群

4、部署服务

    4.1、新建服务

    4.2、查看服务

    4.3、删除服务

5、资源管理

    5.1、portainer集群运行

    5.2、portainer配置

3.1.3.4 快速扩容

 1、命令方式

 2、portainer方式


3.1.3.1 容器监控

由于docker compose启动的服务都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,
就需要监控容器的:CPU使用率、内存使用率、网络状态、磁盘空间......一系列随时间变化的时序数据信息

1、docker starts:只能监控当前宿主机的所有容器,而且监控数据是实时的,没有地方存储,没有报警
2、而Scount、Sysdig Cloud、Data Dog虽然都提供了较完善的服务,但是他们都是托管服务,而且是收费的
3、Sensu Monitoring Framework集成度较高、免费,但部署过于复杂
所以我们选择CAdvisor做容器监控工具。

1、CAdvisor

CAdvisor包括容器的内存、CPU、网络IO、磁盘IO等,同时提供一个WEB页面用于查看容器的实时运行状态。
CAdvisor默认存储2分钟的数据,而且只是针对单物理机。
不过CAdvisor提供了很多数据集成接口,支持InfluxDB、Redis、Kafka、Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。

    1.1、CAdvisor的优点、缺点

    优点:开源、监控指标齐全、部署方便、有官方的docker镜像
    缺点:集成度不高、默认只在本地保存2分钟数据

    1.2、CAdvisor功能主要有两点

    1、展示Host和容器两个层次的监控数据
    2、展示历史变化数据

2、InfluxDB

    是用go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖
    在启动容器时指定配置,CAdvisor就可以存储数据到InfluxDB


    2.1、InfluxDB主要功能

        1、基于时间序列:支持与时间有关的相关函数(eg:最大、最小、求和)
        2、可度量性:你可以实时对大量数据进行计算
        3、基于事件:它支持任意的事件数据

    2.2、InfluxDB主要特点

        1、无结构(无模式)
        2、可以是任意数量的列
        3、可拓展的
        4、支持min、max、sum、count、mean、median等一系列函数,方便统计
        5、原生的HTTP支持,内置HTTP API
        6、强大的类SQL语法
        7、自带管理界面,方便使用 

3、Grafana

    是一个开源的数据监控分析可视化平台,支持多种数据源配置(eg:InfluxDB、MySQL、Elasticsearch、OpenTSDB、Graphite等)
    和丰富的插件及模板功能,支持图表权限控制和报警。

    3.1、Grafana主要特性

        1、灵活丰富的图形化选项
        2、可以混合多种风格
        3、支持白天和夜间模式
        4、多个数据源 

4、CAdvisor + InfluxDB + Grafana

    CAdvisor:负责收集容器随时间变化的数据
    InfluxDB:负责存储时序数据
    Grafana:负责分析和展示时序数据 

 5、安装部署

    5.1、部署InfluxDB服务

        说明:
            1、--name:启动容器,并分配一个名字influxdb
            2、-p:映射端口,8083端口为influxdb管理端口,8086端口是influxdb的数据端口
            3、-v:挂载数据
            4、-d:后台运行此容器
            5、influxdb:通过这个容器来运行的,默认会在docker官方仓库拉取下来

1、浏览器访问influxdb的管理端,http://ip:8083

2、创建test的数据库与root用户,这个用于后期配granfa

    5.2、部署CAdvisor服务

        谷歌的cadvisor可以用于收集docker容器的时序信息,包括容器运行过程中的资源使用情况和性能数据

可以在docker hub的官网查看CAdvisor各个参数的意思

        说明:
            1、-d:后台运行此容器
            2、--name:启动容器,并分配一个名字cadvisor
            3、-p:映射端口8080
            4、--mount:把宿主机的相关目录绑定到容器中,这些目录都是cadvisor需要采集的目录文件和监控内容
            5、-storage_driver:需要指定cadvisor的存储驱动、数据库主机、数据库名
    

     运行完以上docker命令后:    
    1、可以通过ip+8080端口访问测试一下,第一次访问如下页面有点慢

    5.3、部署Granfana服务

        grafana是一款开源的时序数据分析工具,而且界面专业易用
        
        注意:如果使用-v把数据挂载出来会出现容器启动失败,
                错误为mkdir:cannot create directory '/var/lib/grafana/plugins':Permission denied,
                    此时可以使用docker run --entrypoint "id" grafana/grafana得到uid、gid、groups(默认是472)
                    接着使用chown -R 472:472 /data/grafana/修改目录权限就可以启动成功了。
        Granfana部署成功后,可以通过ip+3000端口来访问grafana的web服务,第一次访问需要修改admin用户密码,
            默认用户名/密码:admin/admin

 6、docker-compose快速部署

docker-compose.yml文件本地路径:E:\meWork\study\project\subject-3\subject-3-docker\docker-compose.yml

文件内容如下图:

用docker-compose启动3个服务(InfluxDB、CAdvisor、Granfana):docker-compose up

3.1.3.2 日志监控

1、docker日志

    1.1、日志处理机制

        当启动一个容器的时候,这个容器其实是以docker daemon的一个子进程运行的,docker daemon可以拿到容器进程的标准输出,拿到标准输出后,会通过自身的一个LogDriver模块来处理,LogDriver支持的方式很多,可以写到本地的文件(默认方式),可以发送到syslog等。

docker默认收集应用程序的标准输出存储到一个json.log文件中,文件格式如下图:

以一行作为一条JSON数据存储。docker的这种日志存储方式是可以配置的,
具体参数可以在执行run启动容器的时候通过log-driver进行配置,具体配置请参考官方log-driver:https://docs.docker.com/config/containers/logging/configure/#supported-logging-drivers

     1.2、Docker Logging Driver

        docker默认使用json-file driver 作为log driver,而gelf则是我们需要使用的log driver。
            当容器多了,或者采用类似swarm集群部署docker的时候,各种日志分散存在各个json.log文件中,当查找问题或者进行相关统计的时候,分散的日志对我们来说是非常不友好的。我们需要一个能够集中管理docker日志的工具:graylog

    1.3、Graylog

        用graylog作为docker的日志收集平台的原因:
            1、docker原生支持graylog协议,直接将日志发送到graylog(通过gelf协议)
            2、graylog官方提供了将graylog部署在docker的支持

    1.4、Graylog部署

        1、创建一个目录用来部署graylog,假设目录为/root/graylog,以下所有操作都是在/root/graylog中进行的。
        2、初始化目录和配置文件

         3、修改下载完的graylog.conf中的root_timezone为GMT+0800中国时区
            root_timezone = ETC/GMT-8
        4、新建docker-compose.yml供docker-compose快速启动完整服务
        5、启动整个服务

            docker-compose up
        如果启动好了的话,会看到graylog webserver started的终端输出消息。
        访问http://{server}:9000,用户名/密码:admin/admin
       

    1.5、Graylog系统配置

        1、input配置
            graylog的日志收集通过定义input对象来完成,在graylog的web管理界面按照如下图片进行input对象配置,
            选择GELF UDP协议来新建一个输入器(input):

保存后,点击Start Input就开始收集日志了。 

        2、docker配置
            如果docker通过命令行启动,可以在run命令中加上如下参数:

 eg:

            如果通过docker-compose命令,则可以在docker-compose.yml中加入相关配置,以nginx容器为例:
             

3.1.3.3 资源管理

1、Docker Swarm

    Docker Swarm是docker官方三剑客项目之一,提供docker容器集群服务,是docker官方对容器云生态进行支持的核心方案
        使用它,用户可以将多个docker主机封装为单个大型的虚拟docker主机,快速打造一套容器云平台。
    注意:docker1.12.0+ Swarm mode已经内嵌入docker引擎,成为了docker子命令docker swarm,绝大多数用户已经
    开始使用Swarm mode,docker引擎API已经删除Docker Swarm。

    1.1、基本概念

        Swarm是使用SwarmKit构建的docker引擎内置(原生)的集群管理和编排工具。

2、Swarm集群的2个概念

        使用Swarm集群之前需要了解的几个概念:节点、服务和任务

    2.1、节点

        运行docker的主机可以主动初始化一个Swarm集群或者加入一个已存在的Swarm集群,这样这个运行docker的主机就成为一个Swarm集群的节点(node)。
        节点分为:管理节点(manager)、工作节点(worker)
        管理节点:用于Swarm集群的管理,docker swarm命令基本只能在管理节点执行。
        工作节点:是任务执行节点,管理节点将服务(service)下发至工作节点执行。

    2.2、服务和任务

        任务(Task):是Swarm中的最小的调度单位,目前来说就是一个单一的容器
        服务(Services):是指一组任务的集合,服务定义了任务的属性
        服务有两种模式:
            replicated services:按照一定规则在各个工作节点上运行指定个数的任务
            global services:每个工作节点上运行一个任务
        这两种模式通过docker service create的--mode参数指定。
容器、任务、服务的关系,如下图:

3、创建Swarm集群

    创建一个包含:一个管理节点、两个工作节点,的最小Swarm集群。

    3.1、初始化集群

        使用docker swarm init在本机初始化一个Swarm集群。
            docker swarm init --advertise-addr 192.168.100.249
        如果你的docker主机有多个网卡,拥有多个IP,必须使用--advertise-addr指定IP。
        执行docker swarm init命令的节点自动成为管理节点。

    3.2、增加工作节点

        将上一步创建管理节点时,输出的加入swarm集群的命令,复制到另外两台服务器上执行

    3.3、查看集群

        在管理节点使用docker node ls查看集群
            docker node ls

4、部署服务

    使用docker service命令来管理Swarm集群中的服务,该命令只能在管理节点运行。

    4.1、新建服务

        1、在创建好的Swarm集群中运行一个名为nginx服务。
            docker service create --replicas 3 -p 80:80 --name nginx nginx:latest
        2、使用浏览器,输入任意节点IP,可看到nginx默认页面

    4.2、查看服务

        1、查看当前Swarm集群运行的服务
            docker service ls
        2、查看某个服务的详情
            docker service ps nginx
        3、查看某个服务的日志
            docker service logs nginx

    4.3、删除服务

        从Swarm集群移除某个服务:docker service rm nginx

5、资源管理

    portainer:是Docker的图形化管理工具,管理swarm集群
        提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(上传下载镜像、创建容器)
        事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制
            基本能满足中小型单位对容器管理的全部需求。

    5.1、portainer集群运行

        1、下载portainer镜像

        2、安装portainer

    5.2、portainer配置

        设置管理员账号密码、查看swarm集群资源使用情况

3.1.3.4 快速扩容

 1、命令方式

    1、在创建好的Swarm集群中运行一个名为nginx服务,并使用--replicas参数指定启动的副本数
        docker service create --replicas 3 -p 80:80 --name nginx nginx:latest


    2、或者

 2、portainer方式

    可以使用portainer的方式在web界面上创建服务并指定副本数,同时可以随时动态增减副本数

由于swarm兴起不久,普及率还没有k8s高,swarm使用比较容易,可以结合官方文档进一步学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值