学习目标:
掌握DockerMaven插件的使用
掌握持续集成工具Jenkins的安装与使用
掌握容器管理工具Rancher的安装与使用
掌握时间序列数据库influxDB的安装与使用
掌握容器监控工具cAdvisor的安装与使用掌握图表工具Grafana的使用
1DockerMaven插件
微服务部署有两种方法:
(1)手动部署:首先基于源码打包生成jar包(或war包),将jar包(或war包)上传至虚拟机并拷贝至JDK容器。
(2)通过Maven插件自动部署。
对于数量众多的微服务,手动部署无疑是非常麻烦的做法,并且容易出错。所以我们这 里学习如何自动部署,这也是企业实际开发中经常使用的方法。
Maven插件自动部署步骤:
(1)修改宿主机的docker配置,让其可以远程访问
vi /lib/systemd/system/docker.service
- 1
其中ExecStart=后添加配置‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock
修改后如下:
(2)刷新配置,重启服务
systemctl daemon‐reload
systemctl restart docke
r docker start registry
- 1
- 2
- 3
(3)在工程pom.xml 增加配置
<build>
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring‐boot‐maven‐plugin</artifactId>
</plugin>
<!‐‐ docker 的 maven 插 件 , 官 网 : https://github.com/spotify/docker‐maven‐plugin ‐‐>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker‐maven‐plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>192.168.184.141:5000/
p
r
o
j
e
c
t
.
a
r
t
i
f
a
c
t
I
d
:
{project.artifactId}:
project.artifactId:{project.version}
</imageName>
<baseImage>jdk1.8</baseImage>
<entryPoint>[“java”, “‐jar”, "/KaTeX parse error: Expected 'EOF', got '&' at position 32: …inalName}.jar"]&̲lt;/entryPoint&…{project.build.directory}
</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
<dockerHost>http://192.168.184.141:2375</dockerHost>
</configuration>
</plugin>
</plugins>
</build>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
以上配置会自动生成Dockerfile
FROM jdk1.8
ADD app.jar /
ENTRYPOINT ["java","‐jar","/app.jar"]
- 1
- 2
- 3
(5)在windows的命令提示符下,进入工程tensquare_parent所在的目录
mvn install
- 1
进入tensquare_base 所在的目录,输入以下命令,进行打包和上传镜像
mvn docker:build ‐DpushImage
- 1
执行后,会有如下输出,代码正在上传
(6)进入宿主机 , 查看镜像
docker images
- 1
输出如上内容,表示微服务已经做成镜像
浏览器访问 http://192.168.184.141:5000/v2/_catalog ,输出
{"repositories":["tensquare_base"]}
- 1
浏览器访问 http://192.168.184.141:5000/v2/_catalog ,输出
{"repositories":["tensquare_base"]}
- 1
(7)启动容器:
docker run ‐di ‐‐name=base ‐p 9001:9001 192.168.184.141:5000/tensquare_base:1.0‐SNAPSHOT
- 1
2持续集成工具-Jenkins
2.1什么是持续集成
持续集成 Continuous integration ,简称CI
随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件 开发的质量已经慢慢成为开发过程中不可回避的问题。尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也 显得尤其的重要。
持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成。而每次的集成都是通过自动化的构建 来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队能够更快的开 发内聚的软件。
持续集成具有的特点:
它是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试、结果记录、测试统计等都是自动完成的,无需人工干预;
需要有专门的集成服务器来执行集成构建;
需要有代码托管工具支持,我们下一小节将介绍Git以及可视化界面Gogs的使用持续集成的作用:
保证团队开发人员提交代码的质量,减轻了软件发布时的压力;
持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
2.2Jenkins简介
Jenkins,原名Hudson,2011年改为现在的名字,它 是一个开源的实现持续集成的软件工具。官方网站:http://jenkins-ci.org/。
Jenkins 能实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。
特点:
易安装:仅仅一个 java -jar jenkins.war,从官网下载该文件后,直接运行,无需额外的安装,更无需安装数据库;
易配置:提供友好的GUI配置界面;
变更支持:Jenkins能从代码仓库(Subversion/CVS)中获取并产生代码更新列表并输出到编译输出信息中;
支持永久链接:用户是通过web来访问Jenkins的,而这些web页面的链接地址都是永久链接地址,因此,你可以在各种文档中直接使用该链接;
集成E-Mail/RSS/IM:当完成一次集成时,可通过这些工具实时告诉你集成结果(据我所知,构建一次集成需要花费一定时间,有了这个功能,你就可以在等待结果过程 中,干别的事情);
JUnit/TestNG测试报告:也就是用以图表等形式提供详细的测试报表功能;
支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成;
文件指纹信息:Jenkins会保存哪次集成构建产生了哪些jars文件,哪一次集成构建使用了哪个版本的jars文件等构建记录;
支持第三方插件:使得 Jenkins 变得越来越强大
2.3Jenkins安装
2.3.1JDK安装
(1)将jdk-8u171-linux-x64.rpm上传至服务器(虚拟机)
(2)执行安装命令
rpm ‐ivh jdk‐8u171‐linux‐x64.rpm
- 1
RPM方式安装JDK,其根目录为:/usr/java/jdk1.8.0_171-amd64
2.3.2Jenkins安装与启动
(1)下载jenkins
wget https://pkg.jenkins.io/redhat/jenkins‐2.83‐1.1.noarch.rpm
- 1
或将jenkins-2.83-1.1.noarch.rpm上传至服务器
(2)安装jenkins
rpm ‐ivh jenkins‐2.83‐1.1.noarch.rpm
- 1
(3)配置jenkins
vi /etc/sysconfig/jenkins
- 1
修改用户和端口
JENKINS_USER="root"
JENKINS_PORT="8888"
- 1
- 2
(4)启动服务
systemctl start jenkins
- 1
(5)访问链接 http://192.168.184.135:8888
从/var/lib/jenkins/secrets/initialAdminPassword中获取初始密码串
(6)安装插件
(7)新建用户
完成安装进入主界面
2.4Jenkins插件安装
我们以安装maven插件为例,演示插件的安装
(1)点击左侧的“系统管理”菜单 ,然后点击
(2)选择“可选插件”选项卡,搜索maven,在列表中选择Maven Integration ,点击“直接安装”按钮
看到如下图时,表示已经完成
2.5全局工具配置
2.5.1安装Maven与本地仓库
(1)将Maven压缩包上传至服务器(虚拟机)
(2)解压
tar zxvf apache‐maven‐3.5.4‐bin.tar.gz
- 1
(3)移动目录
mv apache‐maven‐3.5.4 /usr/local/maven
- 1
(4)编辑setting.xml配置文件库vi /usr/local/maven/conf/settings.xml目录,内容如下
<localRepository>/usr/local/repository</localRepository>
- 1
将开发环境的本地仓库上传至服务器(虚拟机)并移动到/usr/local/repository
mv reponsitory_boot /usr/local/repository
- 1
执行此步是为了以后在打包的时候不必重新下载,缩短打包的时间。
2.5.2全局工具配置
选择系统管理,全局工具配置
(1)JDK配置
设置javahome为 /usr/java/jdk1.8.0_171-amd64
(2)Git配置 (本地已经安装了Git软件)
(3)Maven配置
2.6代码上传至Git服务器
2.6.1Gogs搭建与配置
Gogs 是一款极易搭建的自助 Git 服务。
Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包括 Linux、Mac OS X、Windows 以及 ARM 平台。
地址:https://gitee.com/Unknown/gogs
(1)下载镜像
docker pull gogs/gogs
- 1
(2)创建容器
docker run ‐di ‐‐name=gogs ‐p 10022:22 ‐p 3000:3000 ‐v /var/gogsdata:/data gogs/gogs
- 1
(3)假设我的centos虚拟机IP为192.168.184.141 在地址栏输
入http://192.168.184.141:3000 会进入首次运行安装程序页面,我们可以选择一种数据库作为gogs数据的存储,最简单的是选择SQLite3。如果对于规模较大的公司,可以选择MySQL
点击“立即安装”
这里的域名要设置为centos的IP地址,安装后显示主界面
(4)注册
(5)登录
(6)创建仓库
2.6.2提交代码
步骤:
(1)在本地安装git(Windows版本)
(2)在IDEA中选择菜单 : File – settings , 在窗口中选择Version Control – Git
(3)选择菜单VCS --> Enable Version Control Integration…
选择Git
(4)设置远程地址: 右键点击工程选择菜单 Git --> Repository -->Remotes…
(5)右键点击工程选择菜单 Git --> Add
(6)右键点击工程选择菜单 Git --> Commit Directory…
(7)右键点击工程选择菜单 Git --> Repository --> Push …
2.7任务的创建与执行
(1)回到首页,点击新建按钮 .如下图,输入名称,选择创建一个Maven项目,点击OK
(2)源码管理,选择Git
(3)Build
命令:
clean package docker:build ‐DpushImage
- 1
用于清除、打包,构建docker镜像最后点击“保存”按钮
(4)执行任务
3容器管理工具Rancher
3.1什么是Rancher
Rancher是一个开源的企业级全栈化容器部署及管理平台。Rancher为容器提供一揽子基础架构服务:CNI兼容的网络服务、存储服务、主机管理、负载均衡、防护墙…… Rancher让上述服务跨越公有云、私有云、虚拟机、物理机环境运行,真正实现一键式应用部署和管理。
https://www.cnrancher.com/
3.2Rancher安装
(1)下载Rancher 镜像
docker pull rancher/server
- 1
(2)创建Rancher容器
docker run ‐di ‐‐name=rancher ‐p 9090:8080 rancher/server
- 1
(3)在浏览器输入地址: http://192.168.184.136:9090 即可看到高端大气的欢迎页
点击Got It 进入主界面
(4)切换至中文界面
点击右下角的English 在弹出菜单中选择中文
切换后我们就可以看到亲切的中文界面啦~
3.3Rancher初始化
3.3.1添加环境
Rancher 支持将资源分组归属到多个环境。 每个环境具有自己独立的基础架构资源及服务,并由一个或多个用户、团队或组织所管理。
例如,您可以创建独立的“开发”、“测试”及“生产”环境以确保环境之间的安全隔离,将“开 发”环境的访问权限赋予全部人员,但限制“生产”环境的访问权限给一个小的团队。
(1)选择“Default -->环境管理” 菜单
(2)填写名称,点击“创建”按钮
(3)按照上述步骤,添加十次方测试环境和生产环境
(4)你可以通过点击logo右侧的菜单在各种环境下切换
3.3.2添加主机
(1)选择基础架构–>主机 菜单,点击添加主机
(2)拷贝脚本
(3)在服务器(虚拟机)上运行脚本
(4)点击关闭按钮后,会看到界面中显示此主机。我们可以很方便地管理主机的每个容器的开启和关闭
3.3.3添加应用
点击应用–>全部(或用户) ,点击“添加应用”按钮
填写名称和描述
点击“创建”按钮,列表中增加了新增的应用
3.4应用部署
3.4.1MySQL部署
镜像:centos/mysql-57-centos7 增加数据库服务
注意:添加环境变量 MYSQL_ROOT_PASSWORD=123456
点击创建按钮,完成创建 上述操作相当于以下docker命令
docker run ‐di ‐‐name mysql ‐p 3306:3306 ‐e MYSQL_ROOT_PASSWORD=123456 centos/mysql‐57‐centos7
- 1
完成后服务列表中存在并且状态为激活 使用SQLyog测试链接,执行建表语句
3.4.2RabbitMQ部署
镜像:rabbitmq:management 端口映射5671 5672 4369 15671 15672 25672
浏览器访问 http://192.168.184.136:15672/
3.4.3Redis部署
进入应用,点击添加服务,名称redis ,镜像redis ,端口映射6379
创建后使用客户端测试链接
redis‐cli ‐h 192.168.184.144
- 1
测试成功
3.4.4微服务部署
(1)搭建私有仓库启动私有仓库容器
docker run ‐di ‐‐name=registry ‐p 5000:5000 registry
- 1
打开浏览器 输入地址http://192.168.184.144:5000/v2/_catalog看到{“repositories”:[]}表示私有仓库搭建成功并且内容为空
修改daemon.json
vi /etc/docker/daemon.json
- 1
添加以下内容,保存退出。
{"insecure‐registries":["192.168.184.144:5000"]}
- 1
(2)修改docker配置,允许远程访问
vi /lib/systemd/system/docker.service
- 1
其中ExecStart=后添加配置
修改后刷新配置‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock,冲洗服务
systemctl daemon‐reload
systemctl restart docker
docker start registry
- 1
- 2
- 3
(3)修改微服务工程,添加DockerMaven插件
(4)连接mysql数据库,执行建库脚本
(5)添加服务base-service 镜像192.168.184.144:5000/tensquare_base:1.0- SNAPSHOT 端口映射9001
(6)测试微服务 浏览器打开网址 http://192.168.184.144:9001/label 看是否可以看到标签列表
3.6扩容与缩容
3.6.1扩容
(1)在Rancher将创建的base-service(基础信息微服务)删除
(2)重新创建base-service ,不设置端口映射
(3)在选择菜单API -->WebHooks ,点击“添加接收器”按钮
(4)填写名称等信息,选择要扩容的服务,点击创建按钮
(5)接收器列表中新增了一条记录 ,点击触发地址将地址复制到剪切板
(6)使用postman测试:
测试后,发现容器由原来的1个变为了3个
3.6.2缩容
刚才我们实现了扩容,那么如何减少容器数量呢?我们来试试如何缩容
(1)添加接收器 ,选择缩容,步长为1表示每次递减1个 ,点击创建按钮
(2)创建成功后,复制触发地址
(3)使用postman测试
4influxDB
4.1什么是influxDB
influxDB是一个分布式时间序列数据库。cAdvisor仅仅显示实时信息,但是不存储 监视数据。因此,我们需要提供时序数据库用于存储cAdvisor组件所提供的监控信息, 以便显示除实时信息之外的时序数据。
4.2influxDB安装
(1)下载镜像
docker pull tutum/influxdb
- 1
(2)创建容器
docker run ‐di \
‐p 8083:8083 \
‐p 8086:8086 \
‐‐expose 8090 \
‐‐expose 8099 \
‐‐name influxsrv \ tutum/influxdb
- 1
- 2
- 3
- 4
- 5
- 6
端口概述: 8083端口:web访问端口 8086:数据写入端口
打开浏览器 http://192.168.184.144:8083/
4.3influxDB常用操作
4.3.1创建数据库
CREATE DATABASE "cadvisor"
- 1
回车创建数据库
SHOW DATABASES
- 1
查看数据库
4.3.2创建用户并授权
创建用户
CREATE USER "cadvisor" WITH PASSWORD 'cadvisor' WITH ALL PRIVILEGES
- 1
查看用户
SHOW USRES
- 1
用户授权
grant all privileges on cadvisor to cadvisor
grant WRITE on cadvisor to cadvisor
grant READ on cadvisor to cadvisor
- 1
- 2
- 3
4.3.3查看采集的数据
切换到cadvisor数据库,使用以下命令查看采集的数据
SHOW MEASUREMENTS
- 1
现在我们还没有数据,如果想采集系统的数据,我们需要使用Cadvisor软件来实现
5cAdvisor
5.1什么是cAdvisor
Google开源的用于监控基础设施应用的工具,它是一个强大的监控工具,不需要任何配置就可以通过运行在Docker主机上的容器来监控Docker容器,而且可以监控Docker 主机。更多详细操作和配置选项可以查看Github上的cAdvisor项目文档。
5.2cAdvisor安装
(1)下载镜像
docker pull google/cadvisor
- 1
(2)创建容器
docker run ‐‐volume=/:/rootfs:ro ‐‐volume=/var/run:/var/run:rw ‐‐ volume=/sys:/sys:ro ‐‐volume=/var/lib/docker/:/var/lib/docker:ro ‐‐ publish=8080:8080 ‐‐detach=true ‐‐link influxsrv:influxsrv ‐‐name=cadvisor google/cadvisor ‐storage_driver=influxdb ‐storage_driver_db=cadvisor ‐ storage_driver_host=influxsrv:8086
- 1
WEB前端访问地址http://192.168.184.144:8080/containers/
性能指标含义参照如下地址https://blog.youkuaiyun.com/ZHANG_H_A/article/details/53097084 再次查看influxDB,发现已经有很多数据被采集进去了。
6Grafana
6.1什么是Grafana
Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功能齐全的度量仪表盘和图形编辑器。支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB作为数据源。
Grafana主要特性:灵活丰富的图形化选项;可以混合多种风格;支持白天和夜间模式; 多个数据源。
6.2Grafana安装
(1)下载镜像
docker pull grafana/grafana
- 1
(2)创建容器
docker run ‐d ‐p 3001:3000 ‐e INFLUXDB_HOST=influxsrv ‐e INFLUXDB_PORT=8086 ‐e INFLUXDB_NAME=cadvisor ‐e INFLUXDB_USER=cadvisor ‐e INFLUXDB_PASS=cadvisor ‐‐link influxsrv:influxsrv ‐‐name grafana grafana/grafana
- 1
(3)访问
http://192.168.184.144:3001
- 1
用户名密码均为admin
(4)登录后提示你修改密码
(5)之后进入主页面
6.3Grafana的使用
6.3.1添加数据源
(1)点击设置,DataSource
(2)点击添加data source
(3)为数据源起个名称,指定类型、地址、以及连接的数据库名、用户名和密码
点击保存。数据源建立成功
6.3.2添加仪表盘
(1)选择Dashboards --Manager
(2)点击“添加”按钮
(3)点击Graph 图标
(4)出现下面图表的界面 ,点击Panel Title 选择Edit (编辑)
(5)定义标题等基础信息
(6)设置查询的信息为内存,指定容器名称
(7)指定y轴的单位 为M
填写名称
6.4.3预警通知设置
(1)选择菜单 alerting–> Notification channels
(2)点击Add channel 按钮
(3)填写名称,选择类型为webhook ,填写钩子地址
这个钩子地址是之前对base微服务扩容的地址
(4)点击SendTest 测试 观察基础微服务是否增加容器
(5)点击save保存
(6)按照同样的方法添加缩容地址
6.4.4仪表盘预警设置
(1)再次打开刚刚编辑的仪表盘
(2)点击 Create Alert
设置预警线
(3)选择通知
保存更改
</div>
<link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-095d4a0b23.css" rel="stylesheet">
</div>