前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >部署docker swarm集群监控

部署docker swarm集群监控

原创
作者头像
用户2672162
修改2021-02-03 14:34:52
1.4K0
修改2021-02-03 14:34:52
举报
文章被收录于专栏:四颗咖啡豆

前提

  1. Docker

前言

现在Docker Swarm已经彻底输给了K8S,但是现在K8S依然很复杂,上手难度较Docker Swarm高,如果是小规模团队且需要容器编排的话,使用Docker Swarm还是适合的。

目前Docker Swarm有一个问题一直没有解决,如果业务需要知道用户的请求IP,则Docker Swarm满足不了要求。目前部署在Docker Swarm内的服务,无法获取到用户的请求IP。

具体可以看看这个ISSUE->Unable to retrieve user's IP address in docker swarm mode

整体思路

思路整体来说是使用Influxdb+Grafana+cadvisor,其中cadvisor负责数据的收集,每一台节点都部署一个cadvisor服务,Influxdb负责数据的存储,Grafana负责数据的可视化。

https://image-static.segmentfault.com/319/050/3190508157-5e4217d9605b7_articlex
https://image-static.segmentfault.com/319/050/3190508157-5e4217d9605b7_articlex

演示环境

主机

IP

master(manager)

192.168.1.60

node1(worker)

192.168.1.61

node2(worker)

192.168.1.62

https://image-static.segmentfault.com/183/111/183111580-5e4217dc63b4f_articlex
https://image-static.segmentfault.com/183/111/183111580-5e4217dc63b4f_articlex

我这里是将master节点当作监控数据存储以及可视化服务的节点作为演示,一般是拿一个worker节点做这样的工作。

初始化Docker Swarm

在master机器上初始化集群,运行

docker swarm init --advertise-addr {MASTER-IP}

代码语言:txt
复制
[root@master ~]# docker swarm init --advertise-addr 192.168.1.60

Swarm initialized: current node (138n5rwjz83y8goyzepp1cdo7) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j 192.168.1.60:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions

在node节点运行提示的命令加入到集群中

docker swarm join --token SWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j 192.168.1.60:2377

manager节点初始化集群后,都会有这样一个提示,这个的命令只是给个示例,实际命令需要根据初始化集群后的真实情况来运行。

代码语言:txt
复制
[root@node1 ~]#  docker swarm join --token SWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j 192.168.1.60:2377
This node joined a swarm as a worker.
代码语言:txt
复制
[root@node2 ~]#  docker swarm join --token SWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j 192.168.1.60:2377
This node joined a swarm as a worker.

在master机器上查看当前的node节点

docker node ls

代码语言:txt
复制
[root@master ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
138n5rwjz83y8goyzepp1cdo7 *   master              Ready               Active              Leader              18.09.8
q03by75rqur63lx36cmordf11     node1               Ready               Active                                  18.09.8
6shdf5ej4b5u7x877bg9nyjk3     node2               Ready               Active 

到目前为止集群已经搭建完成了,接下来开始部署服务

在Docker Swarm部署监控服务

docker stack deploy -c docker-compose-monitor.yml monito

代码语言:txt
复制

root@master ~# docker stack deploy -c docker-compose-monitor.yml monito

Creating network monitor_default

Creating service monitor_influx

Creating service monitor_grafana

Creating service monitor_cadviso

代码语言:txt
复制

docker-compose-monitor.yml文件内容

代码语言:txt
复制

version: '3'

services:

influx:

代码语言:txt
复制
image: influxdb
代码语言:txt
复制
volumes:
代码语言:txt
复制
  - influx:/var/lib/influxdb
deploy:
  replicas: 1
  placement:
    constraints:
      - node.role == manage

grafana:

代码语言:txt
复制
image: grafana/grafana
代码语言:txt
复制
ports:
代码语言:txt
复制
  - 0.0.0.0:80:3000
volumes:
  - grafana:/var/lib/grafana
depends_on:
  - influx
deploy:
  replicas: 1
  placement:
    constraints:
      - node.role == manage

cadvisor:

代码语言:txt
复制
image: google/cadviso
代码语言:txt
复制
hostname: '{{.Node.Hostname}}'
代码语言:txt
复制
command: -logtostderr -docker_only -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influx:8086
代码语言:txt
复制
volumes:
代码语言:txt
复制
  - /:/rootfs:ro
  - /var/run:/var/run:rw
  - /sys:/sys:ro
  - /var/lib/docker/:/var/lib/docker:ro
depends_on:
  - influx
deploy:
  mode: global

volumes:

influx:

代码语言:txt
复制
driver: local

grafana:

代码语言:txt
复制
driver: local
代码语言:txt
复制

下载docker-compose-monitor.yml

查看服务的部署情况

docker service ls

代码语言:txt
复制
[root@master ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE                    PORTS
qth4tssf2sm1        monitor_cadvisor    global              3/3                 google/cadvisor:latest   
p2vbxe7ic175        monitor_grafana     replicated          1/1                 grafana/grafana:latest   *:80->3000/tcp
von1rpeqq7vj        monitor_influx      replicated          1/1                 influxdb:latest  

到目前为止,服务已经部署完成了,三台机器各自部署一个cadvisor,在master节点部署了grafanainfluxdb

为cadvisor配置influxdb数据库

查看一下master机器上的服务

docker ps

代码语言:txt
复制
[root@master ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS               NAMES
55965fdf13a3        grafana/grafana:latest   "/run.sh"                3 hours ago         Up 3 hours          3000/tcp            monitor_grafana.1.l9uh0ov7ltk7q2yollmk4x1v9
0bf544c7d81c        google/cadvisor:latest   "/usr/bin/cadvisor -…"   3 hours ago         Up 3 hours          8080/tcp            monitor_cadvisor.138n5rwjz83y8goyzepp1cdo7.l53vufoivp0oe8tyy14nh0jof
3ce050f0483e        influxdb:latest          "/entrypoint.sh infl…"   3 hours ago         Up 3 hours          8086/tcp            monitor_influx.1.vraeh8ektium1j1jd27qvq1au
[root@master ~]# 

可以看到是符合预期的,接下来进一步查看cadvisor容器的日志

docker logs -f 0bf544c7d81c

代码语言:txt
复制
[root@master ~]# docker logs -f 0bf544c7d81c
W0209 09:32:15.730951       1 manager.go:349] Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory
E0209 09:33:15.783705       1 memory.go:94] failed to write stats to influxDb - {"error":"database not found: \"cadvisor\""}
E0209 09:34:15.818661       1 memory.go:94] failed to write stats to influxDb - {"error":"database not found: \"cadvisor\""}
E0209 09:35:16.009312       1 memory.go:94] failed to write stats to influxDb - {"error":"database not found: \"cadvisor\""}
E0209 09:36:16.027113       1 memory.go:94] failed to write stats to influxDb - {"error":"database not found: \"cadvisor\""}
E0209 09:37:16.107051       1 memory.go:94] failed to write stats to influxDb - {"error":"database not found: \"cadvisor\""}
E0209 09:38:16.215684       1 memory.go:94] failed to write stats to influxDb - {"error":"database not found: \"cadvisor\""}
E0209 09:39:16.305772       1 memory.go:94] failed to write stats to influxDb - {"error":"database not found: \"cadvisor\""}

