基于K8S部署安装Jenkins

news2024/11/13 9:03:38

基于K8S部署安装Jenkins

  • 1.Jenkins Kubernetes 清单文件
  • 2.Kubernetes Jenkins 部署
    • 1:为 Jenkins 创建 Namespace。 最好将所有DevOps工具分类为与其他应用程序分开的命名空间。
    • 2:创建“serviceAccount.yaml”文件并复制以下管理员服务帐户清单。
      • 1. kubectl 创建服务帐户。
    • 3: 创建“volume.yaml”并复制以下持久性卷清单。
      • 1. kubectl 获取工作节点主机名。
      • 2.使用 kubectl 创建卷
    • 4:创建名为“deployment.yaml”的部署文件,并复制以下部署清单。
      • 1.使用 kubectl 创建部署。
      • 2.检查部署状态。
      • 3.查看部署详细信息。
  • 3.使用 Kubernetes 服务访问 Jenkins
      • 1.创建“service.yaml”并复制以下服务清单:
      • 2.使用 kubectl 创建 Jenkins 服务。
      • 3.显示devops-tools所有 Deployme 中的命名空间
      • 4.显示devops-tools所有 Pod 中的命名空间
      • 5.运行 exec 命令直接从如下所示的位置获取密码。
  • 4.访问 Jenkins 仪表板和安装设置

1.Jenkins Kubernetes 清单文件

此处使用的所有 Jenkins Kubernetes 清单文件都托管在 GitHub 上。 克隆存储库。

[root@master test]# git clone https://github.com/scriptcamp/kubernetes-jenkins
正克隆到 'kubernetes-jenkins'...
remote: Enumerating objects: 16, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 16 (delta 1), reused 0 (delta 0), pack-reused 9
接收对象中: 100% (16/16), 完成.
处理 delta 中: 100% (1/1), 完成

root@master test]# cd kubernetes-jenkins/
[root@master kubernetes-jenkins]# ls
deployment.yaml  namespace.yaml  README.md  serviceAccount.yaml  service.yaml  volume.yaml

2.Kubernetes Jenkins 部署

让我们开始在 Kubernetes 上部署 Jenkins。

1:为 Jenkins 创建 Namespace。 最好将所有DevOps工具分类为与其他应用程序分开的命名空间。

[root@master kubernetes-jenkins]# kubectl  create namespace devops-tools
namespace/devops-tools created
#查看空间名
[root@master jenkins]# kubectl get namespaces
NAME              STATUS   AGE
default           Active   6d
devops-tools      Active   58m
ingress-nginx     Active   4d23h
jenkins           Active   3d18h
kube-flannel      Active   6d
kube-node-lease   Active   6d
kube-public       Active   6d
kube-system       Active   6d
[root@master jenkins]

2:创建“serviceAccount.yaml”文件并复制以下管理员服务帐户清单。

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: jenkins-admin
rules:
  - apiGroups: [""]
    resources: ["*"]
    verbs: ["*"]
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins-admin
  namespace: devops-tools
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: jenkins-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: jenkins-admin
subjects:
- kind: ServiceAccount
  name: jenkins-admin
  namespace: devops-tools

serviceAccount.yaml’ 创建一个 ‘jenkins-admin’ clusterRole, ‘jenkins-admin’ ServiceAccount,并将 ‘clusterRole’ 绑定到服务账户。

“jenkins-admin”集群角色具有管理集群组件的所有权限。 您还可以通过指定单个资源操作来限制访问。

1. kubectl 创建服务帐户。

[root@master kubernetes-jenkins]# kubectl apply -f serviceAccount.yaml
clusterrole.rbac.authorization.k8s.io/jenkins-admin created

3: 创建“volume.yaml”并复制以下持久性卷清单。

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: jenkins-pv-volume
  labels:
    type: local
