久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何在Kubernetes上部署和伸縮Jenkins

150次閱讀
沒有評論

共計 8082 個字符,預計需要花費 21 分鐘才能閱讀完成。

本篇文章給大家分享的是有關如何在 Kubernetes 上部署和伸縮 Jenkins,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

我們將使用 Rancher 在 Kubernetes 上部署和伸縮 Jenkins。按照步驟一步步來,你將會使用到我們用來測試實際構建作業的 master-agent 體系結構,創建出功能齊全的 Jenkins。

介   紹

Jenkins 是一個開源的持續集成和持續交付工具,它可以用來自動構建、測試和部署軟件。在全世界有超過一百萬的用戶在使用 Jenkins,它是目前最流行的自動化服務器。Jenkins 的優勢包括:

是一個擁有龐大社區支持的開源軟件

基于 Java 的代碼庫,使其可以移植到所有主要平臺

有超過 1000 個插件的豐富生態系統

Jenkins 能夠與主流的源代碼管理系統(Git、SVN、Mercurial 以及 CVS)、主流的構建工具(Ant、Maven、Grunt)、shell 腳本和 Windows 批處理命令、測試框架、報表生成器的都良好地協同工作。Jenkins 的插件還提供了對 Docker 和 Kubernetes 的支持,Docker 和 Kubernetes 能夠創建、部署基于云的微服務環境,并且把它們投入到測試和生產部署中。

Jenkins 支持 master-agent 體系結構(許多 build agents/構建代理根據 master 服務器調度來完成任務),使其具有高度的可伸縮性。Master 的工作是安排構建作業,將作業分發給代理實際執行,監視這些代理并獲得構建的結果。除此之外,master 服務器還可以直接執行構建作業。

代理的任務是構建從 master 服務器發送過來的作業。作業可以配置在指定類型的代理商運行,如果沒有特別需求,Jenkins 就簡單地選擇下一個可用代理。

Jenkins 的可伸縮性可以帶來許多便利:

并行運行多個構建方案

自動地掛載和移除代理,節約開銷

分配負載

當然,盡管 Jenkins 包含了這種開箱即用的可伸縮性特性,配置它的過程卻并不是很簡單。有許多能夠擴展 Jenkins 的選擇,而其中一種強大的選擇就是使用 Kubernetes。

Kubernetes 是什么?

Kubernetes 是一個開源的容器編排工具。它主要用來幫助操作人員部署、伸縮、更新和維護服務,以及提供服務發現機制來管理節點集群上的容器化應用程序。你可以查看官方文檔,了解更多關于 Kubernetes 的內容和用途:

https://kubernetes.io/docs/concepts/overview/what-is-kubernetes/

Kubernetes 是管理可伸縮的、基于容器的工作負載的最佳工具之一。包括 Jenkins 在內的大多數應用程序都可以進行容器化,而這也使得 Kubernetes 成為了非常好的選擇。

如何在 Kubernetes 上部署和伸縮 Jenkins

項目目標

在我們開始之前,先花一點時間描述一下我們將要構建的系統。

我們首先會將 Jenkins master 實例部署到 Kubernetes 集群上。我們將使用 Jenkins 的 kubernetes 插件。我們將使用 Jenkins 的 kubernetes 插件,通過提供動態代理來適配當前的工作負載,在集群上擴展 Jenkins。該插件基于具體的 Docker 鏡像啟動代理,為每個構建創建一個 Kubernetes pod。在構建完成后,Jenkins 將刪除 pod 來節省資源。代理則使用 JNLP(Java Network Launch Protocol,Java 網絡啟動協議)啟動,因此容器能夠在啟動和運行之后自動連接到 Jenkins master。

前期準備和安裝

你需要準備這些東西來完成本教程:

Linux 機器用于運行 Rancher:我們還會使用它構建自定義的 Jenkins 鏡像。可以按照 Rancher 安裝入門指南在主機上安裝 Docker 和 Rancher:

https://rancher.com/quick-start/

Docker Hub 賬戶:我們需要一個帶有容器鏡像倉庫的賬戶,為 Jenkins master 和代理推送自定義鏡像。

GCP 賬戶:我們將在 GCP 上部署 Kubernetes 集群。谷歌云平臺的 free-tier 應該能夠完成這項工作。您實際使用其他公有云,操作也是一樣的。

為 Jenkins 組件構建自定義的鏡像

