Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)

1.前提

.有独立的Jenkins 服务器。

.有独立的k8s集群节点,并且已经部署好镜像私库registry或者Harbor。

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第1张图片
在这里插入图片描述
.代码已经改造为微服务并支持容器。

.最好有注册中心eureka/apollo等。

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第2张图片Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第3张图片
.将前端gateway 域名的后端地址改为容器的nodeport开放的地址。

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第4张图片

#这样就可以不改动原来前端调用的情况下,后台和前端的网关调用地址不变,只需要更改后端就可以实现后台应用的容器部署及自动化发布。

2.自建k8s集群部署

1).Jenkins中上传jar包到k8s master节点
思路:
将打包好的jar上传到到master节点的指定路径,删除镜像,用新的jar包重新构建镜像push到私库。
然后kubectl删除后重新用kubectl创建该pod,最后检测该pod是否已经启动。

*Jenkins流程:

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第5张图片

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第6张图片
*k8s master服务器所需脚本:

#Dockerfile 打包镜像文件

	```bash
	FROM centos7.2_jdk
	ADD wjj-account-system-*-SNAPSHOT.jar /root/
	
	
	MAINTAINER jbwang
	RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
	
	#ENV JAVA_HOME /usr/local/jdk1.8.0_181
	#ENV JRE_HOME=$JAVA_HOME/jre
	#ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
	#ENV PATH $PATH:$JAVA_HOME/bin
	
	WORKDIR /root/
	CMD ["/bin/bash", "-c", "java -Denv=dev -Dapollo.meta=http://eureka.dev.svc.cluster.local:10001,http://eureka02.dev.svc.cluster.local:10002  -Xms512M -Xmx512M -jar /root/*.jar"]
	EXPOSE 10031
	
	```

#启动Pod的yaml脚本

	```bash
	apiVersion: extensions/v1beta1
	 
	kind: Deployment
	 
	metadata:
	 
	  name: wjj-account-dev
	  namespace: develop
	 
	spec:
	 
	  replicas: 1
	 
	  template:
	 
	    metadata:
	 
	      labels:
	 
	        name: wjj-account-dev
	 
	    spec:
	 
	      containers:
	 
	        - name: wjj-account-dev
	 
	          image: account:latest
	          ports:
	            - containerPort: 10031
	
	
	```

#检查pod是否启动完成

num=1
name=`kubectl get pod -n develop|grep wjj-account-dev|awk '{print $1}'`
while [ $num -le 10 ]
        do
        echo $num
        CHECK_RESULT=`kubectl logs --tail=2000 -n develop $name | grep "JVM running"| wc -l`
        echo "The check results: "$CHECK_RESULT
        if [ $CHECK_RESULT -ge 1 ]; then
                echo "BUILD SUCCESSFUL"
                exit 0
                else
                sleep 6
        fi
        let num++
        done
        echo "BUILD FAILTURE"
        exit 1

2):创建Service暴露公共服务

将一些公共访问的服务暴露出来,提供给集群内Pod方便访问,例如下面gateway官网,apollo阿波罗配置中心,eureka注册中心,job定时任务等
CMD ["/bin/bash", "-c", "java -Denv=dev -Dapollo.meta=http://eureka.develop.svc.cluster.local:10001,http://eureka02.develop.svc.cluster.local:10002  -Xms512M -Xmx512M -jar /root/*.jar"]

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第7张图片

3):发布效果图

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第8张图片

3.云k8s容器部署

 思路:通过Jenkins打包,打包完成将jar包上传到与云容器镜像打通的机器,通过该机器上传镜像到云镜像中心,设置云镜像中心的镜像保存版本,并设置触发器如果有新镜像上传实时触发创建Pod容器,添加工作负载创建无状态工作负载,实现Jenkins打包生成镜像并上传云容器,进行自动化部署的功能。
 
	1).Jenkins中上传jar包到k8s master节点

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第9张图片
Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第10张图片Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第11张图片
Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第12张图片
2):云容器设置镜像中心,工作负载,Service暴露服务等

#镜像中心设置:Pull/push,过期设置,触发器
Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第13张图片
Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第14张图片Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第15张图片

#工作负载设置
Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第16张图片Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第17张图片
Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第18张图片
Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第19张图片Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第20张图片Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第21张图片Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第22张图片
#service设置

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第23张图片

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第24张图片3):用到的脚本如下:
* Dockerfile 构建镜像

	```bash
	FROM centos7.2_jdk
	ADD wjj-account-system-*-SNAPSHOT.jar /root/
	
	
	MAINTAINER jbwang
	RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
	
	#ENV JAVA_HOME /usr/local/jdk1.8.0_181
	#ENV JRE_HOME=$JAVA_HOME/jre
	#ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
	#ENV PATH $PATH:$JAVA_HOME/bin
	
	WORKDIR /root/
	CMD ["/bin/bash", "-c", "java -Denv=dev -Dapollo.meta=http://eureka.dev.svc.cluster.local:10001,http://eureka02.dev.svc.cluster.local:10002  -Xms512M -Xmx512M -jar /root/*.jar"]
	EXPOSE 10031
	
	```
* Jenkins相关命令

#与云k8s集群节点相通的服务器

	cd /k8s/images/jar/dev/account
rm -f *.jar
mv -f /tmp/wjj-account-system-*-SNAPSHOT.jar .
docker rmi account
docker build -t account .

date=$(date +%Y%m%d_%H%M)
docker images|grep swr.cn-east-2|grep account|awk '{print$1":"$2}'|xargs docker rmi
docker tag account:latest swr.cn-east-2.myhuaweicloud.com/nationalhealth/wjj-account-dev:$date
docker push swr.cn-east-2.myhuaweicloud.com/nationalhealth/wjj-account-dev:$date

#云k8s节点master服务器检测命令

	echo "等10秒让华为云部署镜像"
sleep 10
cd /k8s/yaml/dev/account
./chk_running.sh


num=1
name=`kubectl get pod -n dev|grep wjj-account-dev|awk '{print $1}'`
while [ $num -le 10 ]
        do
        echo $num
        CHECK_RESULT=`kubectl logs --tail=2000 -n dev $name | grep "JVM running"| wc -l`
        echo "The check results: "$CHECK_RESULT
        if [ $CHECK_RESULT -ge 1 ]; then
                echo "BUILD SUCCESSFUL"
                exit 0
                else
                sleep 6
        fi
        let num++
        done
        echo "BUILD FAILTURE"
        exit 1

4):效果图

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第25张图片Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第26张图片Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第27张图片

Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)_第28张图片

4.小结
1):核心是掌握k8s的Dockerfile 打包镜像和 yaml 构建pod的能力。
2):思路与普通发版类似,只是换成了启动pod。
3):难点是 :整个架构的连通性改造,使每个pod都能够注册到eureka注册中心并且也能够读取到apollo配置中心,并且暴露必要的公共服务提供以连接前端与后台。
4):日志采集:采用efk到es,并启用插件logtrail查看。
5):监控方案:用zabbix或者promethus。

你可能感兴趣的:(自动化工具栈使用,容器基础及使用)