如何使用Spinnaker克服Kubernetes持續(xù)交付的挑戰(zhàn)
譯文【51CTO.com快譯】Kubernetes具有很大潛力可以幫助組織快速部署和交付代碼更改,但是在為其進(jìn)行持續(xù)交付時(shí)會(huì)遇到一些挑戰(zhàn)。
Kubernetes是業(yè)界領(lǐng)先的容器編排系統(tǒng),并且以Kubernetes為中心構(gòu)建了一個(gè)龐大的開源和商業(yè)組件的生態(tài)系統(tǒng)。在冠狀病毒疫情發(fā)生之后,更多的組織正在將Kubernetes視為其IT轉(zhuǎn)型旅程的核心部分。Kubernetes之所以成為一個(gè)出色的容器管理工具,因?yàn)樗峁┮韵鹿δ埽?/p>
- 自動(dòng)封裝
- 縮放和自我修復(fù)容器
- 服務(wù)發(fā)現(xiàn)
- 負(fù)載均衡
但是,只是使用Kubernetes可能無(wú)法解決敏捷性的目的,因?yàn)樗鼜膩?lái)不是一個(gè)部署系統(tǒng)。以下將介紹使用Kubernetes面臨的一些挑戰(zhàn),以及如何應(yīng)對(duì)這些挑戰(zhàn)以釋放云原生的全部潛力。
采用Kubernetes時(shí)部署的挑戰(zhàn)
1.部署復(fù)雜性和腳本使用
將應(yīng)用程序部署到Kubernetes中并不是一件容易的事,因?yàn)樗婕霸S多人工編寫的腳本。例如,開發(fā)人員必須創(chuàng)建YAML或JSON格式的Kubernetes部署清單文件(如下圖所示),并編寫kubectl命令來(lái)部署應(yīng)用程序:
盡管對(duì)于某些開發(fā)人員來(lái)說(shuō),單一部署可能看起來(lái)很容易,但當(dāng)其目標(biāo)是每天執(zhí)行多個(gè)部署到dev/QA/Prod時(shí),這將成為一項(xiàng)艱巨的任務(wù)。這需要對(duì)Kubernetes有著充分的了解,但并非團(tuán)隊(duì)的所有成員都精通Kubernetes。通常情況下,組織最終會(huì)使用腳本和kubectl命令來(lái)提高部署速度。
云原生計(jì)算基金會(huì)(CNCF)最近對(duì)1500名受訪者進(jìn)行的一項(xiàng)調(diào)查表明,在使用和部署容器方面,復(fù)雜性和文化變化仍然是Kubernetes采用的最大挑戰(zhàn),如下圖所示。
2.過(guò)度依賴專家和開發(fā)人員產(chǎn)生倦怠
由于缺乏Kubernetes的專門知識(shí),開發(fā)人員和應(yīng)用程序團(tuán)隊(duì)嚴(yán)重依賴DevOps團(tuán)隊(duì)(也稱為發(fā)布團(tuán)隊(duì)),以持續(xù)幫助他們創(chuàng)建Kubernetes對(duì)象,如部署、復(fù)制集、狀態(tài)集和守護(hù)進(jìn)程。在其后續(xù)工作的過(guò)程中,與不同的團(tuán)隊(duì)協(xié)作以獲得部署的更改將會(huì)花費(fèi)利益相關(guān)者的大量時(shí)間。此外,由于截止日期較短且實(shí)現(xiàn)業(yè)務(wù)目標(biāo)的壓力很大,開發(fā)團(tuán)隊(duì)必須花費(fèi)大量時(shí)間來(lái)部署其更改。
根據(jù)企業(yè)級(jí)云平臺(tái)提供商D2IQ公司發(fā)布的一份調(diào)查報(bào)告,幾乎所有組織(96%)在容器化應(yīng)用程序的初始部署過(guò)程中都面臨挑戰(zhàn)和復(fù)雜性,并指出Kubernetes是他們痛苦的根源。該報(bào)告還指出,“51%的開發(fā)人員和架構(gòu)師表示,構(gòu)建云原生應(yīng)用程序使他們不堪重負(fù)。這對(duì)于負(fù)責(zé)為其組織部署容器化應(yīng)用程序的高級(jí)IT領(lǐng)導(dǎo)者來(lái)說(shuō)壓力特別大。”
3.面臨嚴(yán)峻的安全挑戰(zhàn)
Kubernetes并非旨在執(zhí)行策略,例如查找圖像中的漏洞。因此,如果組織使用Kubernetes進(jìn)行部署,則需要找到其他方法,通常是人工執(zhí)行策略或使用一些腳本。
例如基于默認(rèn)的網(wǎng)絡(luò)策略,Kubernetes Pod可以彼此通信,并可以與外部端點(diǎn)無(wú)縫通信。由于應(yīng)用程序或基礎(chǔ)設(shè)施的安全問題,如果一個(gè)容器或Pod被破壞,則其他容器或Pod都可能受到攻擊(也稱為復(fù)雜的攻擊向量)。
由于組織將軟件交付的速度放在首位,因此有時(shí)降彽了安全性和合規(guī)性的優(yōu)先級(jí)。通常情況下,在采用Kubernetes的過(guò)程中,組織必須嘗試在構(gòu)建、測(cè)試、部署和生產(chǎn)階段集成安全性和合規(guī)性。
4.缺乏部署策略和部署后運(yùn)行狀況檢查
使用基于Kubernetes的應(yīng)用程序的一個(gè)常見目的是根據(jù)需求擴(kuò)展到大型用戶。在這樣的生產(chǎn)環(huán)境中,可以觀察到大量節(jié)點(diǎn)、數(shù)百個(gè)Pod和數(shù)千個(gè)運(yùn)行多個(gè)應(yīng)用程序?qū)嵗娜萜鳌?/p>
而向客戶介紹新變化的一種方法是逐步部署,例如采用藍(lán)/綠部署或金絲雀(Canary)部署等策略。這樣可以避免向最終客戶發(fā)布不穩(wěn)定版本的風(fēng)險(xiǎn)。
但是,Kubernetes中并沒有藍(lán)/綠部署或金絲雀(Canary)部署。最重要的是,由于容器化應(yīng)用程序的分布式特性,獲取和發(fā)送新部署的Kubernetes應(yīng)用程序的健康狀況更新,以及估計(jì)其漏洞和對(duì)組織的風(fēng)險(xiǎn)是非常繁瑣和復(fù)雜的。
使用開源Spinnaker進(jìn)行Kubernetes部署
Spinnaker是一個(gè)開放源代碼和多云持續(xù)交付平臺(tái),可用于快速發(fā)布代碼并保持競(jìng)爭(zhēng)優(yōu)勢(shì)。Spinnaker更加注重使用Kubernetes應(yīng)用程序,并幫助IT團(tuán)隊(duì)迅速將應(yīng)用程序部署到任何Kubernetes(K8S、GKE、EKS、AKS)中。以下是Spinnaker的一些重要功能。
1.用于端到端部署自動(dòng)化的Spinnaker管道
Spinnaker提供用于自動(dòng)部署的端到端管道(如下圖所示)。該工作流程可經(jīng)構(gòu)建一致且重復(fù)的部署,可以制作AMI或Docker映像,從集群中找到k8S容器,然后進(jìn)行部署、修改集群組并在K8S中運(yùn)行容器。
在部署之后,Spinnaker會(huì)實(shí)時(shí)檢查并顯示Kubernetes集群的運(yùn)行狀況。可以將管道中的部署階段配置為通過(guò)電子郵件、移動(dòng)消息或Slack消息在所有級(jí)別通知利益相關(guān)者。
2.內(nèi)置的部署策略
開源Spinnaker提供了各種部署策略,例如藍(lán)/綠部署、滾動(dòng)部署、金絲雀部署,以降低部署到生產(chǎn)環(huán)境中的風(fēng)險(xiǎn)。Spinnaker還與K8S Pod自動(dòng)縮放器進(jìn)行交互,以確保在部署期間保持容量大小。
開源Spinnaker提供的自動(dòng)金絲雀分析(ACA)技術(shù)可通過(guò)將原有版本的指標(biāo)和日志與部署新版本的指標(biāo)和日志進(jìn)行比較,從而最大限度地降低將更新部署到K8S生產(chǎn)服務(wù)器中的風(fēng)險(xiǎn)。
除此之外,Spinnaker還提供configmap和secrets的版本控制以及不可變的服務(wù)器部署。這使回滾可以保留先前使用的確切配置,并執(zhí)行二進(jìn)制文件。
3.新工件的持續(xù)驗(yàn)證
開源Spinnaker周圍提供了許多企業(yè)插件,這些插件擴(kuò)展了免費(fèi)工具的用例。例如,開源Spinnaker的發(fā)行伙伴OpsMx公司提供了企業(yè)級(jí)Spinnaker,可以在日志和指標(biāo)上使用人工智能/機(jī)器學(xué)習(xí)來(lái)檢測(cè)新部署的Kubernetes應(yīng)用程序的問題。如果檢測(cè)到異常,則Spinnaker可以回滾到新的應(yīng)用程序。但是在此之前,它可以確保先前的服務(wù)器組具有足夠的大小。
4.在Kubernetes部署中加強(qiáng)安全性和合規(guī)性
確保Kubernetes使用中的安全性需要在整個(gè)軟件開發(fā)生命周期(從編碼到構(gòu)建再到部署)中進(jìn)入安全性和合規(guī)性的安全門。例如,如果構(gòu)建未通過(guò)冒煙測(cè)試(冒煙測(cè)試這一術(shù)語(yǔ)描述的是在將代碼更改嵌入到產(chǎn)品的源樹中之前對(duì)這些更改進(jìn)行驗(yàn)證的過(guò)程),則可以在構(gòu)建階段使用安全門使部署失敗。同樣,可以安裝安全門以檢查容器圖像是否已通過(guò)圖像掃描報(bào)告。開源Spinnaker允許安全管理人員在交付管道中安裝安全門。
Spinnaker被擴(kuò)展為聲明政策,以遵守組織指南和行業(yè)標(biāo)準(zhǔn),例如PCI-DSS、HIPAA和SOC 2。而發(fā)布管理器可以將部署日期和時(shí)間定義為停機(jī)策略的一部分。這可能會(huì)有一定的高峰流量時(shí)間,應(yīng)該避免部署具有停機(jī)風(fēng)險(xiǎn)的代碼。部署窗口允許管道確保在這些高峰流量時(shí)區(qū)之外進(jìn)行K8S部署,并且不會(huì)影響客戶體驗(yàn)。
5.GitOps樣式部署
在Spinnaker的幫助下,組織可以在Kubernetes集群中執(zhí)行GitOps風(fēng)格的部署。熟悉YAML的團(tuán)隊(duì)可以對(duì)文件進(jìn)行更改,并且Spinnaker可以進(jìn)行配置檢測(cè)這些更改,并自動(dòng)將其部署到選定的環(huán)境中。
結(jié)論
毫無(wú)疑問,通過(guò)采用云原生應(yīng)用程序可以實(shí)現(xiàn)業(yè)務(wù)敏捷性,而Kubernetes扮演著核心角色。選擇整合Kubernetes和Spinnaker的組織將會(huì)比單獨(dú)使用Kubernetes的組織更快地看到積極的結(jié)果。
原文標(biāo)題:Overcome Challenges of Continuous Delivery for Kubernetes With Spinnaker,作者:Debasree Panda,Abhinay Byrisetty
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】