持续继承与容器管理
内容:
DockerMaven插件的使用
持续集成工具Jenkins的安装与使用
容器管理工具Rancher的安装与使用
时间序列数据库influxDB的安装与使用
容器监控工具cAdvisor的安装与使用
图表工具Grafana的使用
1 DockerMaven插件
微服务部署有两种方法:
- 手动部署,将源码打成jar包或者war包发布;对于数量众多的微服务,效率低而且容易出错
- 通过Maben插件自动部署
Maven插件自动部署步骤:
-
修改宿主机的docker配置,让其可以远程访问
centos配置: vi /usr/lib/systemd/system/docker.service Ubuntu配置: vim /lib/systemd/system/docker.service
其中ExecStart=后添加配置 ‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock
注:若上面修改后重启服务失败,则执行下面操作:docker 1.12 版本之后, 建议在 docker 的 js 配置文件中配置
vi /etc/docker/daemon.json
{
"hosts": [
"tcp://0.0.0.0:2375",
"unix:///var/run/docker.sock"
]
}
- 刷新配置,重启服务
systemctl daemon‐reload
systemctl restart docker
docker start registry
- 在工程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.66.128:5000/${project.artifactId}:${project.version}</imageName>
<baseImage>jdk1.8</baseImage>
<entryPoint>["java", "‐jar", "/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include>
</resource>
</resources>
<dockerHost>http://192.168.66.128:2375</dockerHost>
</configuration>
</plugin>
</plugins>
</build>
以上配置会自动生成Dockerfile
FROM jdk1.8
ADD app.jar /
ENTRYPOINT ["java","‐jar","/app.jar"]
- 在idea的命令行下执行以下命令
mvn install
- 进入到要创建镜像的工程目录,输入以下命令,进行打包和上传镜像(在idea中可以直接将工程目录拖向Terminal中)
mvn docker:build ‐DpushImage
- 进入宿主机,查看镜像
docker images
通过浏览器访问 http://192.168.66.128:5000/v2/_catalog
{"repositories":["tensquare_base"]}
- 启动容器
docker run ‐di ‐‐name=base ‐p 9001:9001 192.168.66.128:5000/tensquare_base:1.0‐SNAPSHOT
2 持续集成工具-Jenkins
持续集成 Continuous integration, 简称CI
持续集成具有的特点:
- 它是一个自动化的周期性的集成测试过程,从检出代码、编译构建、运行测试、结果 记录、测试统计等都是自动完成的,无需人工干预;
- 需要有专门的集成服务器来执行集成构建;
- 需要有代码托管工具支持,我们下一小节将介绍Git以及可视化界面Gogs的使用
持续集成的作用:
- 保证团队开发人员提交代码的质量,减轻了软件发布时的压力;
- 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减少重复 过程以节省时间、费用和工作量;
Jenkins
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安装
jdk安装
- 将jdk-8u171-linux-x64.rpm上传至服务器(虚拟机)
- 执行安装命令
rpm ‐ivh jdk‐8u171‐linux‐x64.rpm
- RPM方式安装JDK,其根目录为:/usr/java/jdk1.8.0_171-amd64
yum安装java查看java路径方法
[root@bogon conf]# which java
/usr/bin/java
[root@bogon conf]# ls -lst /usr/bin/java
0 lrwxrwxrwx. 1 root root 22 5月 25 20:42 /usr/bin/java -> /etc/alternatives/java
[root@bogon conf]# ls -lst /etc/alternatives/java
0 lrwxrwxrwx. 1 root root 73 5月 25 20:42 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre/bin/java
Jenkins安装与启动
- 下载jenkins(两种方法)
1.wget https://pkg.jenkins.io/redhat/jenkins‐2.83‐1.1.noarch.rpm
2.直接将jenkins-2.83-1.1.noarch.rpm长传至服务器
- 安装jenkins
rpm ‐ivh jenkins‐2.83‐1.1.noarch.rpm
- 配置jenkins
vi /etc/sysconfig/jenkins
- 启动服务
systemctl start jenkins
- 访问链接 http://192.168.184.135:8888
从/var/lib/jenkins/secrets/initialAdminPassword中获取初始密码串
jenkins第一次登陆账号:admin 密码还是/var/lib/jenkins/secrets/initialAdminPassword中密码
创建新用户并添加管理员账户
账号:composer 密码 :composer
- 安装插件
Jenkins插件安装
系统管理-》管理插件-》可选插件-》点击安装即可
安装maven插件
在可选插件中选择Maven Integration直接安装
全局工具配置
安装Maven与本地仓库
-
上传maven压缩包至服务器
-
解压:
tar zxvf apache‐maven‐3.5.4‐bin.tar.gz
-
移动目录
mv apache‐maven‐3.5.4 /usr/local/maven
-
编辑setting.xml配置文件 vi /usr/local/maven/conf/settings.xml ,配置本地仓 库目录,内容如下
<localRepository>/usr/local/repository</localRepository>
- 将开发环境的本地仓库上传至服务器(虚拟机)并移动到/usr/local/repository
mv reponsitory_boot /usr/local/repository
上传本地开发环境后,之后打包不必重新下载,缩短打包时间
全局工具配置
系统管理-》全局工具配置
- JDK配置
- Git
- Maven
代码上传Git服务器
Gogs搭建配置
Gogs 是一款极易搭建的自助 Git 服务;Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语 言开发使得 Gogs 能够通过独立的二进制分发,并且支持 Go 语言支持的 所有平台,包 括 Linux、Mac OS X、Windows 以及 ARM 平台。
- 下载镜像
docker pull gogs/gogs
- 创建容器
docker run ‐di ‐‐name=gogs ‐p 10022:22 ‐p 3000:3000 ‐v /var/gogsdata:/data gogs/gogs
- 安装
访问192.168.66.128:3000,首次访问会进入安装页面,选择数据类型,最简单的是选择SQLite3,规模达的可以选择MySQL
立即安装后,可以进入主界面然后注册用户,默认第一个注册的用户id=1的用户为管理员
账号composer
- 创建仓库
提交代码
使用idea先创建本地仓库,创建后在工程右键Git->repository->remotes添加地址
返回后工程右键->Git->Add 添加到仓库
Git --> Commit Directory…
Git --> Repository --> Push …
输入git账号密码即可
任务的创建与执行
- 回到首页,点击新建按钮 .如下图,输入名称,选择创建一个Maven项目,点击OK
- 源码管理 选择Git
- Build
将cloud_demo中的consumer_demo进行持续集成,需要填写consumer_demo下的pom路径
命令:用于清除、打包,构建docker镜像
clean package docker:build ‐DpushImage
最后点击“保存”按钮
- 执行任务
s下的白色小球表示没有执行过,w下的太阳表示没有错误发生的次数,当错误时,太阳会变成阴天等图标,点击右侧的绿色三角执行任务
最下角出现执行状态的表示如下图
点进去发现会有一些状态输出
3 容器管理工具Rancher
Rancher是一个开源的企业级全栈化容器部署及管理平台。Rancher为容器提供一揽 子基础架构服务:CNI兼容的网络服务、存储服务、主机管理、负载均衡、防护墙…… Rancher让上述服务跨越公有云、私有云、虚拟机、物理机环境运行,真正实现一键式应 用部署和管理
Rancher安装
- 下载镜像
docker pull rancher/server
- 创建Rancher容器
docker run ‐di ‐‐name=rancher ‐p 9090:8080 rancher/server
- 在浏览器输入地址: 192.168.66.128:9090 访问欢迎页
Rancher初始化
添加环境
Rancher 支持将资源分组归属到多个环境。 每个环境具有自己独立的基础架构资源及服 务,并由一个或多个用户、团队或组织所管理
可以创建独立的“开发”、“测试”及“生产”环境以确保环境之间的安全隔离,将“开 发”环境的访问权限赋予全部人员,但限制“生产”环境的访问权限给一个小的团队。
-
选择“Default -->环境管理” 菜单
-
可以添加测试环境和生产环境
-
点击logo右侧菜单栏可以切换环境
添加主机
-
选择基础架构–>主机 菜单,点击添加主机
-
拷贝脚本
-
在服务器(虚拟机)运行脚本
-
点击关闭按钮后,会看到界面中显示此主机。我们可以很方便地管理主机的每个容器的开启和关闭
添加应用
应用即服务的一个分组,服务相当于docker中容器
-
点击应用–>全部(或用户) ,点击“添加应用”按钮
-
填写名称和描述
-
点击“创建”按钮,列表中增加了新增的应用
应用部署
MySQL部署
镜像:centos/mysql-57-centos7
增加数据库服务
添加名称、描述、选择镜像、端口映射和环境变量等参数
点击创建按钮,完成创建 上述操作相当于以下docker命令
docker run ‐di ‐‐name mysql ‐p 3306:3306 ‐e MYSQL_ROOT_PASSWORD=123456 centos/mysql‐57‐centos7
完成后服务列表中存在并且状态为激活 使用SQLyog测试链接,执行建表语句
RabbitMQ部署
镜像:rabbitmq:management 端口映射5671 5672 4369 15671 15672 25672
添加服务-》和mysql部署相似,添加名称、端口映射等
设置完毕后 浏览器访问 http://192.168.66.128:15672/
Redis部署
进入应用,点击添加服务,名称redis ,镜像redis ,端口映射6379
创建后使用客户端测试链接 redis‐cli ‐h 192.168.184.144
微服务部署
- 搭建私有仓库
启动私有仓库容器
docker run ‐di ‐‐name=registry ‐p 5000:5000 registry
打开浏览器 输入地址http://192.168.66.128:5000/v2/_catalog看到 {“repositories”: []} 表示私有仓库搭建成功并且内容为空
修改daemon.json 添加信任地址
vi /etc/docker/daemon.json
添加内容,保存并退出
{"insecure‐registries":["192.168.66.128:5000"]}
- 修改docker配置,允许远程访问
vi /lib/systemd/system/docker.service
其中ExecStart=后添加配置 ‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock
0.0.0.0表示任意ip地址可访问
修改后刷新配置,重启服务
systemctl daemon‐reload
systemctl restart docker
docker start registry
- 修改微服务工程,添加DockerMaven插件
修改后在idea命令行执行 mvn clean package docker:build -DpushImage
创建镜像
-
连接mysql数据库,执行建库脚本
-
添加服务base-service 镜像192.168.66.128:5000/consumer_demo:1.0SNAPSHOT 端口映射9001
-
测试微服务 浏览器打开网址 http://192.168.66.128:9001/test (这个地址是微服务模块的请求路径) 看是否可以数据
扩容与缩容
扩容
-
在Rancher将创建的base-service(基础信息微服务)删除
-
重新创建base-service ,不设置端口映射(防止端口冲突)
-
在选择菜单API -->WebHooks ,点击“添加接收器”按钮
-
填写名称等信息,选择要扩容的服务,点击创建按钮
-
接收器列表中新增了一条记录 ,点击触发地址将地址复制到剪切板
-
使用postman测试,使用Post访问触发地址
-
测试后,发现容器发生变化
缩容
操作步骤和扩容相似
-
添加接收器 ,选择缩容,步长为1表示每次递减1个 ,点击创建
-
创建成功后,复制触发地址
-
使用postman测试
4 influxDB
influxDB是一个分布式序列数据库,cAdvisor仅仅显示实时信息,但是不存储监视数据。时序数据库用于存储cAdvisor组件所提供的监控信息,以便显示除实时信息之外的时序数据。
安装
- 下载镜像
docker pull tutum/influxdb
- 创建容器
docker run ‐di \
‐p 8083:8083 \
‐p 8086:8086 \
‐‐expose 8090 \
‐‐expose 8099 \
‐‐name influxsrv \
tutum/influxdb
端口概述: 8083端口:web访问端口 8086:数据写入端
打开浏览器 http://192.168.66.128:8083/
常用操作
创建数据库
创建数据库回车 CREATE DATABASE "cadvisor"
查看数据库SHOW DATABASES
创建用户
创建用户 CREATE USER "cadvisor" WITH PASSWORD 'cadvisor' WITH ALL PRIVILEGES
查看用户 SHOW USERS
用户授权
grant all privileges on cadvisor to cadvisor #所有权限
grant WRITE on cadvisor to cadvisor #写权限
grant READ on cadvisor to cadvisor #读权限
查看采集的数据
切换到cadvisor数据库,使用以下命令查看采集的数据 SHOW MEASUREMENTS
采集系统的数据,我们需要使用Cadvisor软件来实现
5 cAdvisor
Google开源的用于监控基础设施应用的工具,它是一个强大的监控工具,不需要任 何配置就可以通过运行在Docker主机上的容器来监控Docker容器,而且可以监控Docker主机。
安装
- 下载镜像
docker pull google/cadvisor
- 创建容器
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
–volume 为目录映射
–publish 为端口映射
–link 链接到另外一个容器
-storage_driver_db 数据库名称
web访问地址 192.168.66.128:8080/containers/
性能指标含义 https://blog.csdn.net/ZHANG_H_A/article/details/53097084
查看influxDB,发现已经有很多数据被采集进去
6 Grafana
Grafana是一个可视化面板(Dashboard),有着非常漂亮的图表和布局展示,功 能齐全的度量仪表盘和图形编辑器。支持Graphite、zabbix、InfluxDB、Prometheus和 OpenTSDB作为数据源。
安装
- 下载镜像
docker pull grafana/grafana
- 创建容器
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
- 访问
http://192.168.184.144:3001
用户名密码均为admin
-
登录后提示修改密码
-
修改后进入主界面
Grafana使用
添加数据源
-
设置 DataSource
-
添加Data Source
-
设置名称,指定类型‘、地址以及连接的数据库名用户名密码
-
添加成功
添加仪表盘
-
选择Dashboards --Manager
-
点击添加
-
选择第一个Graph,出现下面图表的界面 ,点击Panel Title 选择Edit (编辑)
-
定义标题等基础信息
-
设置查询的信息为内存,指定容器名称
可选指定容器名称等操作如下
-
指定y轴的单位 为M
-
保存填写名称
预警通知设置
-
选择菜单 alerting–> Notification channels
-
Add添加
这个钩子地址是之前对base微服务扩容的地址
- 点击SendTest 测试 观察基础微服务是否增加容器
仪表盘预警设置
-
进入之前设置的仪表盘
-
点击create alert
设置警戒线,如上图红线
- 选择通知
设置为发送的预警通知,和发送的消息,保存更改