spec:
  storageClassName: local-storage
  claimRef:
    name: jenkins-pv-claim
    namespace: devops-tools
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  local:
    path: /mnt
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - node1 #替换为任何一个集群工作节点主机名
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pv-claim
  namespace: devops-tools
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

重要提示:将“node1”替换为任何一个集群工作节点主机名。

1. kubectl 获取工作节点主机名。

[root@master jenkins]# kubectl get nodes
NAME     STATUS   ROLES                  AGE   VERSION
master   Ready    control-plane,master   6d    v1.23.12
node1    Ready    <none>                 6d    v1.23.12
node2    Ready    <none>                 6d    v1.23.12

对于卷,我们使用“本地”存储类进行演示。 这意味着,它在“/mnt”位置下的特定节点中创建一个“PersistentVolume”卷。

由于“本地”存储类需要节点选择器,因此您需要正确指定工作节点名称,以便 Jenkins pod 在特定节点中进行调度。

如果 pod 被删除或重新启动,数据将保留在节点卷中。 但是,如果节点被删除,您将丢失所有数据。

理想情况下,您应使用云提供商提供的可用存储类的持久卷,或者使用集群管理员提供的持久性卷,以在节点故障时持久化数据。

2.使用 kubectl 创建卷

[root@master kubernetes-jenkins]# kubectl  create  -f volume.yaml 
storageclass.storage.k8s.io/local-storage created

4:创建名为“deployment.yaml”的部署文件,并复制以下部署清单。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: jenkins
  namespace: devops-tools
spec:
  replicas: 1
  selector:
    matchLabels:
      app: jenkins-server
  template:
    metadata:
      labels:
        app: jenkins-server
    spec:
      securityContext:
            fsGroup: 1000
            runAsUser: 1000
      serviceAccountName: jenkins-admin
      containers:
        - name: jenkins
          image: jenkins/jenkins:lts
          resources:
            limits:
              memory: "2Gi"
              cpu: "1000m"
            requests:
              memory: "500Mi"
              cpu: "500m"
          ports:
            - name: httpport
              containerPort: 8080
            - name: jnlpport
              containerPort: 50000
          livenessProbe:
            httpGet:
              path: "/login"
              port: 8080
            initialDelaySeconds: 90
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 5
          readinessProbe:
            httpGet:
              path: "/login"
              port: 8080
            initialDelaySeconds: 60
            periodSeconds: 10
            timeoutSeconds: 5
            failureThreshold: 3
          volumeMounts:
            - name: jenkins-data
              mountPath: /var/jenkins_home
      volumes:
        - name: jenkins-data
          persistentVolumeClaim:
              claimName: jenkins-pv-claim

在这个 Jenkins Kubernetes 部署中,我们使用了以下内容:

1.ecurityContext’,以便 Jenkins pod 能够写入本地持久卷。

2.活动和就绪情况探测,用于监视 Jenkins pod 的运行状况。

3.基于保存 Jenkins 数据路径“/var/jenkins_home”的本地持久性卷。

如果不需要本地存储持久卷,可以将部署中的卷定义替换为主机目录,如下所示。

volumes:
- name: jenkins-data
  emptyDir: \{}

1.使用 kubectl 创建部署。

[root@master kubernetes-jenkins]# kubectl apply -f deployment.yaml
deployment.apps/jenkins created

2.检查部署状态。

[root@master kubernetes-jenkins]# kubectl get deployments -n devops-tools
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
jenkins   0/1     1            0           9s

3.查看部署详细信息。