那么我們先從給 Jenkins 組件構建自定義鏡像開始,將它們推送到 Docker Hub。

登錄到 Linux 服務器,在那里你就可以運行 Rancher 并構建鏡像。如果還沒有安裝 Docker 和 Rancher,請按照 Rancher 快速入門指南在主機上安裝 Docker 和 Rancher。主機準備好后,我們就可以準備 dockerfile 了。

編寫 Jenkins Master Dockerfile

我們先在當前文件夾下創建一個名為 Dockerfile-jenkins-master 的文件,來定義 Jenkins master 鏡像:

如何在 Kubernetes 上部署和伸縮 Jenkins

在文件內部,加入下面 Dockerfile 構建命令。這些命令使用主 Jenkins Docker 鏡像作為基礎,配置我們用于部署到 Kubernetes 集群的插件:

如何在 Kubernetes 上部署和伸縮 Jenkins

完成后,保存并關閉文件

編寫 Jenkins 代理的 Dockerfiles

接下來,我們就可以為 Jenkins 代理創建 Dockerfile 文件了。我們將創建兩個代理鏡像,演示 Jenkins 如何正確識別為每個作業準備的正確代理。

在當前目錄中創建一個空文件。我們將把它復制到鏡像中作為正在構建的每個代理的標識符:

如何在 Kubernetes 上部署和伸縮 Jenkins

現在,為第一個代理鏡像創建 Dockerfile

如何在 Kubernetes 上部署和伸縮 Jenkins

該鏡像將把空文件復制到一個唯一的名稱,標記所使用的代理。

如何在 Kubernetes 上部署和伸縮 Jenkins

完成之后保存并關閉文件

最后,定義第二個代理。這個和前一個代理相同,不過使用了不同的文件標識符:

如何在 Kubernetes 上部署和伸縮 Jenkins

保存并關閉文件

現在你的工作目錄看起來應該是這樣的:

如何在 Kubernetes 上部署和伸縮 Jenkins

構建鏡像并 Push 到 Docker Hub

有了準備好的 Dockerfile,我們現在就準備構建和 push 鏡像到 Docker Hub 啦。

首先構建 Jenkins master 的鏡像:

注意:下面的命令中,將 dockerhub_user 替換成自己的 Docker Hub 賬戶名

[root@rancher-instance jenkins-kubernetes]# docker build -f Dockerfile-jenkins-master -t dockerhub_user /jenkins-master .

當命令的結果返回之后,查看新創建的鏡像:

如何在 Kubernetes 上部署和伸縮 Jenkins

使用賬戶憑證登錄到 Docker Hub:

[root@rancher-instance jenkins-kubernetes]# docker loginLogin with your Docker ID to push and pull images from Docker Hub. If you don t have a Docker ID, head over to https://hub.docker.com to create one. br/ Username: br/ Password: br/ Login Succeeded

現在,將鏡像推送到 Docker Hub:

注意:下面的命令中,同樣注意替換成自己的 Docker Hub 賬戶

如何在 Kubernetes 上部署和伸縮 Jenkins

你可能還需要同樣的命令來構建第二個鏡像給 Jenkins JNLP 代理:

注意:下面的命令中,注意將 dockerhub_user 替換成自己的 Docker Hub 賬戶名

如何在 Kubernetes 上部署和伸縮 Jenkins

如果一切順利,你就能在 Docker Hub 賬戶中看到下圖這個狀態:

如何在 Kubernetes 上部署和伸縮 Jenkins

使用 Rancher 部署集群

現在我們的鏡像已經發布,就可以使用 Rancher 來幫助部署 GKE 集群了。如果您之前安裝了 Rancher,通過 web 瀏覽器訪問服務器的 ip 地址就能登錄到實例了。

接下來,創建新的 GKE 集群。這里為了創建具有訪問權限的服務賬戶,你需要登錄到谷歌云賬戶。使用其他的公有云服務所需的步驟也是相似的,具體可以參考文檔學習如何創建服務賬號,以及如何與 Rancher 一起部署集群:

https://rancher.com/docs/rancher/v2.x/en/cluster-provisioning/hosted-kubernetes-clusters/

在集群上部署 Jenkins

在集群準備好之后,我們就可以部署 Jenkins master 和創建一些服務了。如果你對 kubectl 比較熟悉,你可以直接用命令行來實現;不過通過 Rancher 的 UI,你也能很容易地部署所有需要的組件。

