在【k8s】中部署Jenkins的實踐指南

🐇明明跟你說過:個人主頁

🏅個人專欄:《Kubernetes航線圖:從船長到K8s掌舵者》?🏅

🔖行路有良友,便是天堂🔖

目錄

一、引言

1、Jenkins簡介

2、k8s簡介

3、什么在k8s中部署Jenkins

二、準備工作

1、準備k8s集群

2、Jenkins官方鏡像版本介紹

3、Jenkins鏡像準備

三、在Kubernetes中部署Jenkins

1、準備存儲資源

2、準備賬號

3、部署Jenkins

4、創建Service

5、訪問測試


一、引言

1、Jenkins簡介

Jenkins 是一個開源的自動化服務器,主要用于持續集成(Continuous Integration, CI)和持續交付(Continuous Delivery, CD)。它由Sun Microsystems的前員工在2004年左右開發,最初命名為Hudson。后來由于一些商標爭議,項目改名為Jenkins,并且迅速成為構建、測試和部署軟件項目的流行工具。

Jenkins的主要特點包括:

  1. 持續集成與持續交付:Jenkins可以自動監控版本控制系統中的代碼變更,觸發構建過程,運行測試,并根據結果決定是否部署到生產環境。這有助于快速發現集成問題并縮短開發周期。
  2. 插件生態系統:Jenkins擁有龐大的插件庫,支持幾乎所有現代軟件開發中可能用到的工具和技術,比如Git、Maven、Gradle等。
  3. 易于擴展:由于Jenkins是基于Java編寫的,因此它非常靈活,用戶可以通過編寫自定義腳本或插件來擴展其功能。
  4. 分布式構建:Jenkins支持通過“主從”架構進行分布式構建,允許將構建任務分配給多個節點,以提高效率和資源利用率。
  5. 圖形化界面:Jenkins提供了直觀的Web界面,使得配置和管理CI/CD流程變得簡單。
  6. Pipeline即代碼:Jenkins Pipeline是一個特性集,它允許用戶定義其CI/CD流程為代碼的形式(通常使用Groovy語言),這樣可以將其納入版本控制,并與其他團隊成員共享。
  7. 安全性:Jenkins提供了一些安全特性和認證機制,確保只有授權用戶才能執行特定的操作。
  8. 社區和支持:作為一個開源項目,Jenkins有一個活躍的社區,提供文檔、論壇討論以及第三方服務和支持。

?

?

2、k8s簡介

Kubernetes(通常簡寫為K8s)是一個開源平臺,用于自動化部署、擴展和管理容器化的應用程序。它最初由Google設計并開發,并于2014年捐贈給了云原生計算基金會(CNCF)。Kubernetes提供了強大的機制來管理分布式系統中的應用,使其能夠在物理機或虛擬機集群上運行。

特性

  1. 自動化容器編排:自動重啟失敗的容器、替換和重新調度容器、水平擴展容器等。
  2. 自我修復:如果某個節點故障,Kubernetes會自動將該節點上的工作負載遷移到其他健康的節點上。
  3. 橫向擴展:通過簡單的命令、用戶界面或者基于CPU使用情況自動調整應用的規模。
  4. 服務發現與負載均衡:無需修改代碼即可實現服務之間的通信,Kubernetes為容器提供了自己的IP地址以及一個DNS名稱,并且可以負載均衡分配到容器上。
  5. 自動發布與回滾:逐步發布新的版本,同時監視應用健康狀況,如有問題則自動回滾更改。
  6. 密鑰與配置管理:讓您可以輕松地管理和分發密碼、OAuth令牌和其他敏感數據,而無需重建鏡像。?

??

3、什么在k8s中部署Jenkins

在Kubernetes(簡稱K8s)中部署Jenkins,可以帶來許多好處,尤其是對于那些需要高效、可擴展和可靠的持續集成/持續交付(CI/CD)流程的企業或團隊。

1. 動態資源管理

  • 想象一下,你有一家餐廳,有時候客人很多,有時候客人很少。如果每次客人都很多時,你都需要臨時雇傭更多的服務員,而當客人少時又得解雇他們,這樣不僅麻煩還浪費資源。而在Kubernetes中部署Jenkins就像是有一個智能管理系統,它可以根據當前的工作負載自動調整所需的服務員數量(即Jenkins構建節點)。當有很多構建任務時,系統會自動增加更多“服務員”來幫忙;反之,則減少“服務員”,從而更有效地利用資源。

