Rancher运行dubbo服务

一、环境

    本文假定:

        1、OS是Centos7.4

        2、Docker18.01.0

        3、Rancher1.6.14

        4、私服是Harbor

        5、dubbo是dubbo-spring-boot-starter:1.0.0

二、dubbo程序

    总共有两个核心项目,base、inf。base是dubbo服务提供者,inf是服务消费者,同时也是springmvc的http接口程序。另外还有api项目是接口类和工具类集合,parent是父项目。完整代码请见,下面列出核心代码。https://github.com/shang7053/base/tree/master/dubbo-docker-parent

    RC(restcontroller)

@RestController
@RequestMapping("test")
public class TestRc {
	@Reference
	private ITestService testService;

	@RequestMapping("hello")
	@ResponseBody
	public String hello() {
		return this.testService.test("inf run on " + IPUtil.getIp());
	}

}

    接口

public interface ITestService {
	public String test(String str);
}

    实现

@Service
public class TestServiceImpl implements ITestService {

	/*
	 * (非 Javadoc) <p>Title: test</p> <p>Description: </p>
	 * 
	 * @param str
	 * 
	 * @return
	 * 
	 * @see com.scc.dubbo.docker.api.service.ITestService#test(java.lang.String)
	 */
	@Override
	public String test(String str) {
		return str + " and base run on " + IPUtil.getIp();
	}

}

    通过访问http://hostname:port/test/hello,输出一段话,这段话类似

inf run on 10.42.242.44 and base run on 10.42.143.50

    另外需要注意的是,配置依赖环境变量,本例中base以及inf依赖三个环境变量,分别是:

server_port=8080
dubbo.port=20880
dubbo.zk.address=172.16.40.4:2181,172.16.40.5:2181

三、创建&发布镜像

    首先执行命令,将代码打包成jar包

mvn clean package

    然后将base-0.0.1.jar和inf-0.0.1.jar上传到服务器(该服务必须安装Docker以及Harbor私服的证书),比如上传到/opt/soft文件夹下。

    首先创建base镜像,在soft文件夹下创建Dockerfile文件,内容如下:

#基于java8镜像构建,该镜像从dockerhub随便找的,生产建议自己创建
FROM gonitro/java8
#切换镜像目录,进入/opt目录
WORKDIR /opt
#在/usr/下创建webapps目录,用来存放程序文件
RUN mkdir webapps
#将宿主机的程序文件拷至镜像的/opt/webapps目录下
ADD base-0.0.1.jar webapps

    然后构建镜像

#注意最后一个点,代表Dockerfile的路径
docker build -t base:0.0.1 .

    输出如下

docker build -t base:0.0.1 .
Sending build context to Docker daemon  20.45MB
Step 1/4 : FROM gonitro/java8
 ---> dab560f3e6fa
Step 2/4 : WORKDIR /opt
 ---> Using cache
 ---> 57c206f31357
Step 3/4 : RUN mkdir webapps
 ---> Using cache
 ---> df3240be3cf1
Step 4/4 : ADD base-0.0.1.jar webapps
 ---> Using cache
 ---> 48d8842b848c
Successfully built 48d8842b848c
Successfully tagged base:0.0.1

    然后tag base:0.0.1并push到harbor上

docker tag inf:0.0.1 harbor.voole.com/library/base:0.0.1
docker push harbor.voole.com/library/base:0.0.1

    在harbor的管理后台上即可看到

    按照同样的步骤将inf打包到harbor上。

四、配置Rancher

    打开RancherUI,进入Default环境。

    首先创建一个应用,名称叫dubbo测试

    然后进入应用首页,点击添加服务按钮。名称输入base,镜像输入

harbor.voole.com/library/base:0.0.1

    端口映射只输入私有端口20880.然后在第三块,命令处输入

java -jar /opt/webapps/base-0.0.1.jar >/dev/null &

    环境变量输入

server_port=8080
dubbo.port=20880
dubbo.zk.address=172.16.40.4:2181,172.16.40.5:2181

    最后配置健康检查端口为20880,再点击创建即可。

    同样的步骤创建inf服务,但需要注意的是,映射端口要输入8080,而不是20880,因为dubbo消费者不占用20880端口。

    创建完base和inf之后,需要创建一个负载均衡,创建过程详见上一遍博文。下面展示最终的效果图

五、升级&验证

    应用创建完成后,可能会对单个服务进行更新,比如更新base。

    这时,按照第三节的步骤将新的base服务打成镜像并发布到harbor。然后登陆RancherUI找到base服务,点击最后面的升级按钮

    升级页面分三块,第一块是优雅升级设置,可以设置一次升级多少个容器,并且可以设置批次的间隔等。第二块、第三块和创建时一样。如果版本号没变,进入升级页面直接点升级即可,如果版本变了,需要修改至对应的版本号,然后点升级。

    点击升级后,耐心等待全部升级完成。

    若此时发现程序有问题,可以点击回滚,回退到上一个镜像。若没有问题,需要点击一次升级完成,确认此次升级成果。

    打开浏览器或者其他能够发送http请求的工具测试安装或升级成果,我这里使用postman,发送http://hostname:port/test/hello,结果如下:

猜你喜欢

转载自my.oschina.net/shyloveliyi/blog/1617674