無論你選擇何種方式將工作負載添加到集群上,都需要在本地計算機上創建下面的文件來定義需要創建的對象。

首先創建一個文件定義 Jenkins 部署:

如何在 Kubernetes 上部署和伸縮 Jenkins

在文件里粘貼下面的內容:

注意:下面的內容中將 dockerhub_user 替換成自己的 Docker Hub 賬戶名

`apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: jenkins
spec:
replicas: 1
template:
metadata:
labels:
app: jenkins
spec:
containers:

name: jenkins
image: dockerhub_user /jenkins-master
env:

name: JAVA_OPTS
value: -Djenkins.install.runSetupWizard=false
ports:

name: http-port
containerPort: 8080

name: jnlp-port
containerPort: 50000
volumeMounts:

name: jenkins-home
mountPath: /var/jenkins_home
volumes:

name: jenkins-home
emptyDir: {}`

下面,創建一個文件配置我們需要的兩個服務。

一個是 LoadBalancer 服務,它將提供一個公開的 IP 地址便于我們在 Internet 上訪問 Jenkins。另一個是 ClusterIP 服務,用于在 master 和代理之間的內部通信,之后會用到該服務:

如何在 Kubernetes 上部署和伸縮 Jenkins

在文件內,復制下面的 YAML 結構:

`apiVersion: v1
kind: Service
metadata:
name: jenkins
spec:
type: LoadBalancer
ports:

port: 80
targetPort: 8080
selector:
app: jenkins
apiVersion: v1
kind: Service
metadata:
name: jenkins-jnlp
spec:
type: ClusterIP
ports:

port: 50000
targetPort: 50000
selector:
app: jenkins`

在 Rancher 上,點擊自己管理的集群(例子中名為 jenkins)。在左上角的菜單中,選擇 Default 項目,然后選擇 Workloads 選項卡。

如何在 Kubernetes 上部署和伸縮 Jenkins

現在,點擊 Import YAML。在接下來的頁面中,點擊右上角的 Read from a file 按鈕。選擇在本地創建的 deployment.yml 文件并點擊 Import。

如何在 Kubernetes 上部署和伸縮 Jenkins

Rancher 將在集群上面部署一個基于你 Jenkins master 鏡像的 pod

如何在 Kubernetes 上部署和伸縮 Jenkins

接下來,我們需要在 Jenkins master 上配置訪問 UI 的方式。

在 Load Balanced 選項卡中,按照先前導入文件一樣的操作。單擊 Import YAML 按鈕,接著點 Read from a file 按鈕。然后從自己的電腦中選擇 service.yml 文件,點擊 Import 按鈕。

如何在 Kubernetes 上部署和伸縮 Jenkins

Rancher 會開始創建你的服務。部署負載均衡會花費一些時間。

如何在 Kubernetes 上部署和伸縮 Jenkins

在 service 狀態成為 Active 后,你可以點擊在負載均衡器行后側的三個垂直點,選擇 View/Edit YAML 來找到它的公共 IP 地址。在這里,向下滾動界面找到在 status- loadBalancer- ingress- ip 下的 IP 地址。

如何在 Kubernetes 上部署和伸縮 Jenkins

這樣我們就可以通過該 IP 地址在 web 瀏覽器中訪問 Jenkins UI 了。

如何在 Kubernetes 上部署和伸縮 Jenkins

配置動態的構建代理

有了 Jenkins master 啟動運行后,我們可以進一步配置動態構建代理,以在必要的時候可以自動啟動 Pods。

禁用默認 Master 構建代理

Jenkins UI 中左側的 Build Executor Status 下,默認配置了兩個 Executor,等待執行構建作業,它們是由 Jenkins master 提供的。

主實例應該只負責調度構建作業、將作業分發給代理以供執行、監視代理并獲取構建結果。因為我們不希望主實例執行構建,因此要禁用這些。

點擊 Manage Nodes 之后的 Manage Jenkins。

如何在 Kubernetes 上部署和伸縮 Jenkins

單擊與 master 行上的齒輪圖標。

如何在 Kubernetes 上部署和伸縮 Jenkins

接下來的頁面中,把# of executors 設置成 0,點擊 Save。

如何在 Kubernetes 上部署和伸縮 Jenkins

這兩個空閑的 executors 將從 UI 左側的 Build Executor Status 中刪除。

收集配置信息

