Jenkins部署Springboot应用到K8S

更多信息请查看公众号原文:https://mp.weixin.qq.com/s/Q3knDEa6etAM5LZ-ULAeSA

​上一章节已经完成了一个最简单的应用的开发,现在看看怎么把这个应用部署到K8S.

 

  1. 检查Jenkins配置

    1.1 Maven Integration, Pipeline Maven Integration, Publish over SSH以及Cucumber reports是否已经安装成功,如果没有请安装

     

     

     

    1.2 JDK配置和Maven

    进入Global Tool Configuration

    Cucumber插件:

     1.3 检查Jenkins URL

        进入Configure System:   

    2. 创建Job

    

  build完之后可以看到哪些功能是正常或者不正常的:    

      

   

3. SCP免密传输配置

    在需要复制到目标机器上,设置sshd config:

    sudo vim /etc/ssh/sshd_config

        让后重启sshd服务:sudo service sshd restart

        然后重新设置一下root的密码:sudo passwd

        尝试一下scp:sudo scp id_rsa.pub root@192.168.0.10:/root/.ssh/id_rsa.pub.minikube        

    

4. SSH免密登陆配置       

    由于Jenkins编译完成后,需要上传到Minikube那台机器进行部署,所以在Jenkins那台机器中需要设置免密登陆,我需要从192.168.0.5免密登陆到192.168.0.10:

    a. 在远程服务器192.168.0.10上执行:ssh-keygen -t rsa           

        .ssh目录权限设置为700:

        chmod -R 700 .ssh/  --一定要700哦

    b. 在192.168.0.10 /root/.ssh目录下执行:

        cat id_rsa.pub >> authorized_keys

        chmod 600 authorized_keys   --一定要600哦          

    c. 把远程服务器的id_rsa.pub拷贝到192.168.0.5本地机器上,并将其内容追加到本地机器的authorized_keys中:

        scp id_rsa.pub root@192.168.0.5:/root/.ssh/id_rsa.pub.010

        cat id_rsa.pub.010 >> authorized_keys

     d. 发送authorized_keys到192.168.0.5

        scp authorized_keys root@192.168.0.5:/root/.ssh/

     e. 重新把本地的authorized_keys上传到远程服务器

       scp authorized_keys root@192.168.0.10:/root/.ssh/

       或者:ssh-copy-id root@192.168.0.10        

       authorized_keys中的内容是客户端的public key中的内容。

     f.最后重启一下把ssh重启一下吧,下图免密登陆以及免密scp成功:   

   

 

 5. 设置免密切换账户

    由于我默认登陆的账户是czy, 需要用root进行操作。

    sudo vim /etc/sudoers

    在root用户下面添加一个当前账户:   

 

    切换用户:sudo -s   

    

 

6. 手动部署

    idea安装docker和k8s插件,docker file和k8s部署文件有语法高亮。

    Dockerfile:

    OK,在利用Jenkins自动化部署之前,我们看看怎么把应用构建成镜像,推送镜像,拉取镜像,然后分别用Docker运行应用和K8S里部署应用。

    Jenkins编译完成后,到Jenkins的工作目录下可以看到我们的Jar包和相关的项目文件,我们把相关文件scp到K8S的那台机器上:

cd /var/lib/jenkins/workspace/k8s-cicd-demo/target

scp k8s-cicd-demo-0.0.1-SNAPSHOT.jar root@192.168.0.10:/usr/local/k8s-workspace/docker/

cd /var/lib/jenkins/workspace/k8s-cicd-demo/deployment

scp -r docker root@192.168.0.10:/usr/local/k8s-workspace/

在Docker file目录下执行:

docker build -t registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 .    (不要忽略最后一个点),然后可以看到镜像已经生成啦:

sudo docker tag 510093dbe4bf registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 ##打tag

sudo docker login --username=465230373@qq.com registry.cn-hangzhou.aliyuncs.com --password Milenfan123   #登陆阿里云镜像服务

sudo docker push registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3 ##推送镜像

https://cr.console.aliyun.com/repository/cn-hangzhou/k8simages_jo ##登陆阿里云查看镜像    

sudo docker pull registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3  ##拉取镜像

docker run -d --name k8s-cicd-demo -p 10000:9999 registry.cn-hangzhou.aliyuncs.com/k8simages_jo/jovic/k8s-cicd-demo:v3  ##docker运行服务(如果容器已存在可以用docker rm k8s-cicd-demo 删除)

docker logs -f --tail=5000 9bb33e4b0ced ##查看日志

已经看到已经运行了,访问结果如下:

到目前为止,Docker运行应用没有问题,现在我们先把这个容器删除掉:

docker stop k8s-cicd-demo  ##停止容器

docker rm k8s-cicd-demo  ##删除容器

 

好,现在继续看看部署到K8S的情况,我们切换到k8s目录,我的部署文件是这样的

 

kubectl create -f deployment.yaml  ##部署应用

kubectl create -f service.yaml ##暴露服务

kubectl get deployment -o wide  ##查看已经部署的应用

kubectl get svc -o wide  ##查看已经暴露的服务

尝试访问一下服务:

到此为止,手动把应用部署到K8S也没有问题!如果部署过程中有什么问题,下面命令可能有用哈,先留着

kubectl get deployment -o wide --查看已经部署的应用

kubectl delete deployment k8s-cicd-demo-deployment --删除deployment

kubectl get svc -o wide --查看service

kubectl delete svc k8s-cicd-demo-service --删除服务

kubectl describe svc k8s-cicd-demo-service --查看服务

kubectl get pod -o wide --查看pod

kubectl describe pod k8s-cicd-demo-deployment-7f56f796f8-f6rrk --查看pod

kubectl logs -f k8s-cicd-demo-deployment-79c66b55f5-6xrzk --查看pod日志 

kubectl get endpoints -o wide --查看endpoint

 

7.自动部署

    既然手动部署没有问题,那我们继续看怎么实现自动部署吧,这时候主要的功夫应该是写Shell脚本了吧。。。emm,自动部署需要在项目构建完成后执行相关的脚本:   

   下面主要看一下k8s-cd.sh这个脚本 

   最后,由于跑BDD之前需要把项目部署好,为了不写那么多shell脚本,最终修改了Jenkins配置,并且由一个Jenkins Job变成了两个,下面是k8s-cicd-demo的主要配置:

下面是对应的k8s-cicd-demo-ft的主要配置:

    

最后,看一下最终结果吧:

  

点击k8s-cicd-demo-ft可以查看测试的结果:

打开浏览器访问:

至此,一个简单的CICD的大概流程已经介绍完毕,也成功实现了这个demo项目的自动化部署以及自动化测试。

 

相关免费视频教程

 

更多信息关注公众号:

 推荐一款开源的项目管理,绩效考核(日报,周报,月报)工具:http://www.itproject-manager.com/

posted on 2020-09-11 08:15  itproject-manager  阅读(1396)  评论(0编辑  收藏  举报