k8s集群搭建一主多從的jenkins集群

方案

+---------------------+
| Jenkins Master      |
| - 持久化配置         |<---(hostpath 存儲)
| - 自動容災           |
+----------+----------+|| Jenkins JNLP 通信|
+----------v----------+      +-------------------+
| Jenkins Agent       |      | Kubernetes Plugin |
| (動態 Pod)           |<---->| (自動創建 Agent)   |
+---------------------+      +-------------------+^|
+----------+----------+
| 彈性擴容機制         |
| (HPA + Pod 模板)    |
+---------------------+

一、環境準備

k8s 集群ip

20250817113034

kubectl get nodes -o wide # 顯示各節點的 InternalIP 和 ExternalIP

20250817113057

檢查pod外網是否可通

# 創建臨時 Pod 測試公網訪問
kubectl run net-test --image=alpine --rm -it --restart=Never -- sh# 在 Pod 內部執行(測試 HTTP 訪問)
curl -v -4 --connect-timeout 10 http://example.com# 測試 DNS 解析(確認域名解析是否正常)
nslookup google.com# 測試 TCP 連接(如需要)
nc -zv www.baidu.com 80

jenkins鏡像:

docker login kubernetes-register.sswang.com:80 -u sswang

docker pull jenkins/jenkins:2.344  # 官方 2.34 最新版 :cite[2]:cite[5]:cite[7]
docker tag jenkins/jenkins:2.344 kubernetes-register.sswang.com:80/jenkins/jenkins:2.344
docker push kubernetes-register.sswang.com:80/jenkins/jenkins:2.344
docker pull jenkins/jenkins:lts-jdk17
docker tag jenkins/jenkins:lts-jdk17 kubernetes-register.sswang.com:80/jenkins/jenkins:lts-jdk17
docker push kubernetes-register.sswang.com:80/jenkins/jenkins:lts-jdk17
  • agent鏡像
docker pull jenkins/inbound-agent:jdk11
docker tag jenkins/inbound-agent:jdk11 kubernetes-register.sswang.com:80/jenkins/inbound-agent:jdk11
docker push kubernetes-register.sswang.com:80/jenkins/inbound-agent:jdk11
  • 創建namespace

kubectl create namespace jenkins

  • hostpath存儲準備
kubectl label node kubernetes-master jenkins-master=true # node打標簽,支持基于標簽選擇器進行pod調度
mkdir -p /mnt/jenkins-data
chown 1000:1000 /mnt/jenkins-data  # Jenkins 默認 UID 1000 deck1
chmod -R 755 /mnt/jenkins-data
  • 版本兼容性說明

二、jenkins master部署

1. jenkins-master.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: jenkins-masternamespace: jenkins
spec:replicas: 1 # 副本數量selector:matchLabels:app: jenkins-masterstrategy:type: Recreatetemplate:metadata:labels:app: jenkins-masterspec:# 綁定到專用節點(可選)nodeSelector:jenkins-master: "true"securityContext:fsGroup: 1000containers:- name: jenkinsimage: kubernetes-register.sswang.com:80/jenkins/jenkins:lts-jdk17env:- name: JAVA_OPTSvalue: "-Djenkins.install.runSetupWizard=false -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai"ports:- containerPort: 8080- containerPort: 50000volumeMounts:- name: jenkins-homemountPath: /var/jenkins_homelivenessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 120periodSeconds: 10readinessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 30resources:limits:memory: "2Gi"cpu: "1"requests:memory: "1Gi"cpu: "500m"volumes:- name: jenkins-homehostPath:path: /mnt/jenkins-datatype: DirectoryOrCreate

2. jenkins-service.yml

nodeport 對外暴露jenkis服務,能夠訪問集群內pod。

apiVersion: v1
kind: Service
metadata:name: jenkins-servicenamespace: jenkins
spec:selector:app: jenkins-mastertype: NodePort # 永久對外暴露服務ports:- name: httpport: 8080targetPort: 8080- name: agentport: 50000targetPort: 50000

kubectl get svc -n jenkins jenkins-service

其中,32251為外部訪問所使用的端口,ip為宿主機ip或者虛擬機的ip地址。

20250817184231

Jenkins 服務地址確認