2. 提高可靠性和容錯能力

  • 如果你的餐廳只有一個廚房,一旦這個廚房出現問題,整個餐廳就無法正常運營了。同樣,在傳統設置下,如果Jenkins主節點出現故障,所有的構建任務都會停止。但在Kubernetes環境中,即使一個節點出問題,其他健康的節點可以立即接管工作,確保服務不間斷。

3. 快速響應變化

  • 假設你的餐廳突然接到一個大型宴會訂單,你需要快速準備好額外的食物和服務。有了Kubernetes的幫助,Jenkins可以迅速擴展其處理能力,就像瞬間增加了多個廚房一樣,以應對突如其來的大量工作。完成后,還可以快速縮減規模,節省成本。

4. 統一環境

  • 無論是在家中準備食物還是在商業廚房里烹飪,保持一致的食譜和做法是非常重要的。將Jenkins部署到Kubernetes上,意味著你可以確保開發、測試和生產環境盡可能地相似,避免由于環境差異導致的問題。

??

二、準備工作

1、準備k8s集群

這里我們用的k8s版本為 1.23.1,大家也可以使用其他的k8s發行版本,如果還未安裝k8s請參考下面的文章。

《在Centos中搭建 K8s 1.23 集群超詳細講解》

《深度解析:Kubernetes 1.28.2集群安裝過程中的關鍵步驟》

2、Jenkins官方鏡像版本介紹

官方鏡像的推薦

  • Jenkins官方推薦使用?jenkinsci/blueocean?這個鏡像。與直接下載Jenkins的鏡像相比,Blue Ocean鏡像提供了更為現代和直觀的用戶界面,使得Jenkins的使用和管理變得更加容易。因此,對于新用戶或者希望簡化Jenkins使用的用戶來說,推薦使用jenkinsci/blueocean鏡像。

鏡像版本標簽

Jenkins官方鏡像在Docker Hub上提供了多個版本標簽,以便用戶選擇。以下是一些常見的版本標簽:

  • latest:表示最新版本的Jenkins,包括最新的功能和安全更新。然而,由于它是最新的版本,可能存在一些未知的問題或不穩定因素。
  • lts:表示長期支持版本的Jenkins,通常更穩定且經過更多的測試。它適合用于生產環境,因為提供了更多的安全更新和穩定性修復。
  • 具體版本號:例如2.401.1、1.24.1-bcc31d32159f等,表示特定版本的Jenkins。用戶可以根據自己的需求選擇特定的版本號。

?

3、Jenkins鏡像準備

這里我們使用的Jenkins版本為2.410,鏡像我放在個人資源中了,大家也可以自行下載或使用其他的發行版本。

上傳至worker節點后,執行下面的命令解壓

docker load -i jenkins-2.410.tar.gz

如果k8s版本大于1.23,則執行下面的命令

ctr -n=k8s.io images import jenkins2.410

三、在Kubernetes中部署Jenkins

1、準備存儲資源

我們準備一個PVC,將Jenkins的數據持久化到當中,以免pod漂移到其他節點后,歷史數據丟失。

下面簡單介紹下如何創建PVC,更詳細的可以參考《k8s PV與PVC持久化存儲詳解與實際應用分享》這篇文章

首先準備一個NFS共享目錄

yum install nfs-utils -y
systemctl enable nfs --now
mkdir /data/jenkins -p
vim /etc/exports
# 添加下面的內容
/data/jenkins *(rw,no_root_squash)
#保存、退出
exportfs -arv

創建一個名稱空間,用于部署Jenkins

kubectl create namespace jenkins-k8s

?編寫pv的yaml文件

