【云原生】Kubernetes部署Jenkins静动Slave

Kubernetes部署Jenkins静动Slave

文章目录

  • Kubernetes部署Jenkins静动Slave
    • 文档介绍
    • 资源列表
    • 基础环境
    • 一、Jenkins Kubernetes清单文件
    • 二、使用静态Slave
      • 2.1、安装Kubernetes插件
      • 2.2、添加Agent
      • 2.3、使用Slave
    • 三、使用动态Slave
      • 3.1、添加凭据
      • 3.2、配置动态Slave
      • 3.3、配置Jenkins地址和通道
      • 3.4、配置Pod模板
      • 3.5、确定拉取端口是否开启50000
      • 3.6、使用Slave

文档介绍

  • Kubernetes是一个开源的系统,用于自动化部署、扩展、以及容器化应用程序的管理。
  • Kubernetes集群向Jenkins添加了一个新的自动化层。Kubernetes确保资源得到有效利用,并且您的服务器底层基础设施不会过载。Kubernetes编排容器部署的能力确保Jenkins始终具有适量的可用资源。
  • Kubernetes集群上托管Jenkins有利于基于Kubernetes的把部署和基于容器的动态可扩展Jenkins代理。在这里,我们看到了在Kubernetes集群上设置Jenkins的分步过程。

资源列表

操作系统配置主机名IP角色
CentOS 7.92C4Gmaster192.168.93.145master
CentOS 7.92C4Gnode1192.168.93.146node1
CentOS 7.92C4Gnode2192.168.93.147node2

基础环境

  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config

一、Jenkins Kubernetes清单文件

  • 此处使用的所有Jenkins Kubernetes清单文件都托管在GitHub上(克隆存储库)
[root@master ~]# yum -y install git
[root@master ~]# git clone https://github.com/scriptcamp/kubernetes-jenkins
[root@master ~]# cd kubernetes-jenkins/
  • 第1步:为Jenkins创建Namespace。最好将所有DevOps工具分类为单独与其他应用程序的名称空间。
[root@master kubernetes-jenkins]# kubectl apply -f namespace.yaml
  • 第2步:加载“serviceAccount.yaml”文件
# serviceAccount.yaml创建一个“jenkins-admin” clusterRole、“jenkins-admin”ServiceAccount,并将“clusterRole”绑定到服务账户
# jenkins-admin集群角色具有管理集群组件的所有权限。您还可以通过指定单个资源操作来限制访问
[root@master kubernetes-jenkins]# kubectl apply -f serviceAccount.yaml
  • 第3步:加载“volume.yaml”,用于持久化数据
# 需要把此文件中的nodename选择器改为自己集群node节点的名字
# 对于卷,我们使用“local”存储类进行演示。这意味着,他会在“/mnt”位置下的特定节点中创建一个PV卷
# 由于“local”存储类需要节点选择器,因此您需要正确指定Jenkins Pod的工作节点名称,以便在特定节点中调度
# 如果Pod被删除或者重新启动,数据将持久化在节点卷中。但是,如果节点被删除,您将丢失所有数据[root@master kubernetes-jenkins]# cat volume.yamlnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- node1  # 改为集群中可用node节点的名称即可
[root@master kubernetes-jenkins]# kubectl apply -f volume.yaml
  • 第4步:加载deployment.yaml
# 在此文件中,我们使用了以下内容
# “securityContext”以便Jenkins Pod能够写入本地持久卷
# 运行情况和就绪情况探针,用于监控Jenkins Pod的运行情况
# 基于保存Jenkins数据路径“/var/jenkins_home”的本地存储类的本地持久化[root@master kubernetes-jenkins]# kubectl apply -f deployment.yaml
  • 第5步:加载service.yaml,用于服务暴露
