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