為了在 Kubernetes 集群上自動部署構建代理,我們需要一些信息來配置 Jenkins。我們需要三條來自 GCP 賬戶的信息以及一條來自 ClusterIP 服務中的信息。

在你的 GCP 賬戶中,選擇 Kubernetes Engine,接著是 Clusters,然后點擊集群的名稱。在 Detail 列中,復制端點 IP 供之后使用。這是我們需要讓 Jenkins 連接到集群的 URL:

如何在 Kubernetes 上部署和伸縮 Jenkins

下一步,點擊端點右側的 Show credentials。復制 Username 和 Password。

如何在 Kubernetes 上部署和伸縮 Jenkins

現在,切換到 Rancher UI。在左上角菜單中,選擇 Jenkins 集群上的 Default 項目。在上方的導航窗口中選擇 Workloads 選項卡,然后單擊頁面上的 Service Discovery 選項卡:

如何在 Kubernetes 上部署和伸縮 Jenkins

點擊 jenkins-jnlp 行上垂直的三個點,然后單擊 View/Edit YAML。復制 spec clusterIP 以及 spec ports port 中的值備用。

配置 Jenkins Kubernetes 插件

返回主 Jenkins 儀表盤,點擊 Manage Jenkins,然后選擇 Manage Plugins:

如何在 Kubernetes 上部署和伸縮 Jenkins

點擊 Installed 選項卡并查看 Kubernetes 插件是否安裝:

如何在 Kubernetes 上部署和伸縮 Jenkins

現在我們來配置插件。前往 Manage Jenkins 并選擇 Configure System:

如何在 Kubernetes 上部署和伸縮 Jenkins

滑到頁面底部的 Cloud 部分。點擊 Add a new cloud,選擇 Kubernetes。

如何在 Kubernetes 上部署和伸縮 Jenkins

在下面的表單中,Kubernetes URL 字段上輸入 https://,然后輸入從 GCP 賬戶復制的集群端點 IP 地址。

在 Credentials 下,點擊 Add 按鈕,選擇 Jenkins。在出現的表單上,輸入從 GCP 賬戶復制的用戶名和密碼,單擊底部的 Add 按鈕。

返回到 Kubernetes 表單,從 Credentials 下拉菜單中選擇剛才添加的憑據并單擊 Test Connection 按鈕。如果配置正確,則會顯示“Connection test successful”。

現在,向下滾動到頁面底部的 Images 部分,單擊 Add Pod Template 按鈕,然后選擇 Kubernetes Pod Template。使用唯一值填寫“Name”和“Labels”字段,以標識您的第一個代理。我們將使用標簽指定應該使用哪個代理鏡像來運行每個構建。

接下來,在 Jenkins tunnel 字段中,輸入你在 Rancher UI 中從 jenkins-jnlp 服務檢索到的 IP 地址和端口,用冒號分隔:

如何在 Kubernetes 上部署和伸縮 Jenkins

現在,在 Container 字段中,單擊 Add Container 按鈕并選擇 Container Template,在彈出的內容中填寫以下字段:

Name: jnlp(這是 Jenkins 代理需要的)

Docker image:dockerhub_user /Jenkins-slave-jnlp1(確保更改 Docker Hub 用戶名)

Command to run:刪除這里的值

Arguments to pass to the command:刪除這里的值

其余字段保持原樣。

如何在 Kubernetes 上部署和伸縮 Jenkins

接下來,單擊 Add Pod Template 按鈕,再次選擇 Kubernetes Pod Template。對創建的第二個代理鏡像重復剛才的過程,需要注意的是,在需要的時候要修改那些對應于第二個鏡像的值:

如何在 Kubernetes 上部署和伸縮 Jenkins

單擊 Save 按鈕保存修改并繼續。

測試動態構建作業

現在我們已經完成了配置工作,我們可以創建一些構建作業,保證 Jenkins 能夠在 Kubernetes 之上進行伸縮。這里我們將為每個 Jenkins 代理創建 5 個構建作業。

在 Jenkins 主頁面,單擊左側的 New Item,為第一個代理的第一個構建輸入名稱,選擇 Freestyle project 并單擊 OK 按鈕。

如何在 Kubernetes 上部署和伸縮 Jenkins

在下一頁的 Label Expression 字段中,輸入你為第一個 Jenkins 代理鏡像設置的標簽,如果單擊字段之外,會出現一條消息,提示標簽由云提供服務。

