《Netflix 的上線工具 Spinnaker》要點:
本文介紹了Netflix 的上線工具 Spinnaker,希望對您有用。如果有疑問,可以聯系我們。
Spinnaker 是 Netflix 開源出來的持續交付工具,目的是為研發團隊提供靈活的持續交付流水線,并且支持部署到測試/生產環境.Netflix 目前通過 Spinnaker 實現每天4000次的發布.它的優勢在于:
目前支持 AWS EC2(Netflix 的機器大部分都在亞馬遜),谷歌云,Kubernetes,Azure,Openstack 等,目前正在支持甲骨文的物理機和 DC/OS.
可以集成測試腳本進行測試,并且能夠管理測試,線上環境的機器,實現動態擴容,和服務的下線.
由于 Netflix 的平臺已經實現微服務化,每個團隊使用 Spinnaker 獨立維護服務的發布,所以 Spinnaker 的設計特別適合于微服務持續交付的場景.
通過腳本實現不可變基礎設施,使得發布時候能夠更容易的進行回滾,和擴容.當你的團隊還在為每個應用寫腳本支持藍綠發布時,Spinnaker 已經提供了從界面上進行藍綠發布,金絲雀發布等策略的配置.
Netflix,谷歌,微軟等等都已經在社區貢獻代碼.
顧名思義,是和底層 IaaS 打交道的模塊,主要負責底層資源的讀寫,它對接了底層的云提供商: AWS,谷歌云,Kubernetes,CloudFoundry 和 Azure 等等.
以 Kubernetes 的對接為例,Clouddriver 通過 Cloud Provider Agent 實現了緩存,部署,實例,負載均衡,安全組和集群的對接,工作量還是很大的.
Spinnaker 的 UI 層,使用 TypeScript + AngularJs 開發,支持擴展.
Spinnaker 的 API 網關層,它為其他服務提供的 API 的接入,使用 Eureka 和 OKClient 實現.
任務編排引擎,目的是為 Spinnaker 提供一個流水線,將構建包從一個 Stage 升級到另一個 Stage,并且和其他服務進行協同工作.
Spinnaker 的 CI 工具,Igor 提供的是統一的 CI 工具接口(Jenkins,Travis 以及 Git 倉庫),并且記錄 Jenkins 的認證信息.在配置 Igor 項目時,需要將 Jenkins 的登錄信息配置在 yml 文件里.
Spinnaker 提供了可視化的 CI 任務編排功能,類似于 Jenkins 的 Pipeline 功能.編排支持多種方式,包括:并行,串行,分支,人工決策點等等.在每個節點執行的操作都可以是一個 Jenkins 的任務,或者是腳本,定時任務.
注:Netflix 的流程里大部分是沒有人工決策點的.
集群管理:
Spinnaker 的集群管理組件能夠管理以下資源:服務器組, 集群,應用,負載均衡,安全組.用這些組件來屏蔽的底層 IaaS 資源的差異.
藍綠部署:
Netflix 進行大量的自動化金絲雀發布(ACA – Automatic-Canary-Analysis),目前并沒有開源這個功能.但是 Google 和 Netflix 正在一起協同開發,計劃把這部分代碼開源出來.
金絲雀發布如何實現自動化?難點在于自動化評估1%節點部署的結果.Spinnaker 在發布1%集群的節點之后,ACA 會進行一系列的監控,包括用戶的行為是否異常,流量的訪問是否存在較大波動,最好會為這次發布計算出一個分數,這個分數就成為繼續發布到10% 集群機器的數據依據,只要分數大于這個值,就能繼續發布到剩余的機器.
即時通信工具集成 – Slack
Chaos Monkey 之前文章有講過,它負責在線上環境里隨機的關掉某幾臺機器,從而進行服務高可用的測試,沒有經歷 Chaos Monkey 測試的服務不是好服務.
使用 Artifactory 進行軟件包管理:
Netflix 是 Artifactory 的重度用戶.Netflix 在部署包/鏡像到生產環境時,不會重新構建,而是從測試環境找到包,復制到生產環境.這就需要包管理平臺的支持,Netflix 使用 Artifactory 作為統一包管理平臺,記錄包的發布元數據,例如包經過了哪些測試,被部署到了哪些測試環境/生產環境.當服務需要擴容或者回滾時,根據AQL(Artifactory Query Language)進行元數據查詢,找到需要擴容或回滾的包.
Spinnaker 作為持續交付平臺,已經被 Netflix 內部上百個團隊使用,并且在生產環境里的進行了驗證,同時社區也非常的活躍.
不過使用 Spinnaker 也有一些門檻,首先你需要有自動化構建,測試的流水線進行軟件升級(Promotion),其次,需要讓 Spinnaker 接管公司的云平臺,用代碼描述環境,并且已經用腳本/CMDB 實現軟件在不同環境的部署,升級,回滾.如果你的公司內部有多個 Cloud Provider,并且希望實現可重復的持續交付流水線,可以考慮使用 Spinnaker 實現統一持續交付.
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/2396.html