香橙派4和树莓派4B构建K8S集群实践之七: Jenkins

news2024/11/27 22:44:26

目录

1. 说明

2. 步骤

2.1 准备工作

2.2 安装

2.2.1 用jenkins原站for k8s的安装仓方法安装

2.2.2 Helm 安装

3. 相关命令

4. 遇到的问题

5. 参考


1. 说明

  • 在k8s上部署jenkins,并用 jenkins.k8s-t2.com访问
  • 在namespace为devops下安装在指定节点k8s-master-1,有指定持久化的PV/PVC/SC
  • CI/DI 实践

2. 步骤

2.1 准备工作

设置代理,不然去git拿文件的时候会遇到麻烦

git config --global http.proxy 'socks5://192.168.0.108:1080'
git config --global https.proxy 'socks5://192.168.0.108:1080'

git config --global --unset http.proxy
git config --global --unset https.proxy

编辑客户机hosts, 映射子域名

192.168.0.103   jenkins.k8s-t2.com

2.2 安装

2.2.1 用jenkins原站for k8s的安装仓方法安装

获取

git clone https://github.com/scriptcamp/kubernetes-jenkins

建个namespace

kubectl create ns devops-tools

 编辑 volume.yaml,设置/data0/jenkins-volume为存储地, 节点 k8s-master-0

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: /data0/jenkins-volume
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/hostname
          operator: In
          values:
          - k8s-master-0

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: jenkins-pv-claim
  namespace: devops-tools
spec:
  storageClassName: local-storage
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

 建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

建deployment.yaml ,为使得jenkins插件能科学安装,需进行deployment中的环境代理设置,否则牙痛 : )

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   
          env:
          - name: http_proxy
            value: http://192.168.0.108:1081
          - name: https_proxy
            value: http://192.168.0.108:1081
          - name: no_proxy
            value: aliyuncs.com,huaweicloud.com,k8s-master-0,k8s-master-1,k8s-worker-0,localhost,127.0.0.1,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
      volumes:
        - name: jenkins-data
          persistentVolumeClaim:
              claimName: jenkins-pv-claim

 建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

执行脚本k8s-jenkins.sh

#!/bin/bash

kubectl label node k8s-master-0 app=jenkins-server

kubectl create namespace devops-tools

kubectl apply -f /k8s_apps/kubernetes-jenkins/serviceAccount.yaml

kubectl create -f /k8s_apps/kubernetes-jenkins/volume.yaml

kubectl apply -f /k8s_apps/kubernetes-jenkins/deployment.yaml

kubectl apply -f /k8s_apps/kubernetes-jenkins/service.yaml

 成功后可查pod日志获取admin密码

2.2.2 Helm 安装

 添加jenkins来源: 

helm repo add jenkinsci https://charts.jenkins.io
helm repo update

helm search repo jenkinsci

可知当前版本为: 

NAME                    CHART VERSION   APP VERSION     DESCRIPTION
jenkinsci/jenkins       4.3.26          2.401.1         Jenkins - Build great things at any scale! The ...

 获取到本地,并解压

helm fetch jenkinsci/jenkins
tar -zxvf jenkins.tgz 

编辑 values.yaml:

ingress:
  #enabled: false
=>
ingress:
  enabled: true
  # See https://kubernetes.io/blog/2020/04/02/improvements-to-the-ingress-api-in-kubernetes-1.18/#specifying-the-class-of-an-ingress
  # 需注明用的是哪个ingress class,因为之前装的是ingress-nginx, 所以这里填nginx
  ingressClassName: nginx
    # Set this path to jenkinsUriPrefix above or use annotations to rewrite path
  hostName: jenkins.k8s-t2.com

注意ingress需指定对应的 ingressClassName

 执行安装

helm upgrade --install jenkins --namespace default \
    -f values.yaml \
    jenkins/jenkins

# 过程大概要30分钟

NOTES:
1. 获取admin登录密码 Get your 'admin' user password by running:
  kubectl exec --namespace default -it svc/jenkins -c jenkins -- /bin/cat /run/secrets/additional/chart-admin-password && echo
2. Visit http://jenkins.k8s-t2.com

3. Login with the password from step 1 and the username: admin
4. Configure security realm and authorization strategy
5. Use Jenkins Configuration as Code by specifying configScripts in your values.yaml file, see documentation: http://jenkins.k8s-t2.com/configuration-as-code and examples: https://github.com/jenkinsci/configuration-as-code-plugin/tree/master/demos

获知部署后的情况

orangepi@k8s-master-1:/k8s_apps/jenkins$ kubectl describe ingress jenkins
Name:             jenkins
Labels:           app.kubernetes.io/component=jenkins-controller
                  app.kubernetes.io/instance=jenkins
                  app.kubernetes.io/managed-by=Helm
                  app.kubernetes.io/name=jenkins
                  helm.sh/chart=jenkins-4.3.23
