Jenkins Kubernetes

news/2024/4/25 20:19:19/文章来源:https://blog.csdn.net/xiaolyuh123/article/details/130367071

Kubernetes集成Harbor

Harbor 私服配置

在Kubernetes的master和所有worker节点上加上harbor配置,修改daemon.json,支持Docker仓库,并重启Docker。

sudo vim /etc/docker/daemon.json {"registry-mirrors": ["https://jrabvn1q.mirror.aliyuncs.com"],"insecure-registries":["192.168.232.7:80"]
}sudo systemctl daemon-reload
sudo systemctl restart docker

Harbor 账户配置

image.png
image.png

测试示例

编写pipeline-test.yml文件,将我们前面通过jenkins打包的镜像部署到kubernetes中。

apiVersion: apps/v1
kind: Deployment
metadata:                        # metadata字段包含对Deployment的描述信息name: pipeline-test-deploymentnamespace: testlabels:app: pipeline-test-pod      # 标签字段用于识别Pod
spec:replicas: 2                   # 定义副本数量selector:matchLabels:app: pipeline-test-podtemplate:metadata:labels:app: pipeline-test-podspec:containers:# 定义nginx容器- name: pipeline-testimage: 192.168.232.7:80/repository/pipeline-test:v1.0.0imagePullPolicy: Always # 定义拉取镜像的方式(每次都拉取)ports:- containerPort: 80protocol: TCPresources:requests:cpu: 200m            # 请求时申请CPU资源为0.2核memory: 256Mi        # 请求时申请内存资源为256Mlimits:cpu: 500m            # 限定CPU资源上限为0.5核memory: 512Mi        # 限定内存资源上限为512M
---
apiVersion: v1
kind: Service
metadata:name: pipeline-test-servicenamespace: test
spec:selector:app: pipeline-test-podports:- name: pipeline-testport: 8888targetPort: 80
--- 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: pipeline-test-ingressnamespace: test
spec:ingressClassName: pipeline-test-ingressrules:- host: pipeline-test.xiaoyuh.comhttp:paths:- pathType: Prefix       # 前缀匹配模式path: "/"backend:service:name: pipeline-test-serviceport:number: 8888

执行命令运行服务:

[root@k8s-master ~]# kubectl apply -f pipeline-test.yml
deployment.apps/pipeline-test-deployment created
service/pipeline-test-service created
ingress.networking.k8s.io/pipeline-test-ingress created

image.png

修改本地host

admin@wangyuhao ~ % sudo vim /etc/hosts
192.168.232.8 nginx.xiaoyuh.com
192.168.232.8 tomcate.xiaoyuh.com
192.168.232.8 pipeline-test.xiaoyuh.com

本地验证
image.png

Jenkins集成Kubernetes

将刚刚编写的yml文件放到git中

image.png

将yml文件传输到K8s的Master

配置Jenkins的目标服务器

image.png

image.png

将yml文件传输到K8s的Master上

  1. 生成流水线语法

image.png

  1. 将语句替换到Jenkinsfile
        stage('推送yml文件到k8s') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'echo 1', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: './k8s/$JOB_BASE_NAME.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}

SSH Key 配置

进入jenkins容器生成新的ssh key

[root@localhost mytest]# docker exec -it jenkins bash
jenkins@790140a70e6f:/$ cd /var/jenkins_home/
jenkins@790140a70e6f:~$ ssh-keygen -t rsa -C "wangyuhao01@163.com" 
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa): 
Created directory '/var/jenkins_home/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/jenkins_home/.ssh/id_rsa
Your public key has been saved in /var/jenkins_home/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:LJt2FmYqJFN6fUrn64TtXPgOTigPKLVwLwFJjNK+5Wo wangyuhao01@longfor.com
The key's randomart image is:
+---[RSA 3072]----+
|oo               |
|+o.              |
|+.  .            |
| ..o.. .         |
|. B+o + S        |
| +.X.. / o       |
|. +.= O X .      |
| .E. * O =       |
| .    ..*.o      |
+----[SHA256]-----+ 
[root@localhost data]# cd .ssh/
[root@localhost .ssh]# ls
id_rsa  id_rsa.pub

将公钥配id_rsa.pub置到k8s-master服务器上,私钥id_rsa配置到jenkins全局凭据。

公钥配id_rsa.pub置到k8s-master服务器上

  1. 客户端执行 ssh-copy-id root@服务端IP 将本机的id_rsa.pub公钥内容追加到服务端的/root/.ssh/authorized_keys 文件中。
jenkins@d043db9e06fe:~/.ssh$ ssh-copy-id root@192.168.232.9
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/var/jenkins_home/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.232.9's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@192.168.232.9'"
and check to make sure that only the key(s) you wanted were added.

2、客户端执行 ssh root@服务端IP,就直接登录到服务端了

