docker微服务部署之:6、Rancher管理部署微服务html
Rancher有两个特点用起来很方便,那就是扩容和缩容。java
为了能直观的查看效果,须要修改下demo_article项目的代码。web
修改demo_article项目中ArticleController中的三处代码:docker
1.注入HttpServletRequest;2在findAll()方法的message参数后面加上request.getLocalAddr(),用于显示从调用的是哪一个ip的容器的服务;3.注释掉pom中的instance-id浏览器
@Autowired private ArticleService articleService; @Autowired private HttpServletRequest request; @RequestMapping(method = RequestMethod.GET) public Result findAll(){ return new Result(true, "查询成功"+request.getLocalAddr(), articleService.findAll()); }
instance: prefer-ip-address: true # instance-id: article.com #若是须要在eureka注册多个服务,不能写死instance-id
修改完成以后,在Idea中,经过DockerMaven插件,从新打包并部署article镜像。bash
点击Idea界面左小角的Terminal,输入cd demo_article,进入demo_article项目下,再输入mvn clean package docker:build,从新将demo_article打成java包,并构建article镜像,并上传到docker本地仓库(192.168.31.181)中app
在docker中,查看article镜像,能够看到article镜像在10秒前发生了变化,表示article镜像更新成功。负载均衡
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE article latest c92e406bc72a 10 seconds ago 651MB
...
在浏览器输入http://192.168.31.181:8080,进入rancher管理界面,而后在顶部导航栏中选择test环境,再点击顶部导航栏中的应用—所有,在点击进入microservice应用内:微服务
以须要扩容article为例。post
扩容article服务,简单理解就是同一个article服务,要复制并运行多个article服务。那么问题来了,运行的article服务,都是9001端口,而一个容器内,甚至一个系统内只有一个9001端口,这明显是有问题的。因此,须要把该article服务删除点,修改成不指定端口。
删除article服务,点击article服务那行最右边竖着的三点,选择删除便可。
删除以后,article服务就没了,此时咱们须要再建立一个没有指定端口的article服务。除不指定端口外,其余都同样。
点击右上角的添加服务,配置图中红色框中的四处外,而后滚动到页面底部,点击建立
注意下图中红色框中的部分,端口号9001已经没了。
在浏览器中访问article服务,看看咱们前面demo_article打包并构建后的镜像是否已经更新。因为没了端口,因此咱们不能再经过http://192.168.31.181:9001/article访问,而是只能经过zuul网关去访问,也就是http://192.168.31.181:8888/myarticle/article。可能会500错误,因为发布article以后,rancher容器须要一个解析的过程。耐心等待大概一到两分钟,再刷新,便可看到访问成功。(若是仍是访问不成功,可查看zuul、article等服务的运行日志,查看是否有错误)。
能够看到界面返回的结果中有查询成功,而后跟了一个ip地址:10.42.113.8,该ip地址是哪里来的呢?可在microservice应用列表管理界面中,点击article,打开article服务的详情界面,能够看到10.42.113.8,即为刚刚建立的没有带端口的article服务的ip地址。以下图所示。
仍是以article服务为例。扩容前,先看看microservice应用列表管理界面中的全部服务。能够看到只有4个服务,其中article服务只有一个,并且没有指定端口号。
再来看看eureka注册中心欢迎页中,注册了哪几个服务。能够看到只注册了两个服务,一个DEMO-ARTICLE和DEMO-ZUUL
下面进行扩容操做。扩容操做,其实很简单。
点击顶部导航栏中的API,点击Webhooks
打开Webhooks的列表页面
点击添加接收器,新增一个接收器
配置详解:
名称:本身根据相关随便取,此处为文章扩容。
类型:选择扩缩容服务
操做:选择扩容
目标服务:选择microservice/article
步长:每次扩容多少个服务,可一次或1个或2个或3个,可自由选择扩容个数,此处设置为2个。
最小数量:article服务最小不能小于多少个,此处设置为默认的1个。
最大数量:article服务扩容到多少个就再也不扩容了,此处设置为默认的100个。
点击建立,完成扩容接受器的添加操做。
添加完扩容触发器后,此时microservice应用中,仍是只有一个article服务。由于还须要一个触发操做才能生效。
怎么触发呢?点击上图中的触发地址的复制图标,复制出触发地址。触发地址,其实就一个URL,须要利用POST请求,去调用一次该URL。
利用POSTMAN,新建一个REQUEST,粘贴触发地址,选择请求类型为POST,而后点击SEND
请求完成以后,点击顶部导航栏的应用,点所有,在打开的应用列表中,点microservice微服务,进入microservice应用列表管理界面
能够看到article服务,已经由之前的单容器,变成了3个容器。
若是须要再扩容两个容器怎么办呢?此时有个快捷操做,不须要再在webhooks中添加接收器,只须要复制刚刚的扩容触发地址,在postman中多send几回便可。
由于扩容的步长的2,因此每send一次请求,容器数量会增长2个。
点击article进入该服务看一下article服务详情。能够看到有了三个不一样ip地址的容器(记住这三个IP地址)。
等待三个容器都启动完成(由于是在虚拟机中,机器性能有限,可能须要好几分钟,甚至十多分钟到半个小时,由于虚拟机的性能毕竟有限)。访问eureka,看看eureka注册中心中,注册了几个article服务。能够看到已经注册了三个article服务。
利用POSTMAN,经过zuul网关来访问article服务,多访问几回,看看是否达到负载均衡的效果
运行结果,会依次出现以下结果,这复合预期结果(zuul网关,默认采用的负载均衡机制就是轮询机制):
缩容操做,和扩容操做很类似。
点击顶部导航栏中的API,点击Webhooks
打开Webhooks的列表页面
点击添加接收器,新增一个接收器
配置详解:
名称:本身根据相关随便取,此处为文章缩容。
类型:选择扩缩容服务
操做:选择缩容
目标服务:选择microservice/article
步长:每次缩容多少个服务,可一次或1个或2个或3个,可自由选择缩容个数,此处设置为1个。最大缩容步长不能大于先有容器数。
最小数量:article服务最小不能小于多少个,此处设置为默认的1个。
最大数量:article服务缩容到多少个就再也不缩容了,此处设置为默认的100个。
点击建立,完成缩容接受器的添加操做。
添加完缩容触发器后,还须要一个触发操做才能生效。点击上图中文章缩容后面的触发地址下的的复制图标,复制出触发地址。触发地址,其实就一个URL,须要利用POST请求,去调用一次该URL。
在POSTMAN,新建一个REQUEST,粘贴触发地址,选择请求类型为POST,而后点击SEND
请求完成以后,点击顶部导航栏的应用,点用户,在打开的应用列表中,点microservice微服务,进入microservice应用列表管理界面,能够看到article服务的容器数已经由3个变成了2个。
若是须要再缩容一个容器怎么办呢?此时有个快捷操做,不须要再在webhooks中添加接收器,只须要复制刚刚的缩容触发地址,在postman中多send几回便可。
由于缩容的步长的1,因此每send一次请求,容器数量会减小1个。
访问eureka注册中心,查看注册了几个article服务。能够看到,也只是注册了两个article服务。