apiVersion: v1
kind: PersistentVolume
metadata:name: jenkins-k8s-pv
spec:capacity:storage: 10GiaccessModes:- ReadWriteManynfs:server: 192.168.40.181path: /data/jenkins
  • kind: PersistentVolume:定義了這個資源對象的類型是一個PersistentVolume(持久卷)。PersistentVolume是集群中的一段存儲,它獨立于Pod的生命周期而存在。
  • metadata:?開始元數據部分,這里包含了資源對象的一些基本信息。
    • name: jenkins-k8s-pv:給這個PersistentVolume指定一個名稱,這里是jenkins-k8s-pv。在Kubernetes集群中,每個資源對象都需要一個唯一的名稱。
  • spec::開始定義PersistentVolume的具體規格和配置。
    • capacity::定義了這個持久卷的容量。
      • storage: 10Gi:指定了持久卷的存儲大小為10GiB(Gibibytes)。
    • accessModes::描述了持久卷可以被訪問的方式或模式。
    • - ReadWriteMany:表示這個卷可以被多個節點同時以讀寫方式掛載。其他可能的訪問模式包括ReadWriteOnce(只能由一個節點以讀寫方式掛載)和ReadOnlyMany(可以被多個節點以只讀方式掛載)。
  • nfs::指定了這個持久卷使用NFS(網絡文件系統)作為其后端存儲機制。
    • server: 192.168.40.181:指定了NFS服務器的IP地址,這里是192.168.40.181。
    • path: /data/jenkins:指定了NFS服務器上共享的路徑,即實際存儲數據的位置,在這個例子中是/data/jenkins。

創建PV

kubectl  apply -f pv.yaml

??

編寫創建PVC的yaml文件

kind: PersistentVolumeClaim
apiVersion: v1
metadata:name: jenkins-k8s-pvcnamespace: jenkins-k8s
spec:resources:requests:storage: 10GiaccessModes:- ReadWriteMany

?創建PVC

kubectl apply -f  pvc.yaml

??

2、準備賬號

創建sa賬號

kubectl create sa jenkins-k8s-sa -n jenkins-k8s

進行RBAC授權

kubectl create clusterrolebinding jenkins-k8s-sa-cluster -n jenkins-k8s  --clusterrole=cluster-admin --serviceaccount=jenkins-k8s:jenkins-k8s-sa

3、部署Jenkins

準備yaml文件

kind: Deployment
apiVersion: apps/v1
metadata:name: jenkinsnamespace: jenkins-k8s
spec:replicas: 1selector:matchLabels:app: jenkinstemplate:metadata:labels:app: jenkinsspec:serviceAccount: jenkins-k8s-sacontainers:- name: jenkinsimage:  jenkins/jenkins:2.410imagePullPolicy: IfNotPresentports:- containerPort: 8080name: webprotocol: TCP- containerPort: 50000name: agentprotocol: TCPresources:limits:cpu: 2000mmemory: 2Girequests:cpu: 500mmemory: 512MilivenessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 60timeoutSeconds: 5failureThreshold: 12readinessProbe:httpGet:path: /loginport: 8080initialDelaySeconds: 60timeoutSeconds: 5failureThreshold: 12volumeMounts:- name: jenkins-volumesubPath: jenkins-homemountPath: /var/jenkins_homevolumes:- name: jenkins-volumepersistentVolumeClaim:claimName: jenkins-k8s-pvc

部署Jenkins

kubectl apply -f jenkins-deployment.yaml

4、創建Service

部署成功后,創建一個service,以供外部訪問

編寫yaml文件

apiVersion: v1
kind: Service
metadata:name: jenkins-servicenamespace: jenkins-k8slabels:app: jenkins
spec:selector:app: jenkinstype: NodePortports:- name: webport: 8080targetPort: webnodePort: 30089- name: agentport: 50000targetPort: agent

創建service

kubectl apply -f  service.yaml

5、訪問測試

瀏覽器輸入worker節點的IP+30089端口,如果顯示下面的頁面,證明部署成功

??

💕💕💕每一次的分享都是一次成長的旅程,感謝您的陪伴和關注。希望這些關于Docker的文章能陪伴您走過技術的一段旅程,共同見證成長和進步!😺😺😺

🧨🧨🧨讓我們一起在技術的海洋中探索前行,共同書寫美好的未來!!!?

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

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

相關文章

代碼隨想錄算法營Day59 | 尋找存在的路徑, 冗余連接,冗余連接II