[root@master kubernetes-jenkins]# kubectl describe deployments --namespace=devops-tools
Name:                   jenkins
Namespace:              devops-tools
CreationTimestamp:      Sun, 04 Aug 2024 22:15:18 -0400
Labels:                 <none>
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               app=jenkins-server
Replicas:               1 desired | 1 updated | 1 total | 0 available | 1 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:           app=jenkins-server
  Service Account:  jenkins-admin
  Containers:
   jenkins:
    Image:       jenkins/jenkins:lts
    Ports:       8080/TCP, 50000/TCP
    Host Ports:  0/TCP, 0/TCP
    Limits:
      cpu:     1
      memory:  2Gi
    Requests:
      cpu:        500m
      memory:     500Mi
    Liveness:     http-get http://:8080/login delay=90s timeout=5s period=10s #success=1 #failure=5
    Readiness:    http-get http://:8080/login delay=60s timeout=5s period=10s #success=1 #failure=3
    Environment:  <none>
    Mounts:
      /var/jenkins_home from jenkins-data (rw)
  Volumes:
   jenkins-data:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  jenkins-pv-claim
    ReadOnly:   false
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Available      False   MinimumReplicasUnavailable
  Progressing    True    ReplicaSetUpdated
OldReplicaSets:  <none>
NewReplicaSet:   jenkins-b96f7764f (1/1 replicas created)
Events:
  Type    Reason             Age   From                   Message
  ----    ------             ----  ----                   -------
  Normal  ScalingReplicaSet  14s   deployment-controller  Scaled up replica set jenkins-b96f7764f to 1

3.使用 Kubernetes 服务访问 Jenkins

现在,我们已经创建了一个部署。 但是,它无法向外界开放。 为了从外部世界访问 Jenkins 部署,我们需要创建一个服务并将其映射到部署。

1.创建“service.yaml”并复制以下服务清单:

apiVersion: v1
kind: Service
metadata:
  name: jenkins-service
  namespace: devops-tools
  annotations:
      prometheus.io/scrape: 'true'
      prometheus.io/path:   /
      prometheus.io/port:   '8080'
spec:
  selector:
    app: jenkins-server
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 32000

在这里,我们使用类型为“NodePort”,它将在端口 32000 上的所有 kubernetes 节点 IP 上公开 Jenkins。 如果您有入口设置,则可以创建入口规则来访问 Jenkins。 此外,如果您在 AWS、Google 或 Azure 云上运行集群,则可以将 Jenkins 服务公开为 Loadbalancer。

2.使用 kubectl 创建 Jenkins 服务。

[root@master kubernetes-jenkins]# kubectl apply -f service.yaml
service/jenkins-service created

3.显示devops-tools所有 Deployme 中的命名空间

[root@master kubernetes-jenkins]# kubectl get deployments -n devops-tools
NAME      READY   UP-TO-DATE   AVAILABLE   AGE
jenkins   0/1     1            0           31s

4.显示devops-tools所有 Pod 中的命名空间

[root@master kubernetes-jenkins]# kubectl get pods --namespace=devops-tools
NAME                      READY   STATUS    RESTARTS   AGE
jenkins-b96f7764f-7zzbn   1/1     Running   0          3m5s

5.运行 exec 命令直接从如下所示的位置获取密码。

kubectl exec -it jenkins-b96f7764f-7zzbn cat /var/jenkins_home/secrets/initialAdminPassword -n devops-tools

4.访问 Jenkins 仪表板和安装设置

浏览器输入:http://<node-ip>:32000

