JavaEE进阶——持续集成和容器化管理

持续继承与容器管理

内容:

DockerMaven插件的使用

持续集成工具Jenkins的安装与使用

容器管理工具Rancher的安装与使用

时间序列数据库influxDB的安装与使用

容器监控工具cAdvisor的安装与使用

图表工具Grafana的使用

1 DockerMaven插件

微服务部署有两种方法:

  1. 手动部署,将源码打成jar包或者war包发布;对于数量众多的微服务,效率低而且容易出错
  2. 通过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
    在这里插入图片描述

设置警戒线,如上图红线

  • 选择通知
    在这里插入图片描述

设置为发送的预警通知,和发送的消息,保存更改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值