1.前提

.有独立的Jenkins 服务器。

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

在这里插入图片描述
在这里插入图片描述
.代码已经改造为微服务并支持容器。

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

在这里插入图片描述在这里插入图片描述
.将前端gateway 域名的后端地址改为容器的nodeport开放的地址。

在这里插入图片描述

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

2.自建k8s集群部署

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

*Jenkins流程:

在这里插入图片描述

在这里插入图片描述
*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"]

在这里插入图片描述

3):发布效果图

在这里插入图片描述

3.云k8s容器部署

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

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
2):云容器设置镜像中心,工作负载,Service暴露服务等

#镜像中心设置:Pull/push,过期设置,触发器
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

#工作负载设置
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
#service设置

在这里插入图片描述

在这里插入图片描述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):效果图

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