国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在Kubernetes上部署和伸縮Jenkins

Pines_Cheng / 1327人閱讀

摘要:在本教程中,我們將使用在上部署和伸縮。它主要用來幫助操作人員部署伸縮更新和維護服務,以及提供服務發現機制來管理節點集群上的容器化應用程序。代理則使用,網絡啟動協議啟動,因此容器能夠在啟動和運行之后自動連接到。賬戶我們將在上部署集群。

在本教程中,我們將使用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/co...

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

項目目標

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

我們首先會將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鏡像:

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

完成后,保存并關閉文件

編寫Jenkins代理的Dockerfiles

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

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

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

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

完成之后保存并關閉文件

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

保存并關閉文件

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

構建鏡像并Push到Docker Hub

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

首先構建Jenkins master的鏡像:

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

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

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

使用賬戶憑證登錄到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.
Username:
Password:
Login Succeeded`

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

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

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

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

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

使用Rancher部署集群

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

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

https://rancher.com/docs/ranc...

在集群上部署Jenkins

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

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

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

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

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

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

metadata:
  labels:
    app: jenkins
spec:
  containers:
    - name: jenkins
      image: /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和代理之間的內部通信,之后會用到該服務:

在文件內,復制下面的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選項卡。

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

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

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

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

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

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

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

配置動態的構建代理

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

禁用默認Master構建代理

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

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

點擊Manage Nodes之后的Manage Jenkins。

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

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

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

收集配置信息

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

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

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

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

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

配置Jenkins Kubernetes插件

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

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

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

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

在下面的表單中,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地址和端口,用冒號分隔:

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

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

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

Command to run:刪除這里的值

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

其余字段保持原樣。

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

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

測試動態構建作業

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

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

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

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

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

完成之后單擊Save。

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

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

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

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

完成后單擊Save。

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

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

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

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

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

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

結 論

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

使用Rancher創建了一個集群

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

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

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

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32826.html

相關文章

  • 樂心醫療的 Kubernetes云平臺建設實踐

    摘要:宋體自年被開源以來,很快便成為了容器編排領域的標準。宋體年月,樂心醫療的第一個生產用集群正式上線。所以于年推出后,樂心醫療的運維團隊在開會討論之后一致決定盡快遷移到。Kubernetes 自 2014 年被 Google 開源以來,很快便成為了容器編排領域的標準。因其支持自動化部署、大規模可伸縮和容器化管理等天然優勢,已經被廣泛接納。但由于 Kubernetes 本身的復雜性,也讓很多企業的...

    testHs 評論0 收藏0
  • 【容器云 UK8S】最佳實踐:基于Jenkins的CI/CD實踐

    摘要:擴展性好當集群的資源嚴重不足而導致排隊等待時,可以很容易的添加一個到集群中,從而實現擴展。用法,選擇盡可能使用這個節點鏡像,填寫,這個容器鏡像是我們的運行環境。更新文件,這里我們只是將中的鏡像更換成最新構建出的鏡像。基于Jenkins的CI/CD實踐[TOC]一、概要提到K8S環境下的CI/CD,可以使用的工具有很多,比如Jenkins、Gitlab CI、新興的drone等,考慮到大多公司...

    Tecode 評論0 收藏0
  • 馬斯洛理論告訴你,Kubernetes可以滿足微服務的這些需求

    摘要:馬斯洛使用諸如生理安全歸屬感和愛尊重自我實現和自我超越等來描述人類動機通常所經歷的階段。這就是人們使用谷歌引擎或容器服務的原因。 需求層次理論是由心理學家艾伯特·馬斯洛設計的,它是一種解釋人類動機的心理學理論,它由多層次的人類需求模型組成,通常被描述成金字塔內的等級層次。馬斯洛使用諸如生理、安全、歸屬感和愛、尊重、自我實現和自我超越等來描述人類動機通常所經歷的階段。作為人類,首先需要滿...

    RayKr 評論0 收藏0
  • Kubernetes宜信落地實踐

    摘要:容器云的背景伴隨著微服務的架構的普及,結合開源的和等微服務框架,宜信內部很多業務線逐漸了從原來的單體架構逐漸轉移到微服務架構。 容器云的背景 伴隨著微服務的架構的普及,結合開源的Dubbo和Spring Cloud等微服務框架,宜信內部很多業務線逐漸了從原來的單體架構逐漸轉移到微服務架構。應用從有狀態到無狀態,具體來說將業務狀態數據如:會話、用戶數據等存儲到中間件中服務中。 showI...

    fxp 評論0 收藏0
  • Kubernetes宜信落地實踐

    摘要:容器云的背景伴隨著微服務的架構的普及,結合開源的和等微服務框架,宜信內部很多業務線逐漸了從原來的單體架構逐漸轉移到微服務架構。 容器云的背景 伴隨著微服務的架構的普及,結合開源的Dubbo和Spring Cloud等微服務框架,宜信內部很多業務線逐漸了從原來的單體架構逐漸轉移到微服務架構。應用從有狀態到無狀態,具體來說將業務狀態數據如:會話、用戶數據等存儲到中間件中服務中。 showI...

    Labradors 評論0 收藏0

發表評論

0條評論

Pines_Cheng

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<