k8s+jenkins实现自动化部署应用至k8s集群(代码片段)

author author     2023-03-18     369

关键词:

1.jenkins环境准备并启动jenkins服务

1)jdk环境配置

[root@centos7 ~]# ll /app/

技术图片
[root@centos7 ~]# cat /etc/profile | tail -n3 #jdk的环境变量
export JAVA_HOME=/app/jdk
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar

2)准备好jenkins启动的war包

[root@centos7 war]# ll

技术图片

3)查看jenkins的启动脚本

[root@centos7 war]# cat start.sh

技术图片

4)启动jenkins

[root@centos7 war]# ./start.sh && tailf test.log

技术图片

5)在数据目录修改hudson更新url,改为国内url,避免jenkins无法启动

[root@centos7 ~]# cat .jenkins/hudson.model.UpdateCenter.xml

技术图片

6)准备好主机解析或添加到DNS服务器

[root@centos7 ~]# cat /etc/hosts

技术图片

7)web端访问jenkins界面

技术图片

8)创建一个jenkins_project项目,并编辑配置

技术图片
技术图片

9)在jenkins的后端准备好自动化部署脚本k8s_auto_deploy.sh,事先做好公私钥认证,使得jenkins能够访问k8s-master-1

[root@centos7 ~]# cat /data/script/k8s_auto_depoy.sh
#!/bin/bash
URL=git@k8s.gitlab.cn:middle-supoort-project/middle-compose-service.git
Starttime=`date +"%Y-%m-%d_%H-%M-%S"`
Method=$1
Branch=$2
t1=`date +"%Y-%m-%d %H:%M:%S"`

     #代码克隆至jenkins后端
clone_code()
    cd /root/.jenkins/workspace/jenkins_project && git clone -b $Branch $URL&& echo "Clone Finished"


 #代码打包压缩并远程推送至k8s-master-1的nginx镜像制作目录
Pack_scp()
    cd /root/.jenkins/workspace/jenkins_project/middle-compose-service/ && tar cvzf nginx.tar.gz * && echo Package Finished
    scp nginx.tar.gz root@k8s-master-1:/data/Dockerfile/nginx/ && ssh root@k8s-master-1 ‘cd /data/Dockerfile/nginx/ && tar xvf nginx.tar.gz &&rm -f nginx.tar.gz‘ 


 #远程操作k8s-master-1节点,进行镜像制作并推送至harbor镜像仓库
build_iamge()
    ssh root@k8s-master-1 "cd /data/Dockerfile/nginx/ && ./build.sh $Starttime && echo ‘build_image and push_harbor success!‘"


    #对k8s集群中的nginx的pod应用进行升级
app_update()
    ssh root@k8s-master-1 "sed -ri ‘s@image: .*@image: k8s.harbor.cn/base_application/nginx:$Starttime@g‘  /data/mainfest/nginx.yaml"
    ssh root@k8s-master-1 "kubectl set image deployment/nginx-deployment nginx-container=k8s.harbor.cn/base_application/nginx:$Starttime -n default --record=true"
                t2=`date +"%Y-%m-%d %H:%M:%S"`
    start_T=`date --date="$t1" +%s`
    end_T=`date --date="$t2" +%s`
    total_time=$((end_T-start_T))
    echo "deploy success,it has been spent $total_time seconds"   


    #k8s集群中的pod应用进行回滚
app_rollback()
    ssh root@k8s-master-1 ‘kubectl rollout undo deployment/nginx-deployment  -n default‘


    #进行k8s集群自动部署的主函数
main()
    case $Method in 
    deploy)
        clone_code
        Pack_scp
        build_iamge
        app_update
    ;;
    rollback)
        app_rollback
    ;;
    esac


#执行主函数命令
main $1 $2

10)将jenkins的公钥配置到gitlab服务的web端,使得jenkins可以直接拉取代码无需认证

[root@centos7 ~]# cat .ssh/id_rsa.pub
技术图片
技术图片

2.k8s的master节点的准备

1)准备存放nginx应用镜像制作的路径,当前目录为空,其代码配置文件均已放在gitlab服务器中