# 更改为如下内容
[root@master kubernetes-jenkins]# cat service.yaml 
apiVersion: v1
kind: Service
metadata:name: jenkins-servicenamespace: devops-toolsannotations:prometheus.io/scrape: 'true'prometheus.io/path:   /prometheus.io/port:   '8080'
spec:selector: app: jenkins-servertype: NodePort  ports:- name: jenkinsport: 8080targetPort: 8080nodePort: 32000- name: jnlpport: 50000
[root@master kubernetes-jenkins]# kubectl apply -f service.yaml
  • 第6步:查看所需资源是否准备就绪
[root@master kubernetes-jenkins]# kubectl get pod,svc -n devops-tools 
NAME                          READY   STATUS    RESTARTS   AGE
pod/jenkins-b96f7764f-5vq6f   1/1     Running   0          18mNAME                      TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                          AGE
service/jenkins-service   NodePort   10.98.217.62   <none>        8080:32000/TCP,50000:31218/TCP   15m
  • 访问Jenkins:访问地址http://192.168.93.145:320000

在这里插入图片描述

  • 查看解锁Jenkins密码
# 此解锁密码在Jenkins的持久化目录里面
# 我的持久化节点是node1
[root@node1 secrets]# pwd
/mnt/secrets
[root@node1 secrets]# cat initialAdminPassword 
a49a05b23a634ab1b1a8f42b2f5fc7da
  • 在线安装所需插件,如果中途有插件没有安装成功,可以选择登录Jenkins之后进行手动安装

在这里插入图片描述
在这里插入图片描述

  • 安装插件成功的情况下,也许会比我多几个需要填写的,这些都不是重点

在这里插入图片描述

二、使用静态Slave

  • Jenkins静态Slave是指在Jenkins环境中配置一个或多个固定的从属节点,这些节点的配置是静态的,不会频繁改变。

2.1、安装Kubernetes插件

  • 依次点击“Dashboard”>“Manager Jenkins”>“插件管理”,搜索“Kubernetes插件”然后安装即可
    在这里插入图片描述

2.2、添加Agent

  • 依次点击“Dashboard”>“系统管理”>“节点和云管理”
    在这里插入图片描述

  • 添加Agent的名称,然后点击固定节点,最后点击Create(当然你可以创建多个Agent)
    在这里插入图片描述

  • 填写远程工作目录(远程目录为Pod中容器的目录)、标签(作用:标签的作用就是等下进行发布任务的是时候指定那个Pod进行运行)、启动方式
    在这里插入图片描述

  • 点进去,此时的Agent还没有并注册所以不能使用,接下来开始注册

  • 此处需要记下来secret地址
    在这里插入图片描述

  • 我们拿到这些之后我们需要去创建一个Deployment来支持这个Agent了。不过这里最好不要用/root当Pod的远程目录,是否可能会出现权限问题

[root@master kubernetes-jenkins]# cat agent1.yaml 
kind: Deployment
apiVersion: apps/v1
metadata:name: jenkins-agentnamespace: devops-toolslabels:app: jenkins-agent
spec:replicas: 1selector:matchLabels:app: jenkins-agenttemplate:metadata:labels:app: jenkins-agentspec:containers:- name: jenkins-agentimage: jenkins/inbound-agent:latestenv:- name: JENKINS_URLvalue: "http://jenkins-service:8080"  # 更改为你的jenkins的svc名称- name: JENKINS_SECRETvalue: "653ed5a4393781d9abff71f28a12ca1f8256330c0c55468688ad71cfd69bed85"  # 填写上面图片中查到的secret地址- name: JENKINS_AGENT_NAMEvalue: "k8s-agent1"  # 添加刚刚创建的Agent的名称- name: JENKINS_AGENT_WORKDIRvalue: "/tmp"  # 添加刚刚创建的Agent的远程目录# 加载资源
[root@master kubernetes-jenkins]# kubectl apply -f agent1.yaml
# 查看静态Agent是否创建并且查看日志是否注册成功
[root@master kubernetes-jenkins]# kubectl get pod -n devops-tools 
NAME                            READY   STATUS    RESTARTS      AGE
jenkins-agent-ff7579bdd-k75l9   1/1     Running   0             14s
jenkins-b96f7764f-5vq6f         1/1     Running   1 (12m ago)   45m[root@master kubernetes-jenkins]# kubectl logs -n devops-tools jenkins-agent-ff7579bdd-k75l9
# 最后的几行回显
INFO: Waiting for ProtocolStack to start.
Oct 19, 2024 6:58:16 AM hudson.remoting.Launcher$CuiListener status
INFO: Remote identity confirmed: c3:fe:45:30:0a:87:b2:0d:aa:37:d7:dd:92:84:64:75
Oct 19, 2024 6:58:16 AM hudson.remoting.Launcher$CuiListener status
INFO: Connected
  • 此时通过Web界面就可以很明显看到Agent注册成功了
    在这里插入图片描述

