容器云和DevOps結(jié)合的解決方案_第1頁
容器云和DevOps結(jié)合的解決方案_第2頁
容器云和DevOps結(jié)合的解決方案_第3頁
容器云和DevOps結(jié)合的解決方案_第4頁
容器云和DevOps結(jié)合的解決方案_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 容器云和 DevOps 結(jié)合的解決方案 【導(dǎo)讀】Kubernetes集群是集中了Iaas和Paas的平臺(tái),DevOps是繼ITIL后,一種新興的軟件開發(fā)和運(yùn)維模式。DevOps天生和Kubernetes是匹配的,DevOps+Kubernetes+Scrum 可以大大提高產(chǎn)品設(shè)計(jì)開發(fā)進(jìn)度,幫助團(tuán)隊(duì)更好的達(dá)到軟件的設(shè)計(jì)目標(biāo)。本文介紹了基于kubernetes DevOps的整體方案和組件安裝部署。1 DevOps和云計(jì)算增加容器安全性容器云,特別是Kubernetes的容器云,安全性是一大問題。尤其是公有云環(huán)境的容器云,安全性尤為令人擔(dān)心。因?yàn)橹灰艿卿浫萜髟扑诓僮飨到y(tǒng)的任意一個(gè)節(jié)點(diǎn),任何人

2、都能對容器云中的應(yīng)用容器進(jìn)行操作。開源軟件弊端在其身上顯露無疑,那就是初期不考慮安全性。關(guān)于這一點(diǎn),有些同學(xué)在開源軟件中,也可以體會(huì)到。有些同學(xué)可能會(huì)認(rèn)為,持續(xù)交付和開發(fā)實(shí)踐所帶來的持續(xù)不斷的流量狀態(tài),與管理許多不同容器和/或微服務(wù)的復(fù)雜性,可能會(huì)帶來各種安全風(fēng)險(xiǎn)。誠然,更多的DevOps工具鏈組件往往意味著更大的風(fēng)險(xiǎn),但是運(yùn)用的好的話,情況恰恰相反。使用DevOps持續(xù)更新基于容器的軟件可以創(chuàng)建更高的安全性。這是因?yàn)橥泄艿娜萜髌脚_(tái)等云環(huán)境不斷保持最新狀態(tài) ,并轉(zhuǎn)移到最新的補(bǔ)丁級(jí)別,這些補(bǔ)丁通過云計(jì)算在全球推出。這有助于人們應(yīng)對最新的威脅,并立即解決它們。反過來,這使得整個(gè)環(huán)境更加安全,因?yàn)閼?yīng)

3、用程序內(nèi)的不安全的主要來源是過時(shí)的軟件。這一點(diǎn)就如同,一個(gè)在冬天的冬泳者,雖然光著膀子游泳,極易寒氣入侵,但由于不斷的鍛煉增強(qiáng)了體質(zhì),反而,不容易感冒。2 容器云的興起對DevOps巨大的推動(dòng)作用用戶需要持續(xù)交付容器體系結(jié)構(gòu)以保證安全和有效。要持續(xù)交付工作,需要可重復(fù)的軟件部署,還需要部署到可容忍更改的環(huán)境(包括滾動(dòng)更新和回滾)。云容器服務(wù)需要全球數(shù)以萬計(jì)的集群必須保持最新狀態(tài),而且還要有近乎完善的監(jiān)控體系,如果沒有成熟的DevOps工具可以以可靠的方式實(shí)現(xiàn)自動(dòng)化,實(shí)際上是不可能做到的。如今的許多企業(yè)團(tuán)隊(duì)并沒有運(yùn)行數(shù)以萬計(jì)的集群。他們正在運(yùn)行一些集群。但是,當(dāng)用戶運(yùn)行具有大量容器集群的復(fù)雜大型

4、應(yīng)用程序來管理并保持安全時(shí)(特別是在不同地區(qū))時(shí),也還是需要采用不同的DevOps方法來處理的。3 基于kubernetes DevOps的整體方案以Kubernetes為基礎(chǔ),為基于java語言研發(fā)團(tuán)隊(duì)提供一套完整的DevOps解決方案。在此方案中,開發(fā)人員基于eclipse集成開發(fā),在各種環(huán)境進(jìn)行代碼部署;開發(fā)人員所開發(fā)的代碼交由由Gitlab進(jìn)行托管、版本管理和分支管理;代碼的依賴更新和構(gòu)建工作由Maven進(jìn)行處理;為了提升工作效率和代碼質(zhì)量,在DevOps中引入SonarQube進(jìn)行代碼檢查;由checkmarx進(jìn)行安全檢查,對于打包構(gòu)建后代碼,交由Docker進(jìn)行鏡像構(gòu)建,并在私有鏡

5、像倉庫Nexus中對鏡像進(jìn)行管理;最后,DevOps會(huì)將自動(dòng)從私有鏡像倉庫從拉取鏡像,并在Rancher中進(jìn)行部署?;诖薉evOps解決方案的整體工作過程如下所示:開發(fā)人員基于eclipse集成開發(fā)環(huán)境鏡像代碼開發(fā),將代碼到Gitlab中進(jìn)行托管;Jenkins從Gitlab拉取代碼;通過Sonarqube進(jìn)行代碼質(zhì)量;通過Checkmarx進(jìn)行代碼安全檢查;Jenkins調(diào)用Maven對代碼進(jìn)行打包構(gòu)建;Jenkins調(diào)用Docker構(gòu)建鏡像;Jenkins將構(gòu)建好的鏡像上傳至基于Nexus或者Quay的私有鏡像倉庫;通過API接口,將yaml文件傳送到K8s,拉取Jenkins構(gòu)建的鏡像