尋找存在的路徑 這題使用并查集即可。并查集加路徑壓縮。 #include <iostream> using namespace std; int find(int* father,int u){return father[u] u ? u : father[u] find(father,father[u]); }bool isSame(int* father,int u,int v){return find(father,u) fi…

正則表達式(2)匹配規則

正則表達式的匹配規則定義了如何識別字符串中的特定模式。這些規則包括字符類匹配、元字符匹配、數量詞、字符轉義和分組。 字符類匹配 字符類匹配允許你指定一個字符集合&#xff0c;并匹配該集合中的任意單個字符。這是通過方括號 [] 來實現的。 簡單字符類&#xff1a;[abc…

【QWEN】機器人控制器的控制周期越短精度越高嗎

好的&#xff0c;用戶問的是“機器人控制器的控制周期越短精度越高嗎”。我需要根據提供的知識庫內容來回答這個問題。首先&#xff0c;我得回憶一下知識庫里的相關信息。 知識庫里有幾篇相關的文章。比如&#xff0c;[3]提到控制周期越短&#xff0c;控制性能的上限越高&…

[總概]Vue2/3React Diff算法

根據搜索結果,大部分文檔都詳細描述了Vue的Diff算法原理、優化策略以及實現細節。例如,網頁1詳細介紹了Vue Diff算法的核心設計,包括雙端比較和key的作用;Vue3中的快速Diff算法; 通常,解釋一個算法可以從其基本原理、核心策略、優化手段、源碼實現以及應用場景等方面展開…

【MySQL_03】數據庫基本--核心概念

文章目錄 一、數據庫基礎1.1 數據庫基礎定義1.2 數據庫分類與典型產品1.3 數據庫模型1.4 數據庫層次結構1.5 數據庫核心機制1.6 數據表和視圖1.61 數據表&#xff08;Table&#xff09;1.62 視圖&#xff08;View&#xff09; 1.7 鍵類型1.8 MySQL數據類型1.9 數據庫范式化 二、…

FreeRTOS第16篇:FreeRTOS鏈表實現細節04_為什么FreeRTOS選擇“侵入式鏈表”

文/指尖動聽知識庫-星愿 文章為付費內容,商業行為,禁止私自轉載及抄襲,違者必究!!! 文章專欄:深入FreeRTOS內核:從原理到實戰的嵌入式開發指南 1 傳統鏈表 vs. 侵入式鏈表 在嵌入式系統中,內存和性能的優化至關重要。FreeRTOS選擇侵入式鏈表而非傳統鏈表,其背后是內…

STM32讀寫片內FLASH 筆記

文章目錄 前言STM32F105的內部ROM分布STM32F10x的閃存擦寫解鎖FPECMain FLASH 的編寫 main Flash的擦除注意點 前言 在通過OTA的方式對設備進行升級&#xff0c;若在使用內部FLASH裝載固件程序的方式下&#xff0c;需要擦寫 內部FLASH 從而實現把新的固件程序寫入到 內部FLASH…

Python爬蟲實戰:爬取財金網實時財經信息

注意:以下內容僅供技術研究,請遵守目標網站的robots.txt規定,控制請求頻率避免對目標服務器造成過大壓力! 一、引言 在當今數字化時代,互聯網數據呈爆炸式增長,其中蘊含著巨大的商業價值、研究價值和社會價值。從金融市場動態分析到行業趨勢研究,從輿情監測到學術信息收…

3.3.2 用仿真圖實現點燈效果

文章目錄 文章介紹Keil生成.hex代碼Proteus仿真圖中導入.hex代碼文件開始仿真 文章介紹 點燈之前需要準備好仿真圖keil代碼 仿真圖參考前文&#xff1a;3.3.2 Proteus第一個仿真圖 keil安裝參考前文&#xff1a;3.1.2 Keil4安裝教程 keil新建第一個項目參考前文&#xff1a;3.1…

996引擎-問題處理:實現自定義道具變身卡

996引擎-問題處理:實現自定義道具變身卡 方案一、修改角色外觀(武器、衣服、特效) 實現變身先看效果創建個NPC測試效果方案二、利用 Buff 實現變身創建:變身Buff配buff表,實現人物變形測試NPC創建道具:變身卡配item表,添加道具:變身卡觸發函數參考資料方案一、修改角色外…

