天天看點

雲效攜手ACK助力「上海博卡」DevOps轉型之路

博卡軟體于2004年在上海成立,是一家專注于為本地美麗生活相關行業提供軟體服務的SaaS軟體提供商。主要産品是門店營運所需要的,管理軟體,智能硬體以及營銷小程式等。

作為一個不足30人的研發團隊,并且沒有真正專職的運維人員,面對快速增長的客戶以及越來越多的需求,擁有20多個微服務,幾十個前端應用(web,小程式,app等),傳統的開發和部署的方式已經逐漸成為了我們研發團隊的瓶頸,為了能高效的完成傳遞,我們開始了DevOps轉型之路。

因為我們的SaaS應用完全部署在阿裡雲上,通過一個偶然的機會接觸到雲效後,我們開始了使用雲效+阿裡雲ACK替代我們現有的Gitlab+Jenkins+ECS的CI/CD來實作DevOps。

為什麼做持續傳遞?

因為我們服務的客戶都是小商戶為主,通常有需求或者遇到問題都不願意等待一周或者幾天時間,大多數時候都需要我們快速解決,并且因為我們客戶量比較大,使得我們必須快速反應,做到持續傳遞,傳遞周期可能是一天一次,甚至一天幾次。

源碼管理

在對比了經典的Git Flow,Github Flow,以及Gitlab Flow之後,我們最終選擇了更适合我們團隊的Gitlab Flow來作為我們的Git工作流。

雲效攜手ACK助力「上海博卡」DevOps轉型之路

每個代碼庫的master分支通過webhook觸發綁定測試環境的流水線建構,release分支綁定生産環境的流水線建構。同時設定master分支和release分支的保護規則,除了管理者外開發者不能直接push到master分支,需要通過評審後才能合并到master分支并觸發測試環境建構,release分支隻能通過合并請求的方式來push代碼觸發建構。

雲效攜手ACK助力「上海博卡」DevOps轉型之路

雲效的代碼管理Codeup的内置評審功能,能高效的完成Code Review。

雲效攜手ACK助力「上海博卡」DevOps轉型之路

内置的代碼檢測開箱即用,促進編碼規範執行。

雲效攜手ACK助力「上海博卡」DevOps轉型之路

流水線

通過Flow流水線可以很簡單的實作持續傳遞。Flow流水線比起Jenkins來最大的好處就是簡單易用。

支援Ram子賬号權限管理,可以統一賬号體系,不用獨立管理賬号體系。在沒有專門運維人員的情況下,針對不同的開發人員配置不同權限,可以友善安全的讓所有開發人員去看建構失敗原因,控制隻有管理者或者指定人員觸發人工卡點等各種操作,安全使用流水線。

雲效攜手ACK助力「上海博卡」DevOps轉型之路

内置多種語言的流水線模闆,基本上主流的CI/CD模式都可以開箱即用。并且通過通用變量組可以配置不同環境的變量組來差別不同環境的內建和部署。

雲效攜手ACK助力「上海博卡」DevOps轉型之路

測試環境或生産環境通過通用變量組以及鏡像名字首區分

雲效攜手ACK助力「上海博卡」DevOps轉型之路

生産環境可以增加人工卡點提前建構生成鏡像,再選擇合适的時間通過卡點以控制釋出時間,或者實作了零停機部署的話可以直接部署。

雲效攜手ACK助力「上海博卡」DevOps轉型之路
雲效攜手ACK助力「上海博卡」DevOps轉型之路
雲效攜手ACK助力「上海博卡」DevOps轉型之路

單頁面前端項目流水線則簡單不少,隻需要編寫npm腳本,實作webpack打包并生成html産物,然後自動上傳靜态資源到cdn,最後把html産物上傳到oss中,即可完成。

雲效攜手ACK助力「上海博卡」DevOps轉型之路

容器化部署

阿裡雲上最優選擇

