首页 > 其他分享 >基于K8S部署安装Jenkins

基于K8S部署安装Jenkins

时间:2024-08-08 10:55:49浏览次数:18  
标签:kubectl 部署 devops yaml jenkins Jenkins K8S tools

基于K8S部署安装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

标签:kubectl,部署,devops,yaml,jenkins,Jenkins,K8S,tools
From: https://blog.csdn.net/qq_40914472/article/details/140921890

相关文章

  • 【Kubernetes】k8s集群资源调度
    目录一.k8s的List-Watch机制二.scheduler的调度过程三.指定节点调度Pod1.通过nodeName调度Pod2.通过节点标签选择器调度Pod3.通过亲和性调度Pod3.1.节点亲和性硬策略软策略当软、硬策略同时存在3.2.Pod亲和性Pod亲和性(podAffinity)Pod反亲和性(podAntiAffinity)......
  • A098-基于SpringBoot的雪具销售系统(源码+LW+PPT+开发文档+数据库文档+部署说明文档)
    开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9浏览器:谷歌浏览器配置环境安装包:Java配置环境链接:https://cloud.189.cn/t/baeQZrAjEvyy(访问码:pfd5)  ......
  • 一文搞定:LLM并发加速部署方案(llama.cpp、vllm、lightLLM、fastLLM)
    llama.cpp、vllm、lightllm、fastllm四种框架的对比:llama.cpp:基于C++,①请求槽,②动态批处理,③CPU/GPU混合推理vllm:基于Python,①PagedAttention高效管理注意力KV内存,②连续动态批处理,③量化GPTQ/AWQ/SqueezeLLM等。lightllm:基于Python,①三进程异步协作,②动态批处理,③Fla......
  • QQ聊天机器人OneBot部署的探索
    QQ聊天机器人OneBot部署的探索贴个垃圾代码。。底下有写得好一点的垃圾。。。。。importaiohttpimportasyncioimportjson,jsonpathimportollamafromollamaimportClientclient=Client(host='http://localhost:11434')fromollamaimportAsyncClientasyncdef......
  • ShardingSphere之ShardingProxy集群部署
    文章目录介绍使用Zookeeper进行集群部署统一ShardingJDBC和ShardingProxy配置通过Zookeeper注册中心同步配置直接使用ShardingProxy提供的JDBC驱动读取配置文件介绍开发者手册在conf/server.yaml配置文件中有下面这一段配置,就是关于集群部署的mode:#type:stan......
  • 前端HBuilderX HTML5模版,打包成dist 部署
    首先需要修改utils中appConfig.js的ip+路径+域名,使用服务器部署,那么就用服务器的ip,prod-api可以自定义,根据自己的需求起别名找打HBuilderX最上方发行,然后点击找到自己需要的发版,我使用的是网站-PC手机H5找到manifest.json,如果没有域名,点击重新获取即可将获取到的域名......
  • ELK Elasticsearch 集群部署
    ELKElasticsearch集群部署数据流向:1、后台服务器产生的日志由filebeat收集通过logstasg进行标准化处理,传输给es1、es2(两个是一个主备的关系,数据都是一致的),然后传输给可视化设备。有了flebeat可以节省资源,可以通过filebeat和logstash实现远程数据收集。filereat不能......
  • 在多服务器环境中部署LLaMA 3.1 405B模型
    #LLaMA3.1405B模型部署指南本指南提供了在三台服务器(100.10.128.1、100.10.128.2、100.10.128.3)上部署LLaMA3.1405B模型的详细步骤。##1.安装NVIDIA驱动和CUDA在所有三台服务器上执行以下步骤:```bash#更新系统sudoaptupdate&&sudoaptupgrade-y#安......
  • Springboot计算机毕业设计大学生请假系统(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,教师,学院,专业,班级,请假信息,请假条,销假信息,公告信息,出勤率开题报告内容一、选题背景与意义随着高等教育的普及和学生数量的不断增加,传统的学生请假......
  • Jenkins
     translatorAfrikaansAlbanian-shqipeArabic-‎‫العربية‬‎Armenian-ՀայերէնAzerbaijani-azərbaycancaBasque-euskaraBelarusian-беларускаяBengali-বাংলাBulgarian-българскиCatalan-catalàChin......