当前位置: 首页 > Linux

部署dockerswarm集群监控

时间:2023-04-06 06:00:32 Linux

prerequisiteDocker前言现在DockerSwarm已经完全输给了K8S,但是现在K8S还是很复杂,比DockerSwarm更难上手。如果你是一个小规模的团队,需要容器编排,用DockerSwarm还是合适的。目前DockerSwarm有个问题没有解决。如果业务需要知道用户的请求IP,DockerSwarm无法满足要求。目前部署在DockerSwarm中的服务无法获取到用户请求的IP。具体可以看看这个ISSUE->Unabletoretrieveuser'sIPaddressindockerswarmmode。整体思路是使用Influxdb+Grafana+cadvisor作为一个整体,其中cadvisor负责数据采集,每个节点部署一个cadvisor服务,Influxdb负责数据存储,Grafana负责数据可视化。演示环境主机IPmaster(manager)192.168.1.60node1(worker)192.168.1.61node2(worker)192.168.1.62我是用master节点作为监控数据存储和可视化服务的节点作为演示,一般会配一个worker节点这样一份工作。InitializeDockerSwarm在master机器上初始化集群,运行dockerswarminit--advertise-addr{MASTER-IP}[root@master~]#dockerswarminit--advertise-addr192.168.1.60Swarminitialized:currentnode(138n5rwjz83y8goyzepp1cdo7)isnowamanager.Toaddaworkertothisswarm,runthefollowingcommand:dockerswarmjoin--tokenSWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j192.168.1.60:2377Toaddamanagertothisswarm,run'dockerswarmjoin-tokenmanager'并按照提示在node节点上运行提示命令``dockerswarmjoin--tokenSWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j192.168.1.60`节点初始化后会有一个集群迅速的,该命令只是示例,实际命令需要在集群初始化完成后根据实际情况执行。[root@node1~]#dockerswarmjoin--tokenSWMTKN-1-67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j192.168.1.60:2377这个节点作为一个worker加入了swarm。[root@node2~]#dockerswarm67je7chylnpyt0s4k1ee63rhxgh0qijiah9gadvcr7i6uab909-535nf6qu6v7b8dscc0plghr9j192.168.1.60:2377Thisnodejoinedaswarmasaworker.在master机器上查看当前的node节点``dockernodels``[root@master~]#dockernodelsIDHOSTNAMESTATUSAVAILABILITYMANAGERSTATUSENGINEVERSION138n5rwjz83y8goyzepp1cdo7*masterReadyActiveLeader18.09.8q03by75rqur63lx36cmordf11node1ReadyActive18.09.86shdf5ej4b5u7x877bg9nyjk3node2ReadyActive集群搭建到此为止,接下来就是在DockerSwarm中部署监控服务``dockerstackdeploy-citdocker-composeor.ymlmonitor``[root@master~]#dockerstackdeploy-cdocker-compose-monitor.ymlmonitorCreatingnetworkmonitor_defaultCreatingservicemonitor_influxCreatingservicemonitor_grafanaCreatingservicemonitor_cadvisordocker-compose-monitor.yml文件内容version:'3'services:influx:图像:influxdb卷:-流入:/var/lib/influxdb部署:副本:1放置:约束:-node.role==管理器grafana:图像:grafana/grafana端口:-0.0.0.0:80:3000卷:-grafana:/var/lib/grafanadepends_on:-influxdeploy:replicas:1placement:constraints:-node.role==managercadvisor:image:google/cadvisorhostname:'{{.Node.Hostname}}'命令:-logtostderr-docker_only-storage_driver=influxdb-storage_driver_db=cadvisor-storage_driver_host=influx:8086卷:-/:/rootfs:ro-/var/run:/var/run:rw-/sys:/sys:ro-/var/lib/docker/:/var/lib/docker:rodepends_on:-influxdeploy:mode:globalvolumes:influx:driver:localgrafana:driver:local下载docker-compose-monitor.yml查看服务部署情况``dockerservicels``[root@master~]#dockerservicelsIDNAMEMODEREPLICASIMAGEPORTSqth4tssf2sm1monitor_cadvisorglobal3/3google/cadvisor:latestp2vbxe7ic175monitor_grafanareplicated1/1grafana/grafana:latest*:80->3000/tcpvon1rpeqq7vjmonitor_influxreplicated1/1influxdb:latest,服务已经部署完成。三台机器各部署一个cadvisor,在master节点上部署grafana和influxdb。为cadvisor配置influxdb数据库,查看master机器上的服务``dockerps``[root@master~]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES55965fdf13a3grafana/grafana:latest"/run.sh"3hoursagoUp3hours3000/tcpmonitor_grafana.1.l9uh0ov7ltk7q2yollmk4x1v90bf544c7d81cgoogle/cadvisor:latest"/usr/bin/cadvisor-…"3hoursagoUp3hours8080/tcpmonitor_cadvisor.138n5rwjz83y8goyzepp1cdo7.l53vufoivp0oe8tyy14nh0jof3ce050f0483einfluxdb:latest"/entrypoint.shinfl..."3小时前Up3小时8086/tcpmonitor_influx.1.vraeh8ektium1j1jd27qvq1au[root@master~]#可以看出符合预期,再进一步查看日志cadvisor容器``dockerlogs-f0bf544c7d81c``[root@master~]#dockerlogs-f0bf544c7d81cW020909:32:15.7309511manager.go:349]无法为OOM检测配置源,禁用OOM事件:打开/dev/kmsg:没有这样的文件或目录E020909:33:15.7837051memory.go:94]无法将统计信息写入influxDb-{"error":"databasenotfound:\"cadvisor\""}E020909:34:15.8186611memory.go:94]失败将统计数据写入influxDb-{“错误”:“未找到数据库:\”cadvisor\“”}E020909:35:16.0093121memory.go:94]无法将统计数据写入influxDb-{“错误”:“数据库未找到找到:\"cadvisor\""}E020909:36:16.0271131memory.go:94]无法将统计信息写入influxDb-{"error":"找不到数据库:\"cadvisor\""}E020909:37:16.1070511memory.go:94]无法将统计数据写入influxDb-{"error":"databasenotfound:\"cadvisor\""}E020909:38:16.2156841memory.go:94]无法写入统计数据到influxDb-{“error”:“未找到数据库:\”cadvisor\“”}E020909:39:16.3057721memory.go:94]无法将统计信息写入influxDb-{“error”:“未找到数据库:\"cadvisor\""}可以看到现在一直报错,因为当前influx容器中没有cadvisor这个数据库。接下来我们进入influx容器,创建对应的cadvisor数据库。在master机器上执行如下命令``dockerexecdockerps|grep-i涌入|awk'{print$1}'influx-execute'CREATEDATABASEcadvisor'``当然也可以一步步执行,找到influxdb容器,进入influxdb容器,登录influx创建数据库,这里就不演示了。配置grafana到目前为止,数据正在收集并存储在influxdb中。接下来配置grafana来可视化数据。因为在docker-compose-monitor.yml文件中为grafna配置的端口是80,这里可以直接访问master机器的IP访问grafana,在浏览器中打开192.168.1.60。grafana默认账号是admin,默认密码是admin,第一次登录后会提示修改密码,继续设置新密码admin也没关系。登录成功后,开始设置数据源,配置数据源。打开左侧菜单栏,进入数据源配置页面,添加新的数据源。我这里添加了,所以会显示一个influxdb数据源。选择influxdb类型的数据源填写influxdb对应的信息,Name填写influx,因为后面要用到一个grafana模板,所以这里叫influxname,URL填写http://influx:8086,这个不是固定的,这次docker-compose-monitor.yml文件中influxdb容器的名字是influx,开放的端口是8086(默认),所以这里填写influx:8086。至此,数据源相关的内容已经配置完成。配置grafana视图模板这里使用的模板只是为了演示效果。如果对模板的样式不满意,可以研究grafana自己调整。首先打开grafana的dashboardmarket下载模板https://grafana.com/grafana/dashboards/4637/reviews选择dashboard菜单,选择import导入打开dashboard可以看到dashboard模板的内容。总结一个基本的DockerSwarm集群监控就完成了,更高级的可能会在后面的博客中更新。例如,当某个值(CPU)达到某个阈值时,发送钉钉或slack消息进行告警。只要理解了思路,实际操作起来基本没什么问题。来自四颗咖啡豆发表!关注公众号->【四颗咖啡豆】获取最新内容