[root@k8s-master-1 ~]# ll /data/Dockerfile/nginx
total 0

2)拉取harbor中的镜像的认证文件

[root@k8s-master-1 ~]# ll /etc/docker/certs.d/k8s.harbor.cn/harbor_ca.crt
技术图片

3)k8s集群中nginx的yaml清单文件

[root@k8s-master-1 data]# vim /data/mainfest/nginx.yaml

技术图片

4)通过nginx.yaml文件启动pod资源和service资源

[root@k8s-master-1 ~]# kubectl apply -f /data/mainfest/nginx.yaml

技术图片

5)查看nginx的pod应用以及service资源是否启动

[root@k8s-master-1 ~]# kubectl get pod -n default

技术图片

6)查看service资源

[root@k8s-master-1 ~]# kubectl get service -n default

技术图片

7)web端访问

技术图片

3.将nginx的镜像构建等相关配置文件上传到gitlab

1)以下为nginx的镜像配置文件,均在develop分支下

技术图片

2)制作nginx镜像的Dockerfile文件

技术图片

3)build.sh镜像的构建及自动推送至harbor的脚本

技术图片

4)index.html页面文件

技术图片

5)nginx的主配置文件

技术图片

6)nginx的server访问路径配置文件

技术图片

3.立即构建jenkins工程,实现自动化部署nginx应用至k8s集群

1)以上均准备完毕,开始构建jenkins工程

技术图片

2)选择相应的分支后构建方法

技术图片

3)开始构建工程

技术图片

4)查看控制输出

技术图片

5)查看k8s当前正在运行nginx的pod容器

[root@k8s-master-1 ~]# kubectl get pod -n default 

技术图片

6)再查看当前正在运行pod的镜像源地址,可见被自动更新

[root@k8s-master-1 ~]# kubectl describe pod nginx-deployment-b856886fb-9mzrm -n default

技术图片

7)查看nginx的yaml清单文件,也被自动修改

[root@k8s-master-1 ~]# cat /data/mainfest/nginx.yaml | grep "image:.*"

技术图片

8)查看harbor镜像仓库,查看构建的新镜像是否成功推送到此harbor仓库中

技术图片

9)web端访问更新的nginx版本,可见实现自动化更新

技术图片

10)假设开发人员将gitlab中的index.html的版本更新为1.13版

技术图片

11)再次构建发布更新

技术图片

12)查看控制台输出结果

技术图片

13)web端访问nginx应用

技术图片

4.若当前版本有问题,需要回滚,执行以下回滚操作

1)jenkins的控制台选择rollback回滚

技术图片

2)回滚过程的日志查看

技术图片

3)web端验证访问,可见回滚成功

技术图片

jenkins流水线部署k8s应用

通过独立的jenkins部署K8S应用PS:这种方式是jenkins独立,然后slave已容器方式运行,master是独立出来的,减少运维成本,还能提高效率。master部署​​https://blog.csdn.net/Hlroliu/article/details/118902124​​如果使用master部署需要把master加... 查看详情

自动化集成:pipeline整合docker+k8s(代码片段)

...系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译、打包、镜像构建、部署等操作;本篇文章主要描述流水线集成K8S用法。一、背景描述分布式服务的部署是一个复杂的流程,当容器应用存在几十甚至... 查看详情

持续集成之应用k8s自动部署(代码片段)

...集成之应用k8s自动部署Intro上次我们提到了docker容器化及自动化部署,这仅仅适合个人项目或者开发环境部署,如果要部署到生产环境,必然就需要考虑很多因素,比如访问量大了如何调整部署,如何更好的应对大并发的情况,... 查看详情

k8s的基础概念

...,用于管理容器化工作负载和服务,有助于声明式配置和自动化。它拥有庞大且快速发展的生态系统。Kubernetes是Google在2014年开源的一个容器集群管理系统,Kubernetes简称K8S。K8S用于容器化应用程序的部署,扩展和管理。K8S提供了... 查看详情

k8s

...称K8S)是开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案。在Docker技术的基础上,为容器化的应用提供部署运行... 查看详情

