k8s+jenkins实现自动化部署应用至k8s集群方式

 更新时间:2026年03月14日 15:54:39   作者:韩悸桉  
本文详细介绍了如何在Jenkins环境下配置和启动Jenkins服务,以及如何使用Jenkins进行自动化部署Nginx应用到Kubernetes集群,文章涵盖了从环境准备、项目配置、代码上传到部署和回滚的全过程,提供了一个完整的自动化部署解决方案

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访问路径配置文件

4.立即构建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应用

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

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

2)回滚过程的日志查看

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Kubernetes Service(SVC)网络使用及说明

    Kubernetes Service(SVC)网络使用及说明

    Kubernetes通过Service资源解决了Pod动态IP的问题,提供稳定的访问入口,ClusterIP、NodePort和LoadBalancer是Service的三种类型,分别适用于内部通信、简单外部访问和云环境,Service通过iptables或IPVS进行负载均衡,并结合Ingress可实现更强大的流量管理
    2026-01-01
  • Nacos-K8s部署全过程

    Nacos-K8s部署全过程

    Nacos-K8s项目提供了多种在Kubernetes环境中部署Nacos的方案,包括快速启动、NFS持久化、Ceph持久化、Helm和Operator部署,每种方式都有其适用的场景和特点,如快速启动适用于测试,NFS和Ceph持久化支持数据持久化,Helm和Operator提供更高级的运维功能
    2026-02-02
  • Kubernetes故障排除有效维护集群的最佳实践工具

    Kubernetes故障排除有效维护集群的最佳实践工具

    这篇文章主要为大家介绍了Kubernetes故障排除有效维护集群的最佳实践工具详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • k8s调度原理和策略详解

    k8s调度原理和策略详解

    Kubernetes调度器通过节点预选、优先级排序和节点选定三阶段分配Pod,基于资源类型(可压缩/不可压缩)、亲和性(硬/软)、污点与容忍度机制,实现灵活调度与抢占,优化资源利用率和集群稳定性
    2025-09-09
  • 从小饭馆客流量变大论云原生负载均衡

    从小饭馆客流量变大论云原生负载均衡

    这篇文章主要为大家介绍了从小饭馆客流量变大来讨论云原生负载均衡,为大家做出更生动易懂的云原生解释说明有需要的朋友可以借鉴参考下
    2022-03-03
  • K8S  Config应用配置小结

    K8S  Config应用配置小结

    本文主要介绍了Kubernetes中ConfigMap和Secret的使用方法,以及如何在Pod和容器中进行资源配置,文中详细讲解了如何创建和使用ConfigMap来管理非机密性配置,以及如何使用Secret来存储敏感信息,同时,还介绍了如何在Pod中配置资源请求和限制,感兴趣的朋友一起看看吧
    2025-03-03
  • Kubernetes安装Jenkins的思路详解

    Kubernetes安装Jenkins的思路详解

    这篇文章主要介绍了Kubernetes安装Jenkins,Jenkins插件可以在Kubernetes集群中运行动态jenkins-slave代理,基于Kubernetes的docker,自动化在Kubernetes中运行的Jenkins-slave代理的缩放,需要的朋友可以参考下
    2022-06-06
  • K8s环境内部的服务如何注册到外部

    K8s环境内部的服务如何注册到外部

    文章主要讨论了在K8s环境外部部署服务时如何与部署在K8s内部的服务进行服务注册,提出了使用LoadBalancer、Kong和NodePort三种方式,并详细介绍了每种方式的实现步骤和注意事项
    2026-02-02
  • DeepSeek-R1 云环境搭建部署流程

    DeepSeek-R1 云环境搭建部署流程

    本文主要介绍了DeepSeek-R1 云环境搭建部署流程,包括注册、选择合适的服务器配置、部署DeepSeek模型及通过UI界面和SSH连接进行操作,感兴趣的可以了解一下
    2025-02-02
  • 自定义资源CRD使用介绍

    自定义资源CRD使用介绍

    这篇文章主要为大家介绍了自定义资源CRD的使用示例介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05

最新评论