将 管理员账户密码 复制到对应的地方,点击 继续
将 管理员账户密码 复制到对应的地方,点击 继续
这里建议点击 选择插件来安装,在点击 无 ,不安装任何插件,再点击 安装,因为我们没有配置镜像,安装插件是从外网下载过来的,会比较慢,并且下载的插件可能会出现不兼容等状况,导致失败率很高
这里建议点击 选择插件来安装,在点击 无 ,不安装任何插件,再点击 安装,因为我们没有配置镜像,安装插件是从外网下载过来的,会比较慢,并且下载的插件可能会出现不兼容等状况,导致失败率很高
在这里插入图片描述
[进入到创建管理员页面,填写账户信息后 保存并完成

进入到创建管理员页面,填写账户信息后 保存并完成
进入以下页面配置 jenkins 的 url ,一般使用默认的就行了,保存并完成
进入以下页面配置 jenkins 的 url ,一般使用默认的就行了,保存并完成
可以点击 开始使用 Jenkins 直接登录进入 Jenkins
可以点击 开始使用 Jenkins 直接登录进入 Jenkins

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

174.地下城游戏——LeetCode

题目 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻…

文章生成器免费版,自动写作文章让你无创作之忧

对于创作者而言&#xff0c;长期的内容输出都会遇到写作瓶颈发生&#xff0c;这常常让许多创作者陷入写作困难。而当前解决写作困难最好的方法就是文章生成器了&#xff0c;它自动写作文章的优势让广大的创作者有目共睹&#xff0c;并且是很多创作者们在内容创作中人手必备的神…

Gateway实现Redis拉取信息+用户模块开发

文章目录 &#x1f31e; Sun Frame&#xff1a;SpringBoot 的轻量级开发框架&#xff08;个人开源项目推荐&#xff09;&#x1f31f; 亮点功能&#x1f4e6; spring cloud模块概览常用工具 &#x1f517; 更多信息1.Gateway实现Redis拉取信息1.目录结构2.RedisConfig.java3.Re…

无人机动力系统详解

一、动力源 动力源是无人机动力系统的核心&#xff0c;负责提供飞行所需的能量。 二、传动系统 传动系统负责将动力源产生的能量传递到无人机的旋翼或螺旋桨上&#xff0c;使其产生升力。 三、控制系统 控制系统是无人机动力系统的“大脑”&#xff0c;它根据飞行指令和传…

C++ 正则表达式调试器

设计背景 部分网页正则表达式测试工具&#xff0c;输入$匹配符会卡死&#xff0c;决定自己实现一个 界面设计 关键代码 void RegexpDialog::on_edt_regx_textChanged(const QString &pattern) {auto text ui->edt_content->text();QRegularExpression regxp(patte…

C语言 ——— 学习并使用 strtok 函数

目录 strtok函数的功能 strtok函数的参数以及返回值​编辑 使用strtok函数 使用方法一&#xff1a;根据需要分段的字符串写代码 使用方法二&#xff1a;配合for循环巧妙使用 strtok函数的功能 将字符串拆分为各个段&#xff0c;举例说明&#xff1a; 输入&#xff1a; 第…

LVS-DR模式集群:案例与概念

DR模式&#xff08;直接路由&#xff09; 概念 Direct Routing&#xff0c;简称DR模式采用半开放式的网络结构&#xff0c;与TUN模式的结构类似&#xff0c;但内网服务器并不是分散在各地&#xff0c;而是与调度器位于同一个物理网络负载调度器与内网服务器通过本地网络连接&a…

SQL Server 临时存储过程及示例

在本文中&#xff0c;我们将深入探讨 SQL Server 中的临时存储过程&#xff0c;并提供一些实际的示例。在我们之前的文章中&#xff0c;我们讨论了 SQL Server 存储过程中的返回值。本文将详细介绍以下内容&#xff1a; 什么是 SQL Server 临时存储过程&#xff1f; 在数据库…

什么是面包板和杜邦线?

1.面包板&#xff1a;搭建电路 2.杜邦线&#xff1a;电流的连接线 分为三类&#xff1a;公公线&#xff0c;公母线&#xff0c;母母线

UE GAS学习

【Unreal】虚幻GAS系统快速入门-CSDN博客 GameplayTags FGameplayTags是一种层级标签&#xff0c;如Parent.Child.GrandChild。 通过GameplayTagManager进行注册。替代了原来的Bool&#xff0c;或Enum的结构&#xff0c;可以在玩法设计中更高效地标记对象的行为或状态。 Gamep…

【用C语言编写】题目名称:分数求和题目内容:计算1/1-1/2+1/3-1/4+1/5-......+1/99-1/100的值,打印出结果

题目名称&#xff1a;分数求和 题目内容&#xff1a;计算1/1-1/21/3-1/41/5-......1/99-1/100的值&#xff0c;打印出结果 错误的代码如下&#xff1a; #include <stdio.h> int main() {int i 0;double sum 0.0;int flag 1;for (i 1; i < 100; i){sum flag * 1/ …

OpenTiny HUICharts 正式开源发布,一个简单、易上手的图表组件库

引言 大家好&#xff01; 我们非常高兴地跟大家宣布&#xff0c;今天正式发布我们的新产品——OpenTiny HUICharts。这是一款前端 Web 可视化图表库&#xff0c;其基础图表功能构建于 ECharts 之上&#xff0c;而高阶图表则采用了新的底层技术&#xff0c;以满足更广泛的数据…

JAVA基础:String字符串

目录 前言 String的内部机制 String的两种创建方式 前言 关于String字符串我们并不陌生&#xff0c;在我们的程序中经常使用String这个类&#xff0c;甚至有的同学会把string当成基本数据类型&#xff0c;今天我们就来了解一下String这个类 String的内部机制 我们把string称为…

nature immunology | BACH2调控“调节性”和“促炎性”TH17细胞的染色质多样化状态

–https://doi.org/10.1038/s41590-024-01901-1 BACH2 regulates diversification of regulatory and proinflammatory chromatin states in TH17 cells 留意更多内容&#xff0c;欢迎关注微信公众号&#xff1a;组学之心 研究团队和研究单位 Aviv Regev–Genentech Vijay …

深度学习入门——深度学习

加深网络 前情回顾 构成神经网络的各种层学习时的有效技巧对图像特别有效的CNN参数的最优化方法 向更深的网络出发 网络特点 基于33 的小型滤波器的卷积层。激活函数是ReLU。全连接层的后面使用Dropout层。基于Adam的最优化。使用He初始值作为权重初始值。 进一步提高识别精…

【Linux】yum(工具篇)

文章目录 前言&#xff1a;什么是软件包yum 的介绍yum源yum源的配置第三方源的配置官方源的配置镜像站点安装wget包备份本地yum源配置网易yum源重新生成yum缓存 前言&#xff1a;什么是软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程…

【学术会议征稿】第三届环境遥感与地理信息技术国际学术会议(ERSGIT 2024)

第三届环境遥感与地理信息技术国际学术会议(ERSGIT 2024) 2024 3rd International Conference on Environmental Remote Sensing and Geographic Information Technology&#xff08;ERSGIT 2024&#xff09; 第三届环境遥感与地理信息技术国际学术会议&#xff08;ERSGIT 20…

LVS-DR集群的部署

LVS-DR集群 LVS-DR(Linux Virtual Server Director Server)工作模式&#xff0c;是生产环境中最常用的一种工作模式。 LVS-DR工作原理 LVS-DR 模式&#xff0c;Director Server 作为群集的访问入口&#xff0c;不作为网关使用&#xff0c;节点 DirectorServer 与 Real Serve…

zabbix7.0TLS-01-部署服务端

文章目录 1 介绍1.1 架构1.2 主要概念和名词1.3 最新 7.0 TLS 版本的部分新特性更灵活的资源发现和管理 2 官方部署指导地址3 在 Rocky Linux 9 上安装 zabbix3.1 安装软件包3.2 创建初始化数据库3.3 配置zabbix-server3.4 启动Zabbix server和agent进程3.5 默认监听端口3.6 访…

Linux中Samba服务配置和管理

文章目录 一、Samba介绍1.1、Samba是什么1.2、Samba的核心功能1.3、Samba的主要组件1.4、Samba的工作流程1.5、Samba主要配置文件smb.conf 二、Samba安装2.1、更新yum源2.2、安装Samba客户端和服务器软件包2.3、启动Samba 三、Samba的使用3.1、设置Samba服务的全局选项3.2、tes…