Namespace:        default
Address:
Ingress Class:    nginx
Default backend:  <default>
Rules:
  Host                Path  Backends
  ----                ----  --------
  jenkins.k8s-t2.com
                      /jenkins   jenkins:8080 (10.244.2.7:8080)
Annotations:          kubernetes.io/ingress.class: nginx
                      meta.helm.sh/release-name: jenkins
                      meta.helm.sh/release-namespace: default
Events:
  Type    Reason  Age                  From                      Message
  ----    ------  ----                 ----                      -------
  Normal  Sync    11s (x2 over 5m36s)  nginx-ingress-controller  Scheduled for sync

 然后就可以欢快地访问 jenkins.k8s-t2.com了

3. 相关命令

(jenkins_url)/safeRestart – 允许所有正在运行的作业完成。 重新启动完成后,新作业将保留在队列中运行。
(jenkins_url)/restart – 强制重启,无需等待生成完成。

4. 遇到的问题

- 启动pod时出现

default-scheduler 0/3 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }

查找安装的目标Server是否有污点 "node-role.kubernetes.io/control-plane",有则去掉或修改

- 在jenkins安装插件时,出现:

unable to find valid certification path to requested target

解决办法:手动安装 skip-certificate-check,到这里下载skip-certificate-check | Jenkins plugin安装最新版本,目前是1.1

5. 参考

Kubernetes

kubernetes(十四) 基于kubernetes的jenkins持续集成-腾讯云开发者社区-腾讯云

Managing Plugins

https://medium.com/javarevisited/deploying-a-spring-boot-application-on-kubernetes-using-jenkins-672961425a42

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

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

相关文章

CAN总线和DCB文件格式

目录 CAN总线和DBC格式1. CAN总线1.1 CAN总线的组织结构1.2 CAN的信号结构 2. DBC格式2.1 通用描述2.2 DBC文件的结构 3. DBC文件官方示例3. DBC文件官方示例 CAN总线和DBC格式 1. CAN总线 控制器局域网总线&#xff08;CAN&#xff0c;Controller Area Network&#xff09;一…

【避坑指南】Unity3D接入外网SDK笔记(GooglePlay/FaceBook/AppsFlyer)

这段时间折腾了一下获取归因数据相关的SDK&#xff0c;遇到非常多奇奇怪挂的报错&#xff0c;在此记录一下。 准备资源 Unity的Jar包解析器&#xff0c;下面提及的SDK都需要工具解析并下载依赖 https://github.com/googlesamples/unity-jar-resolverAndroidStudio&#xff0c…

微信小程序基础库的介绍与更改

一、什么是基础库&#xff1f; 1、基础库是小程序运行的必要环境&#xff0c;我们的开发主要就是面向基础库开发的。基础库封装了微信和手机的能力并提供给小程序使用&#xff0c;我们使用基础库提供的组件和API开发起来非常的方便。 2、基础库存在于我们的微信客户端中&…

骑行,怎么样才能安全的下坡?

大家好&#xff0c;今天我们来聊聊自行车运动中的一个重要话题&#xff1a;如何安全地骑行下坡&#xff1f; 首先&#xff0c;我们要明白&#xff0c;安全下坡的秘诀在于控制。一是速度的控制&#xff0c;二是自身姿势的控制。就像一只灵活的狐狸&#xff0c;既要控制好自己的速…

Excel表格套用格式后分类汇总用不了解决方法之一

表格套用格式选择表格后分类汇总显示灰色不可用&#xff0c;如下图&#xff1a; 解决方法之一&#xff1a;右键-表格-转为区域&#xff0c;确定

如何部署LVS负载均衡集群(NAT模式)

目录 一、集群 负载均衡集群&#xff08;Load Balance Cluster&#xff09; 高可用集群&#xff08;High Availability Cluster&#xff09; 高性能运算集群&#xff08;High Performance Computer Cluster&#xff09; 二、负载均衡工作模式 VIP地址特性&#xff08;虚拟…

剑指offer(C++)-JZ40:最小的K个数(算法-排序)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 题目描述&#xff1a; 给定一个长度为 n 的可能有重复值的数组&#xff0c;找出其中不去重的最小的 k 个数。例如数组元素是4,5,…

1.1 熟悉x64dbg调试器

x64dbg 是一款开源、免费、功能强大的动态反汇编调试器&#xff0c;它能够在Windows平台上进行应用程序的反汇编、调试和分析工作。与传统的调试器如Ollydbg相比&#xff0c;x64dbg调试器的出现填补了Ollydbg等传统调试器的不足&#xff0c;为反汇编调试工作提供了更高效、更可…

Python 中的 JSON 操作:简单、高效的数据交换格式

目录 1. JSON 数据格式 2. Python 操作 JSON 文件 2.1 JSON 反序列化为 Python 对象 2.2 Python 序列化为 JSON 3 工作中的常见场景 3.1 网络请求和响应 服务器端&#xff08;Python&#xff09;&#xff1a; 客户端&#xff08;JavaScript&#xff09;&#xff1a; 3…

5G三防平板电脑有哪些功能与特点

随着科技的不断进步&#xff0c;平板电脑已经成为许多人生活中必不可少的设备之一。而随着5G技术的全面普及&#xff0c;5G三防平板电脑也应运而生。这些平板电脑集成了内置高通八核处理器搭配Adreno GPU&#xff0c;搭载全新Android 11操作系统&#xff0c;以及提供多应用切换…

docker-compose实现微服务jar+mysql的容器服务发布(经典版)

一 安装mysql服务 1.1 拉取镜像 1.拉取&#xff1a; docker pull mysql:5.7.29 2.查看镜像&#xff1a; docker images 1.2 在宿主机创建文件存储mysql 1.创建映射目录&#xff1a;mysql-c5 在/root/export/dockertest 目录下&#xff0c;mkdir -p mysql-c5 &#…

Django proxy_view代理后端

某些需求下&#xff0c;需要通过Django代理后端&#xff0c;比如开发celery定时任务时候&#xff0c;需要代理后端的flower&#xff0c;代理后端可以直接使用Django自带的授权&#xff0c;方便权限控制 具体操作如下 1.安装 django-proxy 包&#xff0c;进行代理 pip install …

LVS负载均衡集群(DR)

目录 1.数据包流向 2.通信遇到的问题 1.ARP广播 导致所有节点服务器和调度器的VIP响应 2.VIP的调度器失效 3.案例 1. 配置负载调度器 2.部署共享存储 3. 配置节点服务器(这里是两台) 1.数据包流向 1.客户端发送请求到负载均衡器 请求的数据报文到达内核空间 2.负载均…

改进 Elastic Stack 中的信息检索:引入 Elastic Learned Sparse Encoder,我们的新检索模型

作者&#xff1a;Thomas Veasey&#xff0c;Quentin Herreros 在本博客中&#xff0c;我们讨论了我们一直在使用预先训练的语言模型增强 Elastic 开箱即用检索功能所做的工作。 在本系列的上一篇博客文章中&#xff0c;我们讨论了在零样本设置中应用密集模型进行检索的一些挑战…

全网最细,接口自动化测试hook机制使用详细,进阶高级...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 requests 库只支持…

Sa-Token,一款更加轻量的权限认证框架

今天给大家介绍一个轻量级 Java 权限认证框架&#xff0c;我们之前一直采用最多的鉴权框架是OAuth2.0或者SpringSecurity&#xff0c;但是两者的配置都相当复杂&#xff0c;学习成本也非常高&#xff0c;所以我一直在试图寻找更好的解决办法&#xff0c;这几天在搭建权限体系平…

密码学学习笔记(五):Hash Functions - 哈希函数1

简介 什么是密码学中的哈希函数&#xff1f; 哈希函数是一种快速算法&#xff0c;它接受任何长度的输入&#xff0c;并产生一个固定长度的随机输出&#xff0c;称为摘要(digest)&#xff0c;比如&#xff1a; MD4, MD5: 128-bit output (broken) •SHA-1: 160-bit output (b…

Infinite Zoom 丝滑循环小视频生成方法

使用Infinite Zoom插件在Stable Diffusion中可以制作无限缩放效果视频的过程。 文章目录 插件安装插件功能Main选项卡Video选项卡OutpaintPost process 插件使用 插件安装 在Stable-Diffusion-webui安装Infinite Zoom插件。启动Stable-Diffusion-webui&#xff0c;选择扩展-从…

使用css的:before属性在文字前加短竖线

有时候我们需要在文字或者标题前加个短竖线&#xff0c;有的人会使用 border 来模拟一个竖线&#xff0c;其实大可不必&#xff0c;我们可以利用元素的 :before 属性来实现&#xff0c;效果如下&#xff1a; 具体的代码如下&#xff0c; HTML&#xff1a; <span class&quo…

【计算机网络】第 1 课 - 数据的三种交换方式

欢迎来到博主 Apeiron 的博客&#xff0c;祝您旅程愉快 &#xff01; 时止则止&#xff0c;时行则行。动静不失其时&#xff0c;其道光明。 目录 1、缘起 2、电路交换 3、分组交换 4、三种交换方式的对比 4.1、电路交换优点 4.2、电路交换缺点 4.3、报文交换优点 4.4、…