如何在 Kubernetes 上部署和伸縮 Jenkins

向下滾動到 Build Environment 部分,檢查 Color ANSI Console Output。

在 Build 部分,單擊 Add build step 并選擇 Execute shell。把下面的腳本粘貼進去。

如何在 Kubernetes 上部署和伸縮 Jenkins

完成之后單擊 Save。

如何在 Kubernetes 上部署和伸縮 Jenkins

給第一個代理創建另外四個工作則是單擊 New Item,填寫新名稱并使用 Copy from 字段來從第一個構建中復制。你可以在無需對第一個構建作更改的情況下保存每個構建。

接下來,為第二個 Jenkins 代理配置第一個作業。單擊 New Item,給第二個代理的第一個作業選個名字,再一次從第一個代理中復制作業。這一次我們將在保存之前修改配置頁面上的字段。

首先,修改 Label Expression 字段匹配第二個代理的標簽。

接著,用下面的腳本替換掉 Build 部分文本框中的腳本:

如何在 Kubernetes 上部署和伸縮 Jenkins

完成后單擊 Save。

如何在 Kubernetes 上部署和伸縮 Jenkins

同樣按照剛剛我們的流程,為第二個代理創建另外四個構建。

現在,轉回到主頁面,單擊每行最右邊的圖標,啟動全部剛剛創建的 10 個作業。在啟動之后,它們會按照 Build Queue 部分的指示排隊等待執行:

如何在 Kubernetes 上部署和伸縮 Jenkins

大約幾秒鐘之后,會開始創建 Pods 來執行構建(你可以在 Rancher 的 Workload 選項卡中檢驗這一點)。Jenkins 會為每個作業創建一個 pod。在每個代理啟動時,它連接到 master 并從隊列中接收要執行的作業。

如何在 Kubernetes 上部署和伸縮 Jenkins

如何在 Kubernetes 上部署和伸縮 Jenkins

代理完成了自己的工作后,它就會自動從集群中刪除:

如何在 Kubernetes 上部署和伸縮 Jenkins

要檢查作業的狀態,可以單擊每個代理中的一項作業。從 Build History 中單擊構建,然后點擊 Console Output。由第一個代理執行的作業應該指定使用了 jenkins-slave1 Docker 鏡像,而由第二個代理執行的構建應該指定使用了 jenkins-slave2 鏡像:

如何在 Kubernetes 上部署和伸縮 Jenkins

如何在 Kubernetes 上部署和伸縮 Jenkins

如果你得到了上面的輸出,那么 Jenkins 的配置就是正確的,而且是按照預期的方式在運行的。現在你就可以開始定制自己的 Kubernetes 的構建系統,幫助自己的團隊測試和發布軟件啦。

我們配置了 Jenkins 來按需自動部署構建代理,將其連接到了 Rancher 管理的 Kubernetes 集群。為此,我們完成了下面的步驟:

使用 Rancher 創建了一個集群

為 Jenkins master 和代理創建了自定義 Docker 鏡像

將 Jenkins master 和 L4 LoadBalancer 服務部署在 Kubernetes 集群上

在集群上配置了 Jenkins kubernetes 插件,自動生成動態代理

使用帶有專用代理鏡像的多個構建作業測試場景

丸趣 TV 小編著重展現了設置 Jenkins master 和代理體系結構的基本的必要配置。我們了解了 Jenkins 如何使用 JNLP 啟動代理,以及容器如何自動連接到 Jenkins master 來接受指令。為了實現這一點,我們使用 Rancher 創建集群、部署工作負載并監控產生的 Pods。在這之后,我們又依靠 Jenkins Kubernetes 插件將所有不同的組件連接在了一起。

以上就是如何在 Kubernetes 上部署和伸縮 Jenkins,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計8082字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 平果县| 栾川县| 沾益县| 迭部县| 巴林左旗| 上思县| 桃江县| 闽侯县| 洪泽县| 桃园县| 吉隆县| 金堂县| 葫芦岛市| 紫阳县| 铅山县| 平安县| 宁海县| 浠水县| 东乡族自治县| 搜索| 伊川县| 孟津县| 灌阳县| 陕西省| 环江| 齐齐哈尔市| 罗江县| 乐山市| 石泉县| 类乌齐县| 板桥市| 旅游| 彭水| 砚山县| 忻城县| 西平县| 浮山县| 富川| 济阳县| 青河县| 涟源市|