k8s和docker区别是啥?

...:1、k8s是一种开放源码的容器集群管理系统,能够实现自动化部署、扩展容器集群、维护等功能。2、Docker是一种开放源码的应用容器引擎,开发者可以将他们的应用和依赖打包在一个可移植的容器中,发布到流行的Linux机器上... 查看详情

基于k8s多集群隔离环境下的devops实现

...响。通过gitlab+Jenkins的黄金组合,实现容器应用的自动化构建和持续部署,提高迭代效率。直达最佳实践:【基于k8s多集群隔离环境下的devops实现】云栖号 查看详情

下篇:使用jenkins发布go项目到k8s,接上篇的手工体验改造为自动化发布(代码片段)

... 的基础上,将手动的过程通过jenkins工具将其改造成自动化。环境准备我的环境说明:组件安装方式访问IP访问端口jenkinsdocker192.168.11.2548086gitlabdocker192.168.11.2548088harbordocker192.168.11.2548081上面的3个组件均以docker的方式安装在同... 查看详情

k8s安装部署(代码片段)

...系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。快速部署应用快速扩展应用无缝对接新的应用功能节省资源,优化硬件资源的使用Kubernetes特点可移植:支持公有云,私有云&#... 查看详情

k8s集群使用ingress实现网站入口动静分离实践(代码片段)

...个问题,问题简要如下:1、java应用容器化部署首先通过自动化部署工具编译出全量的war包,将war包直接编译到docker镜像后推送到私用仓库并版本化控制;其次通过更新deployment的yaml文件来实现部署和后续的滚动更新,应用程序... 查看详情

kubernetes(k8s)应用案例

...密码和API密钥。自动扩展该公司使用K8S的自动扩展功能来实现按需扩展服务。K8S可以根据CPU利用率、内存使用率和网络流量等指标自动缩放Pods数量。 查看详情

使用jenkins实现重构项目并部署项目到阿里k8s环境运行(代码片段)

第一步比如我有一个项目A,并且jenkins里配置的构建分支名称为-->branchA所以在构建前,需要将最新的master分支merge到branchA分支,保证gctest拥有全部最新的代码变更.第二步以这个A项目为例,进入到Jenkins主页面点击我们的namespace这个... 查看详情

k8s部署jenkins(代码片段)

动态创建jenkins-slave构建任务把Jenkins插件源更改为国内进入ManageJenkins-》ManagePlugin->Advanced最下面有UpdateSite设置为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json修改服务器配置,进入jenkins安装目录,/updates/d 查看详情

k8s部署jenkins(代码片段)

这里jenkins使用的存储为NFS安装nfs工具yuminstallnfs-commonnfs-utils-yshowmount-e192.168.52.174#运行结果Exportlistfor192.168.52.174:/nfs/jenkins*创建nfs-client-provisionerdeploymentcatnfs-client-provisioner.yamlkind:Depl 查看详情

ansible自动化部署k8s集群

一、Ansible自动化部署K8S集群1.1Ansible介绍Ansible是一种IT自动化工具。它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新。Ansible适用于管理企业IT基础设施,从具有少数主机的小规模到数千个实例的企... 查看详情

2.使用jenkins自动构建并发布应用到k8s集群(代码片段)

...angy8080进行反馈.感谢您的支持。文章主题在物理机上安装jenkins前置条件必须安装jdk物理机上必须安装了kubectl,后面jenkins会 查看详情

使用jenkins流水线完成自动部署服务到k8s(代码片段)

...境为springboot微服务项目。用户提交代码到gitlab,触发jenkins拉取gitllab上的代码,然后完成编译构建成jar包,同步完成sonarsqube代码质量检测。然后在jenkins内部完成生成镜像,并将镜像推送到harbor仓库中,然后通... 查看详情

部署k8s集群

1.Kubernetes1.1.概念 kubernetes(通常称为k8s)用于自动部署、扩展和管理容器化应用程序的开源系统。它旨在提供“跨主机集群的自动部署、扩展以及运行应用程序容器的平台”。支持一系列容器工具 ,包括Docker等。1.2.特点... 查看详情