当前位置: 首页 > news >正文

DevOps搭建(十六)-Jenkins+K8s部署详细步骤

图片

1、整体部署架构图

图片

2、编写脚本

vi pipeline.yml
apiVersion: apps/v1
kind: Deployment
metadata:namespace: testname: pipelinelabels:app: pipeline
spec:replicas: 2selector:matchLabels:app: pipelinetemplate:metadata:labels:app: pipelinespec:containers:- name: pipelineimage: 192.168.88.125:80/repo/devops-pipeline-test:v4.0.0#镜像拉取策略,不管内容变不变都重新拉取imagePullPolicy: Alwaysports:- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:namespace: test#注意:这里要和Deployment的名称一致name: pipelinelabels:app: pipeline
spec:selector:#注意:这里要和Deployment的app名称一致app: pipelineports:#Service的端口- port: 8081#容器内的端口targetPort: 8080type: NodePort
---
#apiVersion值必须写成networking.k8s.io/v1
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:namespace: testname: pipeline
spec:#可视化界面配置的ingress名称ingressClassName: ingressrules:#映射的域名- host: k8s.pipeline.comhttp:paths:#访问什么样的路径- path: /#匹配方式,前缀匹配,即匹配上path配置的斜杠就可以pathType: Prefixbackend:#自定用哪个serviceservice:name: pipelineport:#映射的端口number: 8081

3、配置daemon.json

要想从Harbor仓库中拉取镜像,首先要往主机和从机的daemon.json文件中添加Harbor的地址信息

"insecure-registries":["192.168.88.125:80"],别忘了80端口

vi /etc/docker/daemon.json

图片

添加完之后,重启下docker

systemctl restart docker

4、配置Docker私服信息

要拉取镜像,需要Harbor登录进行拉取,到Kuboard控制台对应的命名空间找到密文菜单,点击创建Secret

图片

填写对应的信息即可

图片

复制上图中的复制命令在k8s主机上运行

docker login 192.168.88.125:80/ -u admin -p Harbor12345

图片

5、测试脚本

kubectl apply -f pipeline.yml

图片

浏览器请求服务正常返回,脚本测试通过。

http://192.168.88.126:31603/test/test

图片

6、Jenkins整合Kubernetes

6.1、将pipeline.yml推送到k8smaster

先在SpringBoot项目下创建pipeline.yml文件,内容为步骤2中的脚本内容。

图片

接着生成流水线脚本,目标服务器选择k8smaster服务器,文件写pipeline.yml文件。

图片

图片

将流水线脚本粘贴到Jenkinsfile对应的步骤中

图片

6.2、Jenkinsfile增加远程执行kubectl命令

在Jenkinsfile文件中,流水线步骤增加如下增加远程执行kubectl命令步骤。

原始脚本

kubectl apply -f /usr/local/k8s/pipeline.yml
#强制刷新deployment,防止pipeline.yml没发生变化时不重新部署
kubectl rollout restart deployment pipeline -n test

生成流线脚本:

sshPublisher(publishers: [sshPublisherDesc(configName: 'k8smaster', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'kubectl apply -f /usr/local/k8s/pipeline.yml', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

粘贴到Jenkinsfile文件对应的步骤中

图片

完整的Jenkinsfile文件内容如下:

//所有的脚本命令都放在pipeline中
pipeline {//指定任务在哪个集群节点中执行agent any//声明全局变量,方便后面使用environment {harborUser = 'admin'harborPassword = 'Harbor12345'harborAddress = '192.168.88.125:80'harborRepo = 'repo'}stages {stage('拉取代码') {steps {echo '开始拉取git仓库代码……'checkout scmGit(branches: [[name: '$tag']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.88.125:8929/root/devops-test.git']])echo '开始拉取git仓库代码完毕。'}}stage('构建项目') {steps {echo '开始通过maven构建项目……'sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'echo '通过maven构建项目完毕'}}stage('代码检查') {steps {echo 'TODO 通过SonarQube做代码质量检测'}}stage('制作镜像') {steps {echo '通过Docker制作自定义镜像……'sh '''mv ./target/*.jar ./docker/docker build -t ${JOB_NAME}:${tag} ./docker/'''echo '通过Docker制作自定义镜像完毕'}}stage('推送镜像') {steps {echo '将自定义对象推送到Harbor仓库……'sh '''docker login -u ${harborUser} -p ${harborPassword} ${harborAddress}docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}docker image prune -f'''echo '将自定义对象推送到Harbor仓库完成'}}stage('将yml文件传到k8smaster') {steps {echo '将yml文件传到k8smaster……'sshPublisher(publishers: [sshPublisherDesc(configName: 'k8smaster', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'pipeline.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '将yml文件传到k8smaster完毕'}}stage('远程执行k8smaster的kubectl命令') {steps {echo '远程执行k8smaster的kubectl命令……'sshPublisher(publishers: [sshPublisherDesc(configName: 'k8smaster', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'kubectl apply -f /usr/local/k8s/pipeline.yml', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])echo '远程执行k8smaster的kubectl命令完毕'}}}
}

7、构建测试

执行Jenkins项目构建

图片

构建成功后,去Kuboard可以到对应的Service

图片

图片

kubernetes2

DevOps8

Docker4

Jenjins6

架构师5

kubernetes · 目录

上一篇DevOps搭建(十五)-kubernetes部署项目详细步骤

http://www.lryc.cn/news/281096.html

相关文章:

  • WaitForSingleObject 函数的诸多用途与使用场景总结
  • 4、Redis高并发分布式锁实战
  • matlab subs 函数计算太慢
  • 如何确保网络传输的安全性和稳定性?
  • 鸿蒙应用开发学习:改进小鱼动画实现按键一直按下时控制小鱼移动和限制小鱼移出屏幕
  • 紫光展锐5G扬帆出海 | Blade系列勇当拉美5G先锋
  • 如何设计一个高并发系统?
  • 基于WebRTC技术的EasyRTC视频云服务系统在线视频客服解决方案
  • 黑马程序员——2022版软件测试——乞丐版——day04
  • uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -创建图文投票实现
  • Spring系列学习九、Spring MVC的使用
  • 开源内容管理系统Wagtail本地安装运行并结合内网穿透实现公网访问
  • 【蓝桥杯/DFS】路径之谜 (Java)
  • Go语言的内存分配器
  • Swift单元测试Quick+Nimble
  • 详解电源动态响应的测试方法及重要性 -纳米软件
  • 计算机网络系统结构-2020期末考试解析
  • 二叉树的遍历 Java
  • 数据结构之str类
  • Java电影购票小程序在线选座订票电影
  • 24-1-9 bilibilic++音视频
  • 备案(三)
  • Hotspot源码解析-第十九章-ClassLoaderData、符号表、字符串表的初始化
  • impala元数据自动刷新
  • 骑砍战团MOD开发(35)-射击精度系统
  • 树莓派非常实用的程序-3 vcdbg
  • jmeter分布式服务搭建
  • vue中el-radio无法默认选中
  • 分布式I/O应用于智慧停车场的方案介绍
  • node后端+vue前端实现接口请求时携带authorization验证