k8s+jenkins实现自动化部署应用至k8s集群
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端验证访问,可见回滚成功

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
想学明白PostgreSQL,得先捋一捋 DB架构
即将开播:5月20日,基于kubernetes打造企业级私有云实践 在学习PostgreSQL的过程中,很容易陷入一种情况,貌似都懂,一问就含糊,今天我就来捋一捋那团乱麻。 postgresql 启动源于守护进程,其功能强大,主管比如执行恢复、初始化共享数据结构/内存空间,以及启动强制和可选的进程。 PostgreSql 在启动后,就开始接受客户的访问,下图演示了一个客户如何申请连接,由守护进程来分配一个子进程,然后来服务于客户的方式。 当有成千上万的用户要读取数据库中的数据,并且想更高速度度的读取,那就会牵扯到PG中的内存系统,PG的内存系统中,客户与backend process来进行交互,而backend process 会与PG的共享buffer中,而与其他数据库不同的地方是,PG的内存并不会和其他的三家的数据库一样,他要求的本身的buffer 的设置不会特别大(相对于其他三家的),他的设计中还要利用LINUX 系统的缓冲系统,在数据的读取上并不会引起任何问题,速度上也会有保障。 除了这两种级别的缓存之外,我们还可以使用磁盘控制器缓存、磁盘驱动器缓存等等。 上面基本上在关注与数...
- 下一篇
java并发编程 -CountDownLatch和CyclicBarrier在内部实现和场景上的区别
前言 CountDownLatch和CyclicBarrier两个同为java并发编程的重要工具类,它们在诸多多线程并发或并行场景中得到了广泛的应用。但两者就其内部实现和使用场景而言是各有所侧重的。 内部实现差异 前者更多依赖经典的AQS机制和CAS机制来控制器内部状态的更迭和计数器本身的变化,而后者更多依靠可重入Lock等机制来控制其内部并发安全性和一致性。 publicclass{ //SynchronizationcontrolForCountDownLatch. //UsesAQSstatetorepresentcount. privatestaticfinalclassSyncextendsAbstractQueuedSynchronizer{ privatestaticfinallongserialVersionUID=4982264981922014374L; Sync(intcount){ setState(count); } intgetCount(){ returngetState(); } protectedinttryAcquireShared(intacqui...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Hadoop3单机部署,实现最简伪集群
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16