k8s自动化部署springcloud、springboot脚本

为了自动化部署jar包到k8s容器云上边而写的脚本。

为了避免繁杂的发包操作。复制粘贴的喋喋不休,jar包升版的版本控制而写的脚本。

一、 脚本功能

把jar包放到指定目录,执行shell脚本,脚本先自动根据文件夹的环境把jar包中的配置文件替换掉。这样可以很方便的打生产环境和测试环境的jar包。只需要把jar放上去,配置文件无需关系,自动放到jar包里。然后脚本会自动把jar打成镜像,给镜像打成镜像名称加时间日期的标签,然后把镜像推送到镜像仓库。然后自动替换k8s的yaml脚本停止旧容器,启动新容器。

二、 脚本所需

1. springboot的jar包

2. 构建springboot镜像的Dockerfile

3. k8s启动yaml文件

三、 脚本定义

appname:所打包的name

dockersrc:用来放置Dockerfile文件。把jar包打成docker镜像。

k8ssrc:用来防止k8s的yaml文件,启动pod,停止pod

bmc:jar包的名字

file1:jar包种要替换的配置文件的名字,这个文件放置在dockersrc目录下。如bootstrap.properties

【替换jar包配置文件真的很方便,这样打成的jar包直接放进来就能用,无需关心配置文件,一键shell即可打包更新环境】

四、 脚本流程

1.  获取当前时间的年月日时分秒,生成当前jar包的版本号

2.  把jar包中的配置文件替换为dockersrc中的配置文件。

3. 把jar包打成docker镜像

4. 清除替换配置文件的残余

5. 给镜像打标签带上我们的版本号

6. 把这个镜像推送到远程镜像仓库

7. 替换yaml文件中的版本号

8. 重启pod,更新完成

五、 脚本详情

#!/bin/bash
#auth eric
#date 2020-11-25
 
 
#*********脚本入参#*********
appname=base
#Docker脚本位置
dockersrc=/home/springcloud/DockerBuilder/$appname
#K8s脚本位置
k8ssrc=/home/springcloud/k8s/$appname
#需要替换的包名称
bmc=$appname-server-web-1.0.jar
#需要替换的文件名称
file1=bootstrap.properties
#*********脚本入参#*********

 
 
#当前镜像版本
source /etc/profile
version="`date +%Y%m%d%H%M%S`"
echo '当前版本为'$version
echo '第一步:替换JAR包配置文件'
#找到替换文件路径
cd $dockersrc
if [ ! -d "$dockersrc"]; then
  echo "$dockersrc文件夹不存在";
  exit 1;
fi
if [ ! -f  "$jarsrc/$bmc" ];then
  echo  "$jarsrc/$bmc更新包不存在"
fi
#清除上一次的残余
rm -f *.tar *.jar
cp $jarsrc/$bmc $dockersrc
filesrc1=`jar -tvf \$bmc|grep \$file1|awk '{print \$NF}'`
echo $bmc
echo $file1
echo $filesrc1
#把要替换的文件解压出来
jar -xvf $bmc $filesrc1
if [ $? != 0 ]; then
    echo "java命令不存在,请安装JDK"
    exit 1;
fi
#删掉原文件
rm -f $filesrc1
#换掉文件
cp $file1 $filesrc1
#重新将文件加入到jar包中
jar -uvf $bmc $filesrc1
#删除解压文件
rm -rf BOOT-INF
rm -f *.tmp
echo '替换完成'
echo '第二步:构建Docker镜像'
docker build -t springcloud-$appname:1.1 .
if [ $? != 0 ]; then
    echo "docker构建失败,请检查Docker"
    exit 1;
fi
docker save springcloud-$appname:1.1 -o springcloud-$appname.tar
docker load < springcloud-$appname.tar
docker tag springcloud-$appname:1.1 192.168.1.6:15000/springcloud/springcloud-$appname:v$version
docker push  192.168.1.6:15000/springcloud/springcloud-$appname:v$version
if [ $? != 0 ]; then
    echo "远程仓库推送失败,请检查远程镜像仓库"
    exit 1;
fi
echo '第三步:升级K8s容器'
#替换k8s容器镜像版本
cd $k8ssrc
if [ ! -d "$k8ssrc"]; then
  echo "$k8ssrc文件夹不存在";
  exit 1;
fi
sed  -i  "s|springcloud/springcloud-$appname:.*|springcloud/springcloud-$appname:v$version |g"  04.application-deployments.yaml
kubectl delete -f 04.application-deployments.yaml
kubectl apply -f 04.application-deployments.yaml
echo '升级完成,当前版本为:'$version

六、 Dockerfile实例

首先要先安装openjdk

docker  pull  openjdk

然后注意修改时区保证docker容器内的时间和外部时间同步

FROM openjdk:8
MAINTAINER ERIC-BASE
LABEL app="eric-base" version="1.1" by="eric"
COPY ./base-server-web-1.0.jar base-server-web-1.0.jar
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone
CMD java -Xms256m -Xmx512m -jar base-server-web-1.0.jar

k8s日志自动收集脚本

   k8s自带的日志方案一般需要集成专业的日志ELK才能快速检索出错误信息,为了编辑繁杂的集成操作,这里简单写了一个脚本把各个容器的日志收集存储到本地。便于定位发现程序错误。

一、 脚本功能

每天十二点定时执行脚本,批量获取工作空间中的所有pod当天的日志信息,存储到本地。同时删除七天前的日志。

最终形成一个日志工作空间的文件夹,文件夹中又各个pod的名字,每个pod中存放着最近七天的日志运行信息。便于快速查找k8s容器报错信息,快速定位错误。

二、 脚本流程

1. 获取工作空间springcloud的所有容器名称

2. 循环容器名称,滤除首行,截取得到准确的容器名称,和应用名称

3. 获取当前日期和七天前的日期

4. 存放日志的文件夹是否存在,如果不存在则创建

5. 把容器的日志导出成文件,文件名用应用名称加上当前日期

6. 删除七天前的日志信息

三、 定时任务

linux系统中可以把定时任务写在crontab中,通过crontab自定义cron表达式执行我们的脚本

vi /etc/crontab

 

然后在这里添加进来我们的定时任务,每天晚上11点执行

0 0 23 * * ? root sh /home/springboot/log/log.sh

然后开启定时任务

1. systemctl start crond
2. systemctl restart crond

四、 脚本详情

#!bin/bash
#auth eric
#2020-12-02
#注意这里要声明环境变量,不然不识别kubectl命令
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
pod=$(kubectl get pod -n springcloud |awk '{print $1}');
for i in $pod;
do
    if [ $i = 'NAME' ]
    then
        continue
    fi
podname=$i;
appname=`echo $i|awk -F'-' '{print $2}'`;
timenow=$(date "+%Y%m%d");
timeago=$(date -d"7 day ago" +%Y%m%d);
dir=/home/springcloud/log/$appname
if [ ! -d "$dir" ];then
    mkdir $dir
fi
#删除7天前的日志
if [ -f "$dir/$appname$timeago.txt" ];then
 rm -f $dir/$appname$timeago.txt;
fi
#导出今天的日志
kubectl logs --since=24h $podname -n springcloud >$dir/$appname$timenow.txt
done;
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杭州架构师

你的鼓励你创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值