# 查看 Jenkins Service 名稱
kubectl get svc -n jenkins# 驗證內部 DNS 解析(在任意 Pod 內)
kubectl run test-dns --image=busybox -it --rm --restart=Never -- \nslookup jenkins-service.jenkins.svc.cluster.local# [svc].[namespace].svc.cluster.local

3. jenkins-rbac.yml

創建相應的RBAC權限,以便Jenkins Master能夠創建和管理Agent Pod

  1. ServiceAccount:在jenkins命名空間中創建一個名為jenkins的服務賬戶。
  2. ClusterRole:定義了一組權限規則,允許對pods、pods/exec、pods/log等資源的操作,以及獲取secrets的權限。
  3. ClusterRoleBinding:將ClusterRole綁定到ServiceAccount,使得jenkins服務賬戶具有ClusterRole中定義的權限。
apiVersion: v1
kind: ServiceAccount
metadata:name: jenkins # jenkins serviceaccountnamespace: jenkins
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: jenkins-agent-role
rules:
- apiGroups: [""]resources: ["pods", "pods/exec", "pods/log"]verbs: ["create", "delete", "get", "list", "watch", "patch"]
- apiGroups: [""]resources: ["secrets"]verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: jenkins-agent-role-binding
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: jenkins-agent-role
subjects:
- kind: ServiceAccountname: jenkinsnamespace: jenkins

kubectl get serviceaccount -n jenkins

如何讓某個訪問作為serviceaccount 為jenkins的賬戶?

apiVersion: v1
kind: Secret
metadata:name: jenkins-tokennamespace: jenkinsannotations:kubernetes.io/service-account.name: jenkins
type: kubernetes.io/service-account-token

至此就能通過secret訪問serviceaccount,進而訪問apiserver擁有相應的pod操作權限。

在這里插入圖片描述

三、動態Agent配置與kubernetes插件

1. 插件初始化

https://mirrors.huaweicloud.com/jenkins/updates/update-center.json

名稱: kubernetes
Kubernetes 地址: https://kubernetes.default.svc.cluster.local
命名空間: jenkins
憑據: jenkins-service-account (選擇創建的 ServiceAccount)
Jenkins 地址: http://jenkins-service.jenkins.svc.cluster.local:8080

憑據獲取,要求k8s集群配置:serviceaccount賬戶作為 集群操作權限的承接者,secret綁定account,用于apiserver鑒權,rbac用于將serviceaccount綁定role。
在這里插入圖片描述

TOKEN=$(kubectl get secret jenkins-token -n jenkins -o jsonpath='{.data.token}' | base64 --decode)
echo $TOKEN

服務證書key獲取:

CA_CRT=$(kubectl get secret jenkins-token -n jenkins -o jsonpath='{.data.ca\.crt}' | base64 -d)
echo "$CA_CRT"
# 驗證 ServiceAccount 權限
kubectl auth can-i create pods \--as system:serviceaccount:jenkins:jenkins \-n jenkins
# 應返回 yes# 驗證列表權限
kubectl auth can-i list pods \--as system:serviceaccount:jenkins:jenkins \-n jenkins
# 應返回 yes
# [命名空間][serviceaccount]

20250817221832

20250817221850

2. pod 模板

名稱: jnlp-agent
標簽: jnlp-agent
容器模板:
- 名稱: jnlp鏡像: kubernetes-register.sswang.com:80/jenkins/inbound-agent:jdk11參數: '${computer.jnlpmac} ${computer.name}'資源限制:CPU: 500m內存: 512Mi資源請求:CPU: 200m內存: 256Mi
podTemplate:name: jenkins-agentlabel: jenkins-agentserviceAccount: jenkins
#   imagePullSecrets:
#   - name: docker-registry-credcontainers:- name: jnlpimage: kubernetes-register.sswang.com:80/jenkins/inbound-agent:jdk11alwaysPullImage: falseresourceLimitCpu: "1"resourceLimitMemory: "2Gi"args: '$(JENKINS_SECRET) $(JENKINS_NAME)'

20250817221919

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/93657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/93657.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/93657.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

重溫k8s基礎概念知識系列三(工作負載)