AI視頻領域的DeepSeek—阿里萬相2.1圖生視頻

讓我們一同深入探索萬相 2.1 &#xff0c;本文不僅介紹其文生圖和文生視頻的使用秘籍&#xff0c;還將手把手教你如何利用它實現圖生視頻。 如下為生成的視頻效果&#xff08;我錄制的GIF動圖&#xff09; 如下為輸入的圖片 目錄 1.阿里巴巴全面開源旗下視頻生成模型萬相2.1模…

驅動 AI 邊緣計算新時代!高性能 i.MX 95 應用平臺引領未來

智慧浪潮崛起&#xff1a;AI與邊緣計算的時代 正悄然深植于我們的日常生活之中&#xff0c;無論是火熱的 ChatGPT 與 DeepSeek 語言模型&#xff0c;亦或是 Meta 智能眼鏡&#xff0c;AI 技術已經無形地影響著我們的生活。這股變革浪潮并未停歇&#xff0c;而是進一步催生了更高…

如何快速判斷IP是否為代理

1.探究IP地址的地理分布 代理IP的所在位置&#xff0c;往往與用戶實際所在地不吻合。可以通過運用WHOIS查詢工具或在線IP地址定位服務&#xff0c;輸入所需查詢的IP&#xff0c;即可獲得其地理位置信息。 若該信息顯示的位置并非用戶所在城市或顯示為知名代理服務器節點&…

從CL1看生物計算機的創新突破與發展前景:技術、應用與挑戰的多維度剖析

一、引言 1.1 研究背景與意義 隨著科技的飛速發展&#xff0c;計算機技術已經成為推動現代社會進步的核心力量之一。從最初的電子管計算機到如今的大規模集成電路計算機&#xff0c;計算機的性能得到了極大的提升&#xff0c;應用領域也不斷拓展。然而&#xff0c;傳統計算機…

AI革命先鋒:DeepSeek與藍耘通義萬相2.1的無縫融合引領行業智能化變革

云邊有個稻草人-CSDN博客 目錄 引言 一、什么是DeepSeek&#xff1f; 1.1 DeepSeek平臺概述 1.2 DeepSeek的核心功能與技術 二、藍耘通義萬相2.1概述 2.1 藍耘科技簡介 2.2 藍耘通義萬相2.1的功能與優勢 1. 全鏈條智能化解決方案 2. 強大的數據處理能力 3. 高效的模型…

zabbix圖表中文顯示方框

問題&#xff1a; zabbix安裝完成后&#xff0c;查看圖形&#xff0c;下方中文顯示為方框 思路&#xff1a; 替換字體文件&#xff0c;或者修改配置文件指向中文可以正常顯示的字體文件 方案&#xff1a; 查找資料確認影響因素 通過資料查詢得知&#xff0c;使用的字體文…

【Linux-網絡】HTTP的清風與HTTPS的密語

&#x1f3ac; 個人主頁&#xff1a;誰在夜里看海. &#x1f4d6; 個人專欄&#xff1a;《C系列》《Linux系列》《算法系列》 ?? 道阻且長&#xff0c;行則將至 目錄 &#x1f4da; 引言 &#x1f4da; 一、HTTP &#x1f4d6; 1.概述 &#x1f4d6; 2.URL &#x1f5…

通過數據庫網格架構構建現代分布式數據系統

在當今微服務驅動的世界中&#xff0c;企業在跨分布式系統管理數據方面面臨著越來越多的挑戰。數據庫網格架構已成為應對這些挑戰的強大解決方案&#xff0c;它提供了一種與現代應用架構相匹配的分散式數據管理方法。本文將探討數據庫網格架構的工作原理&#xff0c;以及如何使…

RangeError: Radix must be an integer between 2 and 36

&#x1f90d; 前端開發工程師、技術日更博主、已過CET6 &#x1f368; 阿珊和她的貓_CSDN博客專家、23年度博客之星前端領域TOP1 &#x1f560; 牛客高級專題作者、打造專欄《前端面試必備》 、《2024面試高頻手撕題》、《前端求職突破計劃》 &#x1f35a; 藍橋云課簽約作者、…

荊為好的專欄推薦

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點下班 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 專欄推薦特別篇1. 后端專欄推薦2. 云原生專欄…