新聞中心
Spinnaker是最初由Netflix設(shè)計(jì)和開發(fā)的開源多云連續(xù)交付工具。它有助于將應(yīng)用程序部署到各種云提供商,例如Google Cloud Platform(GCP),Amazon Web Services(AWS)和Microsoft Azure。

該博客的目的是幫助開發(fā)人員,架構(gòu)師和商業(yè)從業(yè)人員了解采用Kubernetes環(huán)境時(shí)使用Spinnaker的重要性。您將了解:
- Spinnaker在Kubernetes環(huán)境中的作用
- 在Kubernetes環(huán)境中使用Spinnaker
- 了解Spinnaker的架構(gòu)
- 使用Spinnaker設(shè)計(jì)持續(xù)交付管道
- 解釋Spinnaker管道工作流程
- 使用Spinnaker設(shè)計(jì)持續(xù)交付管道的最佳實(shí)踐
Spinnaker在Kubernetes環(huán)境中的作用
由于其在管理多容器環(huán)境中的簡(jiǎn)便性,各種組織都采用Kubernetes。但是,Kubernetes不是像Jenkins或Spinnaker這樣的持續(xù)交付或部署工具。早期,Kubernetes生態(tài)系統(tǒng)缺少一個(gè)簡(jiǎn)單的持續(xù)交付工具來自動(dòng)構(gòu)建Kubernetes清單,測(cè)試這些工件并部署這些工件。Jenkins支持在Kubernetes集群上持續(xù)交付應(yīng)用程序,但是增加了復(fù)雜性。
Spinnaker支持在Kubernetes集群上部署應(yīng)用程序。它簡(jiǎn)化了此過程,并幫助組織在Kubernetes集群上部署了生產(chǎn)級(jí)的構(gòu)建工件。
Spinnaker還通過其圖形用戶界面(GUI)用于管理Kubernetes集群上部署的應(yīng)用程序。可以編輯和更新Kubernetes清單文件,以提供動(dòng)態(tài)編輯Kubernetes特定屬性的功能。借助Spinnaker GUI,您還可以監(jiān)控Kubernetes對(duì)象的運(yùn)行狀況。
在Kubernetes環(huán)境中使用Spinnaker
Spinnaker得到了各種云提供商的支持,例如App Engine,Amazon Web Services(AWS),Azure,Google Cloud Platform(GCP),Cloud Foundry,Oracle和Kubernetes。在云上將Spinnaker與Kubernetes一起安裝時(shí),它將提供Kubernetes本機(jī),基于清單的部署。Spinnaker使用一個(gè)帳戶對(duì)Kubernetes集群進(jìn)行身份驗(yàn)證。
在Kubernetes環(huán)境中Spinnaker的關(guān)鍵功能是應(yīng)用程序管理和應(yīng)用程序部署。應(yīng)用程序管理功能有助于管理和查看Kubernetes集群對(duì)象??梢允褂肧pinnaker在Kubernetes對(duì)象上執(zhí)行各種操作,例如擴(kuò)展,縮小,回滾和前進(jìn)。Spinnaker的此功能有助于從單個(gè)點(diǎn)(即Spinnaker GUI)管理多個(gè)Kubernetes集群。
Spinnaker的應(yīng)用程序部署功能用于在Kubernetes集群中部署各種對(duì)象。Spinnaker在Kubernetes集群中部署應(yīng)用程序時(shí)支持各種部署策略,例如Blue/Green,滾動(dòng)更新,canary部署等。要執(zhí)行應(yīng)用程序部署,Spinnaker使用管道和階段。借助Spinnaker管道,您可以創(chuàng)建持續(xù)的交付流程,以將代碼從源代碼管理工具自動(dòng)部署到Kubernetes集群。您還可以使用Spinnaker階段在將任何內(nèi)容部署到生產(chǎn)Kubernetes集群上之前執(zhí)行代碼驗(yàn)證。
了解Spinnaker的架構(gòu)
Spinnaker由獨(dú)立的微服務(wù)組件組成。下面提到其中一些組件:
- Deck:提供與Spinnaker工具交互的用戶界面。
- Gate:充當(dāng)API網(wǎng)關(guān)。它將所有API請(qǐng)求傳遞給服務(wù)。
- Orca:處理各種臨時(shí)操作并管理管道及其階段。
- Clouddriver:云提供商。充當(dāng)Spinnaker與云提供商之間的集成點(diǎn)。
- Front50:保留應(yīng)用程序,管道和項(xiàng)目的元數(shù)據(jù)。
- Rosco:烘焙映像,然后將其部署在各種云提供商上。
- Igor:通過諸如Jenkins和Travis CI的持續(xù)集成平臺(tái)觸發(fā)管道。
- Echo:通過電子郵件,短信和Slack發(fā)送通知。它還負(fù)責(zé)傳入的Webhooks,例如Github Webhooks和Jenkins Webhooks。
- Fiat:充當(dāng)Spinnaker的授權(quán)服務(wù)。
- Kayenta:為Spinnaker提供自動(dòng)化的金絲雀分析。
- Halyard:一種配置服務(wù),用于安裝,更新和配置Spinnaker。
使用Spinnaker設(shè)計(jì)持續(xù)交付管道
創(chuàng)建了一個(gè)持續(xù)交付管道,以在兩個(gè)不同的Kubernetes命名空間(即DEV和UAT)上部署Kubernetes清單和應(yīng)用程序構(gòu)建(docker鏡像)。要?jiǎng)?chuàng)建一個(gè)持續(xù)交付管道,您需要一個(gè)Helm Charts作為Kubernetes清單文件的模板,Spinnaker正在使用該清單創(chuàng)建最終可部署的Kubernetes清單工件。
您可以創(chuàng)建五個(gè)單獨(dú)的Spinnaker管道,如下所述:
- DEV-Kubernetes集群的YAML文件更改部署流水線:此管道用于在Kubernetes集群的DEV名稱空間上部署,觸發(fā)條件是Kubernetes清單文件發(fā)生了更改(dev.yaml)。
- UAT-Kubernetes集群的YAML文件更改部署流水線:此管道用于在Kubernetes集群的UAT名稱空間上部署,觸發(fā)條件是Kubernetes清單文件發(fā)生了更改(uat.yaml)。
- DEV – Docker鏡像–應(yīng)用程序部署流水線:此管道用于代碼更改后構(gòu)建Docker鏡像并部署在Kubernetes集群的DEV名稱空間上。
- UAT – Docker鏡像–應(yīng)用程序部署流水線:此管道用于代碼更改后構(gòu)建Docker鏡像并部署在Kubernetes集群的UAT名稱空間上。
- UAT-Jenkins手動(dòng)Docker鏡像部署流水線:此管道用于代碼更改后構(gòu)建Docker鏡像并手動(dòng)部署在Kubernetes集群的UAT命名空間上。它使用戶可以在UAT名稱空間上手動(dòng)部署所需的應(yīng)用程序代碼(Docker鏡像)。上面提到的兩個(gè)Spinnaker管道分別在DEV和UAT名稱空間上自動(dòng)部署代碼。它使用戶可以控制在UAT名稱空間上部署的應(yīng)用程序代碼(Docker鏡像)。
解釋Spinnaker管道的工作流程
計(jì)劃部署的Kubernetes清單文件和應(yīng)用程序代碼(Docker鏡像)現(xiàn)在應(yīng)該推送到GitHub存儲(chǔ)庫(kù)。
- 在GitHub上配置Webhook,自動(dòng)將更改通知推送到Jenkins,Jenkins配置有作業(yè)以自動(dòng)檢測(cè)GitHub中的應(yīng)用程序代碼更改。
- Jenkins作業(yè)獲取最新的應(yīng)用程序代碼更改并構(gòu)建Docker鏡像。使用Docker插件或者是原生的dockerCLI指令,Jenkins將新創(chuàng)建的鏡像推送到Docker Hub。
- 相應(yīng)的Spinnaker管道在自動(dòng)觸發(fā)器的幫助下持續(xù)監(jiān)視Docker Hub注冊(cè)表。
- 在Docker Hub注冊(cè)表中獲取到最新的Docker鏡像后,您可以執(zhí)行Spinnaker管道觸發(fā)器并將相應(yīng)的應(yīng)用程序代碼(Docker鏡像)部署在Kubernetes集群的DEV/UAT名稱空間上。
讓我們?cè)敿?xì)討論每個(gè)管道。
用于DEV和UAT的Kubernetes集群管道的YAML文件更改部署流水線
該Spinnaker管道包括四個(gè)階段-配置、Jenkins、Bake(清單)和Deploy(清單)。
- 配置階段是一個(gè)自動(dòng)觸發(fā)器,配置為檢測(cè)dev.yml 或者 uat.yml文件中的提交更改。如果這些文件中有更改,則將開始執(zhí)行此管道。
- Jenkins階段向Jenkins作業(yè)發(fā)送觸發(fā)器,該作業(yè)在現(xiàn)有的Kubernetes集群上執(zhí)行一組Linux命令(構(gòu)建鏡像指令),以檢測(cè)最近部署的Docker鏡像標(biāo)簽。此階段確保不使用latest的Docker鏡像標(biāo)記和更新現(xiàn)有的Docker鏡像。之后,Jenkins階段將現(xiàn)有的Docker映像標(biāo)簽記錄在一個(gè)文本文件中(例如,build_uat_yml.properties)。
稍后,文本文件將傳遞到下一個(gè)Spinnaker階段,即Bake(清單)。
- 此階段配置有一個(gè)模板,該模板包含鏡像標(biāo)簽的變量為“ {{.Values.image.tag}}”。spinnaker用build_uat_yml.properties/ build_dev_yml.properties文件中存在的鍵值替換此變量值。
然后,Spinnaker創(chuàng)建一個(gè)最終的構(gòu)建工件,其中包含清單值和Jenkins作業(yè)記錄的Docker鏡像標(biāo)簽值。
- 部署(清單)階段使用此最終工件,并將此清單構(gòu)建工件部署在DEV/UAT名稱空間上,而無需更新現(xiàn)有Docker鏡像標(biāo)簽。
DEV – Docker鏡像-應(yīng)用程序部署管道
此Spinnaker管道包括三個(gè)階段:配置,烘焙(清單)和部署(清單)。
- Configure階段配置有自動(dòng)觸發(fā)器,以在Docker Hub注冊(cè)表中檢測(cè)新推送的Docker映像。
- Bake(Manifest)階段用于根據(jù)現(xiàn)有的Helm模板和已定義的dev.yml值文件創(chuàng)建Kubernetes清單文件。最終工件是使用帶有“最新”標(biāo)簽的Docker鏡像創(chuàng)建的。
- 部署(清單)階段使用最終工件,并將其部署在已配置的Kubernetes集群的DEV名稱空間中。
UAT – Docker鏡像-應(yīng)用程序部署管道
該管道使用與上述相同的流程從現(xiàn)有的Helm模板和已定義的uat.yml值文件創(chuàng)建最終工件。唯一的區(qū)別是,在此階段,將自動(dòng)觸發(fā)器配置為“ DEV – Docker鏡像–應(yīng)用程序部署”管道的執(zhí)行結(jié)果?!?DEV – Docker鏡像–應(yīng)用程序部署”管道的成功執(zhí)行/完成將開始管道的執(zhí)行。如果“ DEV-Docker鏡像-應(yīng)用程序部署”管道的執(zhí)行進(jìn)入失敗狀態(tài),則該管道將永遠(yuǎn)不會(huì)開始執(zhí)行,這將防止在Kubernetes集群的UAT名稱空間中部署失敗的工件。
UAT-Jenkins手動(dòng)Docker鏡像部署管道
該管道可幫助用戶根據(jù)需要在UAT名稱空間中部署舊的Docker鏡像工件。用戶提供所需的Docker鏡像標(biāo)簽,該標(biāo)簽將通過參數(shù)化的Jenkins作業(yè)進(jìn)行部署,該作業(yè)會(huì)創(chuàng)建文本文件(例如build.properties),并將用戶提供的Docker鏡像作為內(nèi)容。例如– IMAGE_TAG = v15。這里,v15是用戶提供的鏡像標(biāo)簽。
將build.properties文件作為輸入傳遞到Spinnaker管道。
- 烘烤(清單)階段配置有一個(gè)模板,該模板包含鏡像標(biāo)簽的變量為“ {{.Values.image.tag}}”。Spinnaker將該變量值替換為build-properties文件中存在的鍵值。然后,Spinnaker將創(chuàng)建最終的構(gòu)建工件,其中包含清單值和用戶傳遞的Docker鏡像標(biāo)簽值。
- 部署(清單)階段使用此最終工件,并通過使用提到的標(biāo)簽拉出相應(yīng)的Docker鏡像,將該清單構(gòu)建工件部署在UAT名稱空間上。
使用Spinnaker設(shè)計(jì)持續(xù)交付管道的最佳實(shí)踐
- Spinnaker提供的GUI允許用戶執(zhí)行應(yīng)用程序管理,例如通過GUI直接編輯Kubernetes對(duì)象YAML定義文件。但是大多數(shù)時(shí)候,源代碼管理工具用于存儲(chǔ)和版本化Kubernetes對(duì)象YAML定義文件。在這種情況下,通過Spinnaker GUI完成的任何YAML文件更改都將在下一次管道部署期間被覆蓋。因此,強(qiáng)烈建議對(duì)存儲(chǔ)在源代碼管理工具中的YAML文件進(jìn)行更改,而不是直接通過Spinnaker GUI編輯YAML文件。
- 使用Docker鏡像推送而不是GitHub推送觸發(fā)器或Jenkins作業(yè)觸發(fā)器配置Spinnaker管道觸發(fā)器。這種做法避免了構(gòu)建和驗(yàn)證系統(tǒng)的重組。
- 不要在Docker鏡像中烘焙Secrets。應(yīng)在運(yùn)行時(shí)使用云提供商的密鑰管理服務(wù)加載機(jī)密。
- 使用審核日志來確定已執(zhí)行的操作,執(zhí)行的時(shí)間以及執(zhí)行的人。最佳實(shí)踐是通過將Spinnaker與GCP Stackdriver和AWS CloudWatch等云監(jiān)控服務(wù)集成來生成Spinnaker審核日志。
- 通過Kubernetes對(duì)象YAML文件在Kubernetes集群上部署Docker鏡像。在YAML文件中定義Docker鏡像有兩種方法,即通過定義鏡像標(biāo)簽或定義鏡像摘要。最佳實(shí)踐是通過摘要在YAML文件中定義Docker鏡像。這種方法將確保部署的Docker鏡像始終指向相同的內(nèi)容。
Spinnaker是一個(gè)強(qiáng)大的持續(xù)交付工具,用于自動(dòng)在Kubernetes集群上部署應(yīng)用程序。Spinnaker管道也可以配置為在執(zhí)行實(shí)際部署之前對(duì)構(gòu)建工件執(zhí)行單元測(cè)試和功能測(cè)試。因此,Spinnaker可以幫助組織更快地將代碼獲取到生產(chǎn)環(huán)境。
網(wǎng)頁(yè)標(biāo)題:在Kubernetes環(huán)境中采用Spinnaker的意義
當(dāng)前鏈接:http://m.fisionsoft.com.cn/article/cdhcods.html


咨詢
建站咨詢