jenkins@d043db9e06fe:~/.ssh$ ssh root@192.168.232.9 ls
anaconda-ks.cfg
calico-3.13.1.yaml
kubeadm-config.yaml
my-namespace.yaml
nginx-tomcate-deployment.yml
nginx-tomcate-ingress.yml
nginx-tomcate-pod.yml
nginx-tomcate-service.yml
pipeline-test.yml

私钥id_rsa配置到jenkins全局凭据

image.png

image.png

image.png

image.png

通过SSH的方式执行kubectl

image.png

        stage('远程通过k8s-master部署服务') {steps {sh 'ssh root@192.168.232.9 kubectl apply -f k8s/$JOB_BASE_NAME.yml'}}

完整的Jenkinsfile文件

pipeline {agent any// 存放所有任务的合集stages {stage('拉取Git代码') {steps {checkout([$class: 'GitSCM', branches: [[name: '${branch}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee_ssh_key', url: 'git@gitee.com:xiaolyuh/test.git']]])}}stage('Maven构建打包') {steps {sh ' /var/jenkins_home/maven/apache-maven-3.8.8/bin/mvn clean package -DskipTests'}}stage('制作Docker镜像') {steps {sh '''mv **/target/*.jar docker/app.jarecho "build Image start"docker build -t $JOB_BASE_NAME:$tag docker/echo "build Image success"'''}}stage('Docker镜像推送Harbor') {steps {sh '''password=ucTv2l1XeBdgO9tkseoyWVLh47sRN9Pyecho "$password" | docker login $harbor_url --username \'robot$devops\' --password-stdindocker tag $JOB_BASE_NAME:$tag $harbor_url/$harbor_object/$JOB_BASE_NAME:$tagecho "push Image start"docker push $harbor_url/$harbor_object/$JOB_BASE_NAME:$tagecho "push Image success"'''}}stage('推送yml文件到k8s') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: 'k8s-master', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'echo 1', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '**/k8s/$JOB_BASE_NAME.yml')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}stage('远程通过k8s-master部署服务') {steps {sh 'ssh root@192.168.232.9 kubectl apply -f k8s/$JOB_BASE_NAME.yml'}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_103361.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序 开发中的问题(simba_wx)

目录 一、[将 proto 文件转成 json 文件](https://blog.csdn.net/wzxzRoad/article/details/129300513)二、[使用 test.json 文件](https://blog.csdn.net/wzxzRoad/article/details/129300513)三、[微信小程序插件网址](https://ext.dcloud.net.cn/)四、[vant-weapp网址](http…

从0搭建Vue3组件库(八):使用 release-it 实现自动管理发布组件库

使用 release-it 实现自动管理发布组件库 上一篇文章已经打包好我们的组件库了,而本篇文章将介绍如何发布一个组件库。当然本篇文章介绍的肯定不单单只是发布那么简单。 组件库发布 我们要发布的包名为打包后的 easyest,因此在 easyest 下执行pnpm init生成package.json {&…

本地缓存解决方案Caffeine | Spring Cloud 38

一、Caffeine简介 Caffeine是一款高性能、最优缓存库。Caffeine是受Google guava启发的本地缓存(青出于蓝而胜于蓝),在Cafeine的改进设计中借鉴了 Guava 缓存和 ConcurrentLinkedHashMap,Guava缓存可以参考上篇:本地缓…

【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata

NacosSentinelSeata 9/9 1、SpringCloud Alibaba简介1.1 主要功能1.2 具体组件 2、SpringCloud Alibaba Nacos服务注册和配置中心2.1 Nacos介绍2.2 Nacos下载安装2.3 使用Nacos作为注册中心2.3.1 在父工程的pom文件中引入springcloudalibaba依赖2.3.2 创建cloudalibaba-provide…

适合学生党的蓝牙耳机品牌有哪些?性价比高的无线耳机推荐

相较于有线耳机,蓝牙耳机的受欢迎程度可谓是越来越高,当然,这也离不开部分手机取消耳机孔的设计。最近看到很多网友问,适合学生党的蓝牙耳机品牌有哪些?针对这个问题,我来给大家推荐几款性价比高的无线耳机…

static_cast、dynamic_cast和reinterpret_cast区别和联系

其实网上相关的资料不少,但是能够说清楚明白这个问题的也不多。 于是,我尝试着问了一下AI,感觉回答还可以,但是需要更多的资料验证。 让我们先看看AI是怎么回答这个问题的。 static_cast、dynamic_cast和reinterpret_cast都是C中…

视频音频提取器推荐:快速提取视频中的音频!

视频中的音频可以用于很多用途,比如制作配乐、音频剪辑等。但是,许多人并不知道如何将视频中的音频提取出来。如果您也是这样的情况,那么本文为您介绍一个简单易用的视频音频提取器:。 它是一个免费的在线工具,可以帮…

如何在Web上实现激光点云数据在线浏览和展示?

无人机激光雷达测量是一项综合性较强的应用系统,具有数据精度高、层次细节丰富、全天候作业等优势,能够精确测量三维现实世界,为各个行业提供了丰富有效的数据信息。但无人机激光雷达测量产生的点云数据需要占用大量的存储空间,甚…

DataGridView 真·列头不高亮 真·列头合并

高亮BUG VB.Net,在 .NET Framework 4.8 的 WinForm 下(即不是 WPF 的绘图模式、也不是 Core 或 Mono 的开发框架),使用 DataGridView 行模式,还是有个列头表现为高亮显示: 查找各种解决方式: 设置 ColumnHeadersDefaultCellSty…

YOLOv1代码复现2:数据加载器构建

YOLOv1代码复现2:数据加载器构建 前言 ​ 在经历了Faster-RCNN代码解读的摧残后,下决心要搞点简单的,于是便有了本系列的博客。如果你苦于没有博客详细告诉你如何自己去实现YOLOv1,那么可以看看本系列的博客,也许可以帮…

【Java实战篇】Day13.在线教育网课平台--生成支付二维码与完成支付

文章目录 一、需求:生成支付二维码1、需求分析2、表设计3、接口定义4、接口实现5、完善controller 二、需求:查询支付结果1、需求分析2、表设计与模型类3、接口定义4、接口实现步骤一:查询支付结果步骤二:保存支付结果&#xff08…

VUE3如何定义less全局变量

默认已经安装好了less,这里不过多讲。 (1)首先我们需要下载一个插件依赖: npm i style-resources-loader --save-dev (2)VUE3里配置vue.config.js文件内容 代码: const path require("p…

HashMap如何解决哈希冲突

HashMap如何解决哈希冲突 Hash算法和Hash表Hash冲突解决哈希冲突的方法开放地址法链式寻址法再hash法建立公共溢出区 Hash算法和Hash表 Hash算法就是把任意长度的输入通过散列算法编程固定长度的输出。这个输出结果就是一个散列值。 Hash表又称为“散列表”,它是通…

SpringBoot中一个注解优雅实现重试Retry框架

目录: 1、简介2、实现步骤 1、简介 重试,在项目需求中是非常常见的,例如遇到网络波动等,要求某个接口或者是方法可以最多/最少调用几次;实现重试机制,非得用Retry这个重试框架吗?那肯定不是,相信…

Mysql 查询同类数据中某一数字最大的所有数据

方法一、将时间进行排序后再分组 该表表名为customer, park_id表示园区id,joined_at表示用户的加入时间,created_at表示用户的创建时间。 需求:查出每个园区中,最早加入园区的第一位用户 select * from (select * from custome…

数据库课设--基于Python+MySQL的餐厅点餐系统(表的设计)

文章目录 一、系统需求分析二、系统设计1. 功能结构设计2、概念设计2.2.1 bill_food表E-R图2.2.2 bills表E-R图2.2.3 categories E-R图2.2.4 discounts表 E-R图2.2.5 emp表E-R图2.2.6 food 表E-R图2.2.7 member表E-R图2.2.8 member_point_bill表E-R图2.2.9 servers表E-R图2.2.1…

操作系统考试复习—第二章 2.1 2.2程序和进程的描述

第二章 进程的描述与控制 程序:有序的指令集合 程序顺序执行的特征:1.顺序性 2.封闭性 3.可再现性(确定性) 在多道程序环境下,允许多个程序并发执行,此时他们将失去封闭性,并具有间断性和不可再现性的特征。为此引…

基于SGM431的电路设计问题分析

本案例中,采用SGM431芯片设计了一个过压保护电路。 这个电路初次设计,有很多的问题,下面逐一分析 1.当输入24V,测得Vref=1.59V。Vout为1.15V;,mos管关断 2。经过多次测量发现,临界值在10V到10.5之间; 当输入10.5V时,测量Vref=1.69V。vout=1.15V;mos管关断 当输入1…

智慧物联网边缘协同感知(EICS)技术方案: 低功耗无线扫描唤醒技术

物联网的传感器或控制节点通常有体积限制,只能使用钮扣电池、小型电池,甚至使用能量收集源进行运作。在许多工业应用中,需要人工更换电池的成本,特别是在难以接近地方更换所需的成本,使得人们更加重视降低平均电流消耗…

深度学习入门到实践:相关基础概述

绪论 深度学习(Deep Learning)是近年来发展十分迅速的研究领域,并且在人工智能的很多子领域都取得了巨大的成功。从根源来讲,深度学习是机器学习的一个分支,是指一类问题以及解决这类问题的方法。     深度学习问题…