2.3、使用Slave

  • 创建一个pipeline流水线项目,项目名称自定义
pipeline {agent {node {label "agent1"  //这个是Agent1的标签,意味着又这个标签的Agent来运行此次项目}}stages {stage('静态slave') {steps {echo 'Hello 静态slave'}}}
}

在这里插入图片描述
在这里插入图片描述

  • 如果你想让此静态Pod构建Maven、NodeJs项目,那么可以把运行此Agent的Pod宿主机上的Java或者、Maven目录挂载到Pod中即可

三、使用动态Slave

  • Jenkins动态Slave是指在JenkinsCICD系统中,根据需求动态生成、管理和销毁构建代理(Slave)节点的一种方式。与静态代理节点不同,静态代理是预先配置的固定节点,而动态代理则可以在需要时根据任务自动化创建Pod去运行,运行完成自动销毁Pod。

3.1、添加凭据

  • 添加K8S的凭据,把K8S的master节点下的/root/.kube/config文件复制到物理机上,后面需要使用
# 此文件复制到物理机上
[root@master ~]# ls /root/.kube/
cache  config

在这里插入图片描述
在这里插入图片描述

3.2、配置动态Slave

  • 连接Kubernetes集群
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3、配置Jenkins地址和通道

  • Jenkins通道地址通过以下方式获取端口
  • 我的Jenkins地址和通道地址如下
    • http://192.168.93.145:32000 Jenkins地址
    • 192.168.93.145:31218 Jenkins通道地址
# 对外暴露的50000端口就是Jenkins通道端口
[root@master ~]# kubectl get svc -n devops-tools 
NAME              TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                          AGE
jenkins-service   NodePort   10.98.217.62   <none>        8080:32000/TCP,50000:31218/TCP   62m

在这里插入图片描述

3.4、配置Pod模板

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 添加容器
  • 名称填写“jnlp”,镜像填写“jenkins/inbound-agent:latest”
  • 运行的命令和命令参数为空

在这里插入图片描述
在这里插入图片描述

  • 添加卷
    在这里插入图片描述

在这里插入图片描述

3.5、确定拉取端口是否开启50000

  • 默认开启
    在这里插入图片描述
    在这里插入图片描述

3.6、使用Slave

  • 创建一个pipeline流水线项目,项目名称自定义
    在这里插入图片描述
pipeline {agent {node {label "jnlp"   //这个是动态slave的标签,意味着又这个标签的Agent来运行此次项目}}stages {stage('动态slave') {steps {echo 'Hello 动态slave'sleep 60}}}
}
  • 最后点击保存,构建项目
  • 构建的时候K8S会自动创建Pod,构建完成之后自动销毁
# 构建项目时内容如下
[root@master ~]# kubectl get pod -n devops-tools 
NAME                            READY   STATUS    RESTARTS      AGE
jenkins-agent-ff7579bdd-k75l9   1/1     Running   0             39m
jenkins-b96f7764f-5vq6f         1/1     Running   1 (51m ago)   84m
jnlp-4h92g                      1/1     Running   0             10s   # 这个就是动态Slave自动创建的Pod
# 构建项目后内容如下
# 项目构建成功后意味着任务结束,所以Pod就会被自动创建
[root@master ~]# kubectl get pod -n devops-tools 
NAME                            READY   STATUS    RESTARTS      AGE
jenkins-agent-ff7579bdd-k75l9   1/1     Running   0             40m
jenkins-b96f7764f-5vq6f         1/1     Running   1 (52m ago)   85m

在这里插入图片描述

  • 如果你想让此动态Pod构建Maven、NodeJs项目,那么可以把运行此Agent的Pod宿主机上的Java或者、Maven目录挂载到Pod中即可具体挂载的操作大致如下
  • 通过卷把相应的脚本或者二进制可执行文件挂载即可
    在这里插入图片描述

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

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

相关文章

基于SpringBoot+Vue+uniapp微信小程序的澡堂预订的微信小程序的详细设计和实现

项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念&#xff0c;提供了一套默认的配置&#xff0c;让开发者可以更专注于业务逻辑而不是配置文件。Spring Boot 通过自动化配置和约…

【深度学习中的注意力机制6】11种主流注意力机制112个创新研究paper+代码——加性注意力(Additive Attention)

【深度学习中的注意力机制6】11种主流注意力机制112个创新研究paper代码——加性注意力&#xff08;Additive Attention&#xff09; 【深度学习中的注意力机制6】11种主流注意力机制112个创新研究paper代码——加性注意力&#xff08;Additive Attention&#xff09; 文章目录…

kubernetes(三)

k8s之持久化存储pv&pvc 存储资源管理 在基于k8s容器云平台上&#xff0c;对存储资源的使用需求通常包括以下几方面&#xff1a; 1.应用配置文件、密钥的管理&#xff1b; 2.应用的数据持久化存储&#xff1b; 3.在不同的应用间共享数据存储&#xff1b; k8s支持Volume类…

Spring MVC文件请求处理-MultipartResolver

Spring Boot中的MultipartResolver是一个用于解析multipart/form-data类型请求的策略接口&#xff0c;通常用于文件上传。 对应后端使用MultipartFile对象接收。 RequestMapping("/upload")public String uploadFile(MultipartFile file) throws IOException {Strin…

十一、数据库配置

一、Navicat配置 这个软件需要破解 密码是&#xff1a;123456&#xff1b; 新建连接》新建数据库 创建一个表 保存出现名字设置 双击打开 把id设置为自动递增 这里就相当于每一次向数据库添加一个语句&#xff0c;会自动增长id一次 二、数据库的增删改查 1、Vs 建一个控…

磁编码器的工作原理和特点

目录 概述 1 磁编码器的构造 1.1 霍尔元件 1.2 永磁体 1.3 永磁体和霍尔元件的配置 2 磁编码器的工作原理 2.1 原理介绍 2.2 电气信号转换成角度 2.3 旋转角度传感器IC 3 磁编码器的特点和主要应用 概述 本文主要介绍磁编码器的构造原理&#xff0c;工作特性和应用特…

C/C++函数调用约定:__cdecl、__stdcall、__fastcall和__thiscall

目录 1.引言 2.常见函数调用约定 2.1.__cdecl 2.2.__stdcall 2.3.__fastcall 2.4.__thiscall 3.几种调用约定比较 4.注意事项 1.引言 在C和C编程中&#xff0c;函数调用约定&#xff08;Calling Convention&#xff09;定义了函数如何接收参数、如何返回值以及由谁来清…

【小沐学Golang】基于Go语言搭建静态文件服务器

文章目录 1、简介2、安装2.1 安装版2.2 压缩版 3、基本操作3.1 go run3.2 go build3.3 go install3.4 go env3.5 go module 4、文件服务器4.1 filebrowser4.2 gohttpserver4.3 goFile 5、FAQ5.1 go.mod 为空5.2 超时 结语 1、简介 https://golang.google.cn/ Go语言诞生于2007…

word表格跨页后自动生成的顶部横线【去除方法】

Hello World! Its been a long time. 这一年重心放在了科研、做事、追寻新的经历上&#xff0c;事有正事、琐事、幸事、哀事&#xff0c;内心与认知成长了一些&#xff0c;思想成熟了几分&#xff0c;技艺也有若干收获。不管怎样&#xff0c;来打个卡吧&#xff0c;纪念一下&…

Web前端高级工程师培训:使用 Node.js 构建一个 Web 服务端程序(3)

11、HTTP 协议 11-1、协议的定义 HTTP 是一种能够获取如 HTML 这样的网络资源的 protocol(通讯协议)。它是在 Web 上进行数据交换的基础&#xff0c;是一种 client-server 协议&#xff0c;也就是说&#xff0c;请求通常是由像浏览器这样的接受方发起的。一个完整的Web文档通…

Tailwind Starter Kit 一款极简的前端快速启动模板

Tailwind Starter Kit 是基于TailwindCSS实现的一款开源的、使用简单的极简模板扩展。会用Tailwincss就可以快速入手使用。Tailwind Starter Kit 是免费开源的。它不会在原始的TailwindCSS框架中更改或添加任何CSS。它具有多个HTML元素&#xff0c;并附带了ReactJS、Vue和Angul…

Docker安装Mysql5.7,解决无法访问DockerHub问题

Docker安装Mysql5.7&#xff0c;解决无法访问DockerHub问题 简介 Docker Hub 无法访问&#xff0c;应用安装失败&#xff0c;镜像拉取超时的解决方案。 摘要 &#xff1a; 当 Docker Hub 无法访问时&#xff0c;可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的…

使用爬虫爬取Python中文开发者社区基础教程的数据

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

微信小程序文本收起展开

这里写自定义目录标题 微信小程序文本收起展开常见问题的梯形背景框 微信小程序文本收起展开 参考 https://juejin.cn/post/6963904955262435336 <!-- 常见问题解答 --><view classcontentBottom><view classBottomFirst><text id0 data-id0 class&quo…

python + mitmproxy 爬手机app (1)

起因&#xff0c; 目的: 想爬手机上某鱼。 mitmproxy 简介: 一句话: mitmproxy 就是中间人攻击. (只不过&#xff0c; 你安装&#xff0c;就代表你愿意承担风险。)源码&#xff1a;https://github.com/mitmproxy/mitmproxy文档: https://mitmproxy.org/ 安装过程: 见聊天记…

eCAP超声波测距-ePWM电机调速

目录 eCAP超声波测距 整体框架 关键模块 实验效果 PWM电机调速 DRV8833基本介绍 整体框架 eCAP超声波测距 本实验所用的超声波HC-SR04模块如下图所示&#xff0c;左边为正面图&#xff0c;右边为反面图。 HC-SR04基本工作原理&#xff1a; &#xff08;1&#xff09;采…

spring源码中的,函数式接口,注解@FunctionalInterface

调用方 /org/springframework/beans/factory/support/AbstractBeanFactory.java:333sharedInstance getSingleton(beanName, () -> {try {return createBean(beanName, mbd, args);}catch (BeansException ex) {// Explicitly remove instance from singleton cache: It mi…

Kafka之消费者客户端

1、历史上的二个版本 与生产者客户端一样&#xff0c;在Kafka的发展过程当中&#xff0c;消费者客户端主要有两个大的版本&#xff1a; 旧消费者客户端&#xff08;Old Consumer&#xff09;&#xff1a;基于Scala语言开发的版本&#xff0c;又称为Scala消费者客户端。新消费…

rpm 命令

rpm&#xff08;Red Hat Package Manager&#xff09;是 Red Hat Linux 及其衍生发行版&#xff08;如 CentOS、Fedora&#xff09;中用于管理软件包的系统。它允许用户安装、卸载、升级、查询和验证软件包。 一、安装软件包 &#xff08;1&#xff09;安装一个 RPM 软件包&a…

高并发下如何保证接口的幂等性?

前言 接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。 不知道你有没有遇到过这些场景: 有时我们在填写某些form表单时,保存按钮不小心快速点了两次…