6、進(jìn)行部署,完成整個(gè)CD流程。4 組件安裝部署(未有spinnaker的部署)4.1 代碼托管工具-Gitlab代碼的托管基于Gitlab。下面是在Kubernetes中部署gitlab的YAML配置文件,在此文件中定義了gitlab部署和服務(wù)。gitlab部署使用的鏡像為gitlab/gitlab-ce:latest,并暴露了443、80和22這三個(gè)端口,并通過NFS對配置文件、日志和數(shù)據(jù)進(jìn)行持久化。在服務(wù)中, 端口的類型為NodePort,即允許集群外的用戶可以通過映射在主機(jī)節(jié)點(diǎn)上的端口對gitlab進(jìn)行訪問。通過kubectl命令工具,執(zhí)行如下的命令,在kubernetes集群中部署git

7、labkubectl create -f path/gitlab.yaml4.2 鏡像倉庫-Nexus采用Nexus作為docker私有鏡像倉庫和maven的遠(yuǎn)程倉庫。下面是在Kubernetes中部署Nexus的YAML配置文件,在此文件中定義了Nexus部署和服務(wù)。Nexus部署使用的鏡像為sonatype/nexus3:latest,并暴露了8081、5001這兩個(gè)端口,并通過NFS對配置文件、日志和數(shù)據(jù)進(jìn)行持久化。在服務(wù)中,端口的類型為NodePort,即允許集群外的用戶可以通過映射在主機(jī)節(jié)點(diǎn)上的端口對nexus進(jìn)行訪問。其中,5001作為docker私有鏡像倉庫的端口。通過kubec

8、tl命令工具,執(zhí)行如下的命令,在kubernetes集群中部署nexus$ kubectl create -f path/nexus.yaml4.3 流水線工具-Jenkins采用jenkins作為流水線工具。下面是在Kubernetes中部署jenkins的YAML配置文件,在此文件中定義了jenkins部署和服務(wù)。jenkins部署使用的鏡像為lw96/java8-jenkins-maven-git-vim:latest,并暴露了8080這個(gè)端口,并通過NFS對配置文件和數(shù)據(jù)進(jìn)行持久化。在服務(wù)中,端口的類型為NodePort,即允許集群外的用戶可以通過映射在主機(jī)節(jié)點(diǎn)上的端口對jenkins

9、進(jìn)行訪問。另外,在此鏡像中也提供maven和java。通過kubectl命令工具,執(zhí)行如下的命令,在kubernetes集群中部署jenkins:$ kubectl create -f path/jenkins-devops.yaml注意,后續(xù)將執(zhí)行下面的操作:將Kubernetes集群的kubeconfig文件拷貝到50主機(jī)的/k8s-nfs/jenkins-devops/mnt目錄下;將maven的settings.xml文件拷貝至到50主機(jī)的/k8s-nfs/jenkins-devops/repo目錄下;將maven的依賴插件包拷貝至到50主機(jī)的/k8s-nfs/jenkins-devo

10、ps/repo目錄下。4.4 Nexus設(shè)置Nexus在devops中承擔(dān)兩個(gè)功能,作為maven的遠(yuǎn)程倉庫和作為docker的私有鏡像倉庫。在這里,我們使用nexus默認(rèn)安裝的maven-snapshots、maven-releases和maven-public這三個(gè)倉庫4.5 maven設(shè)置maven負(fù)責(zé)管理代碼的依賴關(guān)系和構(gòu)建。maven通過settings.xml文件設(shè)置運(yùn)行環(huán)境,包括與遠(yuǎn)程倉庫的連接。本文中的settings.xml文件,最主要是加入了mirrorOf,如下所示,http:/nexus3:8081中的nexus3是在kubernetes中的服務(wù)名稱。將settings

11、.xml拷貝到/k8s-nfs/jenkins-devops/repo目錄下4.6 Docker的設(shè)置為了能夠支持將遠(yuǎn)程提交的代碼構(gòu)建成鏡像,以及將構(gòu)建好的鏡像上傳至鏡像倉庫需要在/etc/docker/daemon.json的文件中添加下面的內(nèi)容。其中,0為鏡像倉庫的地址和端口,tcp:/:5243為對外暴露的地址和端口。damon.json文件如框中所示。然后用以下重啟docker。鏡像倉庫是要為各個(gè)節(jié)點(diǎn)服務(wù)的,所以一般都用這種地址。不能將其設(shè)為或其他固定ip。$ systemctl daemon-reload$ systemctl restart docker4.7 Sonarqube的

12、設(shè)置Sonarqube為代碼質(zhì)量檢查的插件,需要在Kubernetes中建立postgres數(shù)據(jù)庫(數(shù)據(jù)庫建立在k8s中不推薦,但此處只是用于工具運(yùn)行的數(shù)據(jù)庫),共建立2個(gè)yaml文件,sonar-postgres,由于sonarqube非生產(chǎn)庫,所以用戶名密碼明文是允許的,如下:sonar-sonar.yaml,如下4.8 Jenkins的插件選擇Jenkins作為devops平臺(tái)的流程線工具,需要從gitlab中獲取代碼,并提交給maven進(jìn)行構(gòu)建;在代碼構(gòu)建成功后,調(diào)用docker構(gòu)建鏡像,并將上傳至基于Nexus的私有鏡像倉庫;最終,在Kubernetes中部署和運(yùn)行鏡像。為了實(shí)現(xiàn)上述能力,需要在jenkins中安裝如下插件git plugin:與gitlab集成的插件,用于獲取代碼;maven plugin:與maven集成的插件,用于構(gòu)建代碼;CloudBees Docker Build and Publish plugin:與docker集成的插件,用于構(gòu)建docker鏡像,并上傳至鏡像倉庫;Kubernetes Continuous

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論