杭州2016年11月15日電 /美通社/ -- 11月8-9日,全球 Kubernetes 大會(huì) KubeCon 在美國(guó)西雅圖舉辦。KubeCon 是由 Linux Foundation/Cloud Native Computing Foundation 發(fā)起的 Kubernetes 較高盛會(huì)。
才云 CEO 張?chǎng)问艿焦俜窖?qǐng)?jiān)?KubeCon2016 大會(huì)上發(fā)表了關(guān)于 Kubernetes 在中國(guó)企業(yè)落地的主題演講并宣布開(kāi)源Caicloud CI/CD 平臺(tái) Cyclone,專注解決微服務(wù)架構(gòu)下面向容器的 CI/CD 和版本管理問(wèn)題。
開(kāi)源后,Cyclone 入選 GitHub "Trending in Open Source",曾一度位居 Go 語(yǔ)言開(kāi)源項(xiàng)目排行榜榜首。
持續(xù)集成 (CI) 是一種軟件開(kāi)發(fā)實(shí)踐,即團(tuán)隊(duì)成員經(jīng)常集成他們的工作,每次集成都需要通過(guò)自動(dòng)化的構(gòu)建,包括編譯、發(fā)布、自動(dòng)化測(cè)試來(lái)驗(yàn)證,從而盡早的發(fā)現(xiàn)集成錯(cuò)誤。持續(xù)交付 (CD) 是指頻繁地將軟件新版本交付給質(zhì)量團(tuán)隊(duì)(或者用戶)以供評(píng)審。如果評(píng)審?fù)ㄟ^(guò),那么就發(fā)布到生產(chǎn)環(huán)境。每當(dāng)代碼庫(kù)里有一個(gè)變化,如果能自動(dòng)且隨時(shí)觸發(fā)以上過(guò)程,那就達(dá)成了持續(xù)發(fā)布 (CD) 。
Docker 是一款基于 LXC 的容器引擎,自 2013 年開(kāi)源以來(lái),因?yàn)槠湟子眯?、高可移植性在開(kāi)源社區(qū)非常火熱。Docker 將軟件與其依賴環(huán)境打包起來(lái),以鏡像方式交付,讓軟件運(yùn)行在“標(biāo)準(zhǔn)環(huán)境”中,這非常符合云計(jì)算的要求。各大 IT 巨頭紛紛跟進(jìn),基于 Docker 容器技術(shù)創(chuàng)業(yè)公司也如雨后春筍,Docker 創(chuàng)造了一個(gè)嶄新的容器云行業(yè)。Docker 技術(shù)應(yīng)用廣泛。如,利用其隔離特性,為開(kāi)發(fā)、測(cè)試提供一個(gè)輕量級(jí)獨(dú)立沙盒環(huán)境進(jìn)行集成測(cè)試。加速本地開(kāi)發(fā)和構(gòu)建流程,使其更加高效輕量化,開(kāi)發(fā)人員可以構(gòu)建、運(yùn)行并分享容器,輕松提交到測(cè)試環(huán)境中,并最終進(jìn)入生產(chǎn)環(huán)境。
Caicloud 作為國(guó)內(nèi)領(lǐng)先的容器集群服務(wù)解決方案供應(yīng)商,向用戶提供企業(yè)級(jí)的 Claas、Containerizor、Cyclone、Cargo、Cubernetes、Clever 六大閉環(huán)服務(wù)。
Cyclone 作為其中重要一環(huán),是基于 Docker 容器沙盒隔離特性實(shí)現(xiàn)的持續(xù)集成,將軟件與其依賴環(huán)境打包起來(lái),以鏡像方式交付,讓軟件運(yùn)行在“標(biāo)準(zhǔn)環(huán)境”中,原生支持多種容器云平臺(tái)持續(xù)交付的工具。具有以下特性:
所有編譯、構(gòu)建、測(cè)試、發(fā)布過(guò)程均以容器為載體,消除環(huán)境差異性。通過(guò)版本控制工具觸發(fā)流水線持續(xù)集成;
生成容器鏡像并輸出安全報(bào)告,確保構(gòu)建的鏡像安全可靠。全過(guò)程可視化,契合團(tuán)隊(duì)協(xié)作,提高研發(fā)效率;
管理組件支持微服務(wù)多組件聯(lián)合發(fā)布,使用圖形化界面展示組件的依賴關(guān)系及聯(lián)合發(fā)布的過(guò)程和狀態(tài),應(yīng)用拓?fù)潢P(guān)系圖形化;
基于發(fā)布策略和角色控制功能,提供靈活的持續(xù)部署方式。基于容器和鏡像的版本控制,提供多種升級(jí)回滾策略。
Cyclone 提供了豐富的 API 供 web 應(yīng)用調(diào)用,通過(guò) API 建立版本控制系統(tǒng)中代碼庫(kù)與 Cyclone 服務(wù)關(guān)聯(lián)關(guān)系后,版本控制系統(tǒng)的提交、發(fā)布等動(dòng)作會(huì)通過(guò) webhook 通知到 Cyclone-Server,啟動(dòng)一個(gè)基于 Docker in Docker 技術(shù)的 Cyclone-Worker 容器,在該容器中從代碼庫(kù)中拉取源碼,按照源碼中 caicloud.yml 配置文件,依次執(zhí)行:
PreBuild:在指定編譯環(huán)境中編譯可執(zhí)行文件;
Build:將可執(zhí)行文件拷到運(yùn)行環(huán)境容器中,打成鏡像發(fā)布到鏡像倉(cāng)庫(kù)中;
Integretion:使用 Build 階段構(gòu)建的鏡像啟動(dòng)一個(gè)容器,啟動(dòng)持續(xù)集成所依賴的微服務(wù)容器進(jìn)行集成測(cè)試;
PostBuild:?jiǎn)?dòng)一個(gè)容器執(zhí)行一些腳本命令,實(shí)現(xiàn)鏡像發(fā)布后的一些關(guān)聯(lián)操作;
Deploy:使用發(fā)布的鏡像部署應(yīng)用到 Kubernetes 等容器集群 PaaS 平臺(tái)。
構(gòu)建過(guò)程日志可以通過(guò) Websocket 從 Cyclone-Server 拉取;構(gòu)建結(jié)束后 Cyclone-Server 將構(gòu)建結(jié)果和完整構(gòu)建日志通過(guò)郵件通知用戶。
Cyclone-Server 中 Api-Server 組件提供 Restful API 服務(wù),被調(diào)用后需要較長(zhǎng)時(shí)間處理的任務(wù)生成一個(gè)待處理事件寫(xiě)入 etcd;
EventManager 加載 etcd 中未完成事件,監(jiān)視事件變化,發(fā)送新增待處理事件到 WorkerManager 中;
WorkerManager 調(diào)用 Docker API 啟一個(gè) Cyclone-Worker 容器,通過(guò)環(huán)境變量傳入需要處理的事件 ID 等信息;
Cyclone-Worker 使用事件 ID 作為 token(有效期 2 小時(shí))調(diào)用 API,拉取事件信息依次啟容器執(zhí)行 integration、prebuild、build、post build,完成后反饋事件執(zhí)行結(jié)果,構(gòu)建過(guò)程日志推送到 Log-Server,轉(zhuǎn)存到 Kafka;
Log-Server 組件從 Kafka 拉取日志推送給用戶;需要持久化的數(shù)據(jù)存入 Mongo。
Cyclone 也可以多節(jié)點(diǎn)分布式部署,部署圖如下所示。每一個(gè)立方體代表一個(gè)節(jié)點(diǎn),使用 Haproxy 反向代理實(shí)現(xiàn)負(fù)載均衡和 SSL 數(shù)據(jù)加密,分發(fā) API 請(qǐng)求到各 Cyclone 節(jié)點(diǎn)中。
Cyclone 由 Caicloud 工程師自主研發(fā),并貢獻(xiàn)給社區(qū)(地址:https://github.com/caicloud/cyclone)。Cyclone 現(xiàn)已實(shí)現(xiàn)基本功能發(fā)布早期版本 V0.1。我們計(jì)劃在 2016 年12月底發(fā)布 V0.2 Kubernetes 版 Cyclone;2017 年第一季度發(fā)布 V0.3 提供 web 操作界面,后續(xù)還會(huì)開(kāi)發(fā)用戶權(quán)限管理,用戶插件支持等功能。