Jekenins之发布后台微服务到自建k8s集群和云容器引擎(1)
1.前提.有独立的Jenkins 服务器。.有独立的k8s集群节点,并且已经部署好镜像私库registry或者Harbor。.代码已经改造为微服务并支持容器。.最好有注册中心eureka/apollo等。.将前端gateway 域名的后端地址改为容器的nodepod开放的地址。#这样就可以不改动原来前端调用的情况下,后台和前端的网关调用地址不变,只需要更改后端就可以实现后...
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。
更多推荐
所有评论(0)