部署的最佳選擇,自然是Flow流水線的最佳搭檔ACK。容器服務Kubernetes版(ACK)是簡化了叢集的搭建和擴容等工作,整合了阿裡雲虛拟化、存儲、網絡和安全能力,開箱即用的阿裡雲上最佳Kubernetes 容器化應用運作環境。其最大的優勢就是低門檻,上手簡單,運維簡單。對于我們這種沒有真正專職的運維人員的團隊來說,是一大福音。因為Kubernetes本身較高的學習成本,一開始直接勸退了我們這種小團隊。直到後面看到阿裡雲ACK後,因其免費使用,我們抱着試一試的心态嘗試了一下,短時間就完成了demo的部署。已過一系列的測試和嘗試後,我們決定把我們當時部署在ECS上的整套微服務,在ACK上通過Flow流水線部署一套克隆環境,最後通過Ingress的灰階能力逐漸把流量切換到ACK上,順利完成了ECS上自建的Tengine + Spring Cloud微服務應用的零停機的無縫遷移。上線ACK後,我們切實感受到了Kubernetes的強大。自動化的運維,包括自動故障遷移,自動資源排程,環境隔離,動态存儲,負載均衡,零停機部署,自動擴容,以及故障時自動重新開機等各種強大的功能。通過簡單配置甚至預設配置,即可享受這些功能。使用ACK後,我們的最大收益,主要是以下3點。

節約成本。因為我們使用的微服務架構,有較多的微服務,部署的時候都做高可用,一個服務至少2個執行個體來做負載均衡。在使用ACK之前,主要是自己來根據經驗等預判一個服務需要的cpu資源和記憶體資源,然後通過cgroup限制單個執行個體的cpu使用上限,并且通過jvm的配置來限制最大記憶體使用。按照這種方式來決定一台ECS可以部署多少執行個體。且不說手動配置cgroup有一定的運維知識,自行規劃一般比較難做到非常高的資源使用率,而且如果有的執行個體發生問題甚至可能影響整個ECS上的其他應用。使用ACK的話,可以直接配置每個Pod的cpu和記憶體資源需求,然後交由Kubernetes來自己排程,配合上HPA的動态擴容,可以做到資源的極緻利用,同時也保證了應用的穩定性,使得硬體成本大幅下降的同時也沒有犧牲穩定性。

故障自動重新開機。通過Pod的健康監測和就緒監測,再加上應用暴露一個健康監測接口(比如SpringBoot的Actuator的health)即可簡單實作故障自動重新開機,在應用初期問題較多的時候,或者發生突發問題的時候,自動重新開機大多數都能立馬緩解問題,雖然不能根本解決,但是至少解決了小公司沒有24*7快速響應運維人員的問題,可以做到自動化最高效的緩解問題。

自動擴容。如果某些應用可能出現某個時間點非常高的流量或者應用突然需要很大的計算量,可以直接配置HPA自動擴容,設定規則後Kubernetes會根據條件自動擴容以保證應用的穩定性。

復原

小團隊持續傳遞,頻繁釋出,自然更容易出現問題,是以這就意味着我們需要時刻準備着滾回到上一個版本,或者說之前某一次更可靠的版本。通過Flow流水線可以復原基本上所有部署方式。如果選擇了阿裡雲ACK這種Flow的最佳搭檔,則可以實作快速零停機復原任意版本(通過健康監測以及重新開機政策確定啟動的容器必然是可運作版本,如果出現無法啟動或者啟動異常的版本,則因為就緒監測無法通過是無法接收流量的,是以可以完成零停機或復原),并且因為ACK是基于Docker鏡像的更新,復原的版本不會出現環境變化等各種其他因素造成的意外導緻復原失敗。

雲效攜手ACK助力「上海博卡」DevOps轉型之路

效果

使用雲效+ACK後的明顯帶來了以下提升:

雲效攜手ACK助力「上海博卡」DevOps轉型之路
雲效攜手ACK助力「上海博卡」DevOps轉型之路

結語

SaaS公司要在競争中拔得頭籌,就需要快速影響客戶需求,同時保持較高的穩定性。同時要快速占領市場,就需要不斷推出新産品不斷創新,這個時候開發的傳遞效率以及低成本試錯就尤為重要。經過我們的不斷嘗試,最終找到了一套适合我們公司的高效流程和工具,那就是雲效配合ACK來實作DevOps。

雲效攜手ACK助力「上海博卡」DevOps轉型之路

在DevOps上我們也是摸着石頭過河,上面分享的方法隻是我們團隊當下尋找到的最佳方案,當然其中也有很多不足,我們也在不斷的摸索和改進,這篇文章分享我們的DevOps轉型過程就是希望可以跟大家多交流,共同探讨和摸索适合自己團隊的模式。

作者介紹

韋嵩,2013年加入上海博卡軟體科技有限公司,從事研發管理以及架構設計,現任職研發中心經理。先後主導了公司的架構演進:前後端分離,SaaS化轉型,後端微服務改造,Kubernetes部署及應用,以及使用雲效配合ACK實作DevOps轉型。