可以看到现在一直是在报错的,因为目前的influx容器中没有cadvisor这样的数据库存在,接下来我们进入influx容器并创建对应的cadvisor数据库,在master机器上执行以下命令即可。

docker exec docker ps | grep -i influx | awk '{print $1}' influx -execute 'CREATE DATABASE cadvisor'

当然,也可以分步骤执行

  1. 找到influxdb的容器
  2. 进入到influxdb容器内并登陆influx
  3. 创建数据库

这里就不演示了。

配置grafana

到目前为止,数据已经在收集了,并且数据存储在influxdb中。接下来配置grafana将数据进行可视化。

因为docker-compose-monitor.yml文件内给grafna配置的端口是80,这里直接访问master机器的IP就可以访问到grafana,在浏览器打开192.168.1.60.

grafana

默认的帐号是admin

默认的密码是admin

首次登陆后会提示修改密码,新密码继续设置为admin也没关系。

登陆成功后开始设置数据源

配置数据源

  1. 打开左边菜单栏进入数据源配置页面
  2. 添加新的数据源,我这里是添加过了,所以会有一个influxdb的数据源显示。undefined
  3. 选择influxdb类型的数据源undefined
  4. 填写influxdb对应的信息,Name填写influx,因为待会要用到一个grafana模版,所以这里叫influx名字,URL填http://influx:8086,这个也不是固定的,本次docker-compose-monitor.yml文件内influxdb的容器名叫influx,端口开放出来的为8086(默认),所以这里填influx:8086undefined

到目前为止,数据源相关的内容已经配置完成了。

配置grafana视图模版

这里使用模版只是为了演示效果,如果模版的样式不太满意,可以研究下grafana自行调整。

  1. 首先打开grafana的dashboard市场下载模版https://grafana.com/grafana/dashboards/4637/reviewsundefined
  2. 选中dashboard菜单,选中import进行导入
  3. 打开dashboard就已经可以看到dashboard模版的内容了.undefined

总结

一个基本的Docker Swarm集群监控就搭建完成了

还有更高级的也许后面会更新一篇blog进行讲述.例如当某个值(CPU)达到某个阀值,发送钉钉或者slack消息进行告警

只要明白思路,实操基本上没有什么问题。

始发于 四颗咖啡豆 发布!

关注公众号->四颗咖啡豆 获取最新内容

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提
    • 前言
      • 整体思路
        • 演示环境
          • 初始化Docker Swarm
            • 在master机器上查看当前的node节点
              • 在Docker Swarm部署监控服务
                • 查看服务的部署情况
                  • 为cadvisor配置influxdb数据库
                    • 配置grafana
                      • 配置数据源
                      • 配置grafana视图模版
                    • 总结
                    相关产品与服务
                    容器镜像服务
                    容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档