文章目錄1、工作負載簡述2、Deployment1.1、創建 Deployment1.2、檢查 Deployment上線狀態3、StatefulSet4、DaemonSet3.1、創建 DaemonSet3.2、運行DaemonSet5、Job5.1、運行示例 Job5.2、檢查 Job 的狀態6、CronJob上一節&#xff0c;我們復習了Pod相關知識&#xff0c;大多情…

開源 Arkts 鴻蒙應用 開發(十八)通訊--Ble低功耗藍牙服務器

文章的目的為了記錄使用Arkts 進行Harmony app 開發學習的經歷。本職為嵌入式軟件開發&#xff0c;公司安排開發app&#xff0c;臨時學習&#xff0c;完成app的開發。開發流程和要點有些記憶模糊&#xff0c;趕緊記錄&#xff0c;防止忘記。 相關鏈接&#xff1a; 開源 Arkts …

Go語言并發編程 ------ 鎖機制詳解

Go語言提供了豐富的同步原語來處理并發編程中的共享資源訪問問題。其中最基礎也最常用的就是互斥鎖&#xff08;Mutex&#xff09;和讀寫鎖&#xff08;RWMutex&#xff09;。1. sync.Mutex&#xff08;互斥鎖&#xff09;Mutex核心特性互斥性/排他性&#xff1a;同一時刻只有一…

8月17日星期天今日早報簡報微語報早讀

8月17日星期天&#xff0c;農歷閏六月廿四&#xff0c;早報#微語早讀。1、《南京照相館》領跑&#xff0c;2025年暑期檔電影總票房破95億&#xff1b;2、神舟二十號圓滿完成第三次出艙任務&#xff1b;3、宇樹G1人形機器人100米障礙賽再奪金牌&#xff1b;4、廣東佛山新增報告基…

在QML中使用Chart組件

目錄前言1. 如何安裝 Chart 組件2. 創建 QML 工程時的常見問題3. 解決方案&#xff1a;改用 QApplication QQuickView修改主函數&#xff08;main.cpp&#xff09;4. QApplication 與 QGuiApplication 的差異為什么 Qt Charts 需要 QApplication&#xff1f;總結示例下載前言 …

【P40 6-3】OpenCV Python——圖像融合(兩張相同屬性的圖片按比例疊加),addWeighted()

P40 6-3 文章目錄import cv2 import numpy as npback cv2.imread(./back.jpeg) smallcat cv2.imread(./smallcat1.jpeg)#只有兩張圖的屬性是一樣的才可以進行溶合 print(back.shape) print(smallcat.shape)result cv2.addWeighted(smallcat, 0.7, back, 0.3, 0) cv2.imshow(…

傳輸層協議 TCP(1)

傳輸層協議 TCP&#xff08;1&#xff09; TCP 協議 TCP 全稱為 “傳輸控制協議(Transmission Control Protocol”). 人如其名, 要對數據的傳輸進行一個詳細的控制; TCP 協議段格式 ? 源/目的端口號: 表示數據是從哪個進程來, 到哪個進程去; ? 32 位序號/32 位確認號: 后面詳…

黎陽之光:以動態感知與 AI 深度賦能,引領電力智慧化轉型新革命

當全球能源結構加速向清潔低碳轉型&#xff0c;新型電力系統建設成為國家戰略核心&#xff0c;電力行業正經歷從傳統運維向智慧化管理的深刻變革。2024 年《加快構建新型電力系統行動方案》明確提出&#xff0c;到 2027 年需建成全國智慧調度體系&#xff0c;實現新能源消納率突…

自動駕駛中的傳感器技術34——Lidar(9)

補盲lidar設計&#xff1a;機械式和半固態這里不再討論&#xff0c;這里主要針對全固態補盲Lidar進行討論1、系統架構設計采用Flash方案&#xff0c; 設計目標10m10%&#xff0c;實現30m距離的點云覆蓋&#xff0c;同時可以驗證不同FOV鏡頭的設計下&#xff0c;組合為多款產品。…

Originality AI:原創度和AI內容檢測工具

本文轉載自&#xff1a;Originality AI&#xff1a;原創度和AI內容檢測工具 - Hello123工具導航 ** 一、AI 內容誠信管理專家 Originality AI 是面向內容創作者的全棧式質量檢測平臺&#xff0c;整合 AI 內容識別、抄襲查驗、事實核查與可讀性分析四大核心功能&#xff0c;為…

OpenCV圖像平滑處理方法詳解

引言 在數字圖像處理中&#xff0c;圖像平滑是一項基礎而重要的預處理技術。它主要用于消除圖像中的噪聲、減少細節層次&#xff0c;為后續的圖像分析&#xff08;如邊緣檢測、目標識別等&#xff09;創造更好的條件。OpenCV作為最流行的計算機視覺庫之一&#xff0c;提供了多種…

每天兩道算法題:DAY1

題目一&#xff1a;金幣 題目一&#xff1a;金幣 1.題目來源&#xff1a; NOIP2015 普及組 T1&#xff0c;難度紅色&#xff0c;入門簽到題。 2.題目描述&#xff1a; 3.題目解析&#xff1a; 問題轉化&#xff1a;求下面的一個數組的前 k 項和。 4.算法原理&#xff1a; …

C++核心語言元素與構建塊全解析:從語法規范到高效設計

&#x1f4cc; 為什么需要雙維度學習C&#xff1f;核心語言元素 → 掌握標準語法規則&#xff08;避免未定義行為Undefined behavior&#xff09;構建塊&#xff08;Building Blocks&#xff09; → 像搭積木一樣組合功能&#xff08;提升工程能力&#xff09; 例如&#xff1a…

RK3588開發板Ubuntu系統燒錄

Ubuntu22.04——YOLOv8模型訓練到RK3588設備部署和推理 文章中給出了通過ARM設備上面的NPU進行深度學習的模型推理過程,在此之前,我們在收到一塊全新的rk3588開發板后,需要對其進行系統的燒錄,這里以Ubuntu22.04系統為例。 目錄 1.獲取待燒錄系統的鏡像 2.燒錄工具準備 2.1…

AI評測的科學之道:當Benchmark遇上統計學

AI評測的科學之道&#xff1a;當Benchmark遇上統計學 —— 如何客觀評估大模型能力&#xff0c;避免落入數據陷阱 在人工智能尤其是大語言模型&#xff08;LLU&#xff09;爆發式發展的今天&#xff0c;各類模型榜單&#xff08;如Open LLM Leaderboard、LMSys Arena&#xff0…

CSS 基礎入門教程:從零開始學習樣式表

一、CSS 簡介CSS&#xff08;Cascading Style Sheets&#xff0c;層疊樣式表&#xff09;是一種用于描述 HTML 或 XML 等文檔呈現方式的語言。它是現代網頁設計的三大核心技術之一&#xff0c;與HTML&#xff08;結構層&#xff09;和JavaScript&#xff08;行為層&#xff09;…

圖解簡單選擇排序C語言實現

1 簡單選擇排序 簡單選擇排序&#xff08;Simple Selection Sort&#xff09;是一種基礎且直觀的排序算法&#xff0c;其核心思想是通過重復選擇未排序部分中的最小&#xff08;或最大&#xff09;元素&#xff0c;并將其放到已排序部分的末尾&#xff0c;逐步完成整個序列的排…

FPS游戲時,你的電腦都在干什么(CS2)

人物介紹&#xff1a;CPU > 你忠實的處理器 i5-13600KFGPU > 你花大價錢買的顯卡 RTX3060&#xff08;不是自己的配置&#xff0c;自己的是XEON E5GTX1060&#xff0c;測不出來&#xff0c;上面是社區一個好心大哥的數據&#xff0c;較為精準&#xff09;&#…

MySQL完整重置密碼流程(針對 macOS)

MySQL完整重置密碼流程&#xff08;針對 macOS&#xff09; 1. 強制停止 MySQL 服務 sudo /usr/local/mysql/support-files/mysql.server stop sudo killall mysqld mysqld_safe # 確保所有進程停止2. 以安全模式啟動&#xff08;跳過權限驗證&#xff09; sudo /usr/local/my…

Python數據類型轉換詳解:從基礎到實踐

在Python編程中&#xff0c;數據類型轉換是一項基礎且頻繁使用的操作。無論是處理用戶輸入、進行數值計算還是數據處理&#xff0c;都離不開類型轉換。本文將系統介紹Python中的數據類型體系&#xff0c;詳解類型轉換的規則與實踐技巧&#xff0c;幫助你在實際開發中靈活運用。…