本文分享自華為云社區(qū)《華為云論壇_云計(jì)算論壇_開發(fā)者論壇_技術(shù)論壇-華為云》,作者:云容器大未來(lái)。
Kurator 是華為云開源的面向分布式云原生環(huán)境的一站式解決方案。它利用 Karmada 作為多集群編排基礎(chǔ),內(nèi)置集成了Istio、Prometheus、Thanos、Volcano、KubeEdge、Argo 等主流云原生技術(shù)?;诖?,Kurator 構(gòu)建了包括集群艦隊(duì)管理、集群生命周期管理、統(tǒng)一應(yīng)用分發(fā)、流量治理、監(jiān)控和策略管理在內(nèi)的分布式云平臺(tái)管理能力。
在最新 0.6.0 版本中,Kurator 為云原生應(yīng)用增加了 CI/CD 流水線設(shè)置與管理功能,簡(jiǎn)化流水線創(chuàng)建。此外,強(qiáng)化了 0.4.0 版本發(fā)布的統(tǒng)一應(yīng)用分發(fā)功能,可以在部署新應(yīng)用時(shí)設(shè)置金絲雀(灰度)發(fā)布、A/B 測(cè)試、藍(lán)綠發(fā)布三種漸進(jìn)式發(fā)布策略。新增的流水線特性和漸進(jìn)式發(fā)布功能與統(tǒng)一分發(fā)能力結(jié)合,實(shí)現(xiàn)基于代碼倉(cāng)庫(kù)的 gitOps 工作流。這有助于快速構(gòu)建分布式云原生平臺(tái),簡(jiǎn)化應(yīng)用開發(fā)與發(fā)布流程。Kurator CI/CD 的結(jié)構(gòu)圖如下所示:
用戶更新代碼倉(cāng)庫(kù)后,觸發(fā) Kurator 流水線,完成代碼拉取、檢查、編譯并構(gòu)建鏡像。其后,用戶更新應(yīng)用部署模板,例如更改應(yīng)用配置中的鏡像信息。Kurator Application Controller 偵測(cè)到配置更新,將自動(dòng)觸發(fā)已應(yīng)用的漸進(jìn)式發(fā)布策略,實(shí)現(xiàn)應(yīng)用的自動(dòng)發(fā)布。如此一來(lái),整個(gè)軟件研發(fā)生命周期以代碼為中心,實(shí)現(xiàn)開發(fā)至發(fā)布完整流程的自動(dòng)化,簡(jiǎn)化運(yùn)維、部署工作。
流水線
CI/CD 流水線實(shí)現(xiàn)源碼到發(fā)布的自動(dòng)化過(guò)程,包括源碼管理、檢查、測(cè)試等階段。但由于每個(gè)階段技術(shù)需求不同,導(dǎo)致流水線配置和管理難度大。Kurator 參考開源項(xiàng)目 Tekton,通過(guò)預(yù)定義常用任務(wù)模版的方式簡(jiǎn)化流水線創(chuàng)建操作。用戶只需指定任務(wù)名稱和代碼倉(cāng)庫(kù)訪問(wèn)憑證即可創(chuàng)建流水線,使用門檻低。對(duì)熟悉流水線的高級(jí)用戶,Kurator 也支持自定義任務(wù)。用戶可以根據(jù)自己需求定制任務(wù)內(nèi)容,滿足個(gè)性化場(chǎng)景。通過(guò)預(yù)置任務(wù)模板和自定義任務(wù)的能力,Kurator 大幅簡(jiǎn)化了流水線配置和管理的難度。
從圖中可以看出,在使用流水線時(shí),Kurator 完成了大部分工作。用戶只需配置運(yùn)行環(huán)境,選擇任務(wù)模板即可完成流水線創(chuàng)建,大大減少學(xué)習(xí)成本。特別是與傳統(tǒng)Tekton 相比,Kurator 提供了預(yù)定義任務(wù)模板,用戶只關(guān)注任務(wù)內(nèi)容而不再處理具體實(shí)現(xiàn),實(shí)現(xiàn)了流水線使用的極致簡(jiǎn)化。
除了簡(jiǎn)化流水線的創(chuàng)建操作外,Kurator 還考慮到了軟件供應(yīng)鏈安全,可以在流水線構(gòu)建鏡像時(shí)自動(dòng)為其添加數(shù)字簽名和源頭證明,以防范假冒鏡像,保證鏡像源頭可靠,保證在鏡像制作方面的安全性。軟件供應(yīng)鏈安全指的是保護(hù)軟件從開發(fā)到部署的整個(gè)生命周期過(guò)程中的安全性。軟件供應(yīng)鏈安全可以提高軟件安全性能和用戶信任度,預(yù)防惡意代碼滲透。簽名和證明添加后,鏡像將自動(dòng)上傳至倉(cāng)庫(kù)。在鏡像倉(cāng)庫(kù)中可以直接查看鏡像簽名和證明的詳細(xì)情況,如圖所示。
用戶可以用簽名過(guò)程生成的公鑰驗(yàn)證鏡像簽名和源頭。這樣在生產(chǎn)中,生產(chǎn)者僅需公布簽名公鑰,就能讓用戶驗(yàn)證數(shù)字簽名和來(lái)源證明。接下來(lái)將展示一個(gè)在 Kurator 中創(chuàng)建一個(gè)流水線的示例:
在流水線定義 spec.tasks 中指定任務(wù)名稱,即可選擇 Kurator 內(nèi)置的常用任務(wù)模板。目前內(nèi)置的常用任務(wù)模板包括:
名稱 | 任務(wù)目標(biāo) |
git-clone | 拉取源碼 |
go-test | 運(yùn)行g(shù)o代碼單元測(cè)試 |
go-lint | go源碼靜態(tài)檢查 |
build-and-push-image | 編譯,構(gòu)建鏡像并上傳 |
此外,通過(guò) customTask 定義可以發(fā)布自定義任務(wù)。通過(guò)指定 image、command 和 args,實(shí)現(xiàn)定制任務(wù)需求,如上述示例中自定義任務(wù)完成的工作就是打印README.md。
更多的示例和細(xì)節(jié),請(qǐng)參考: https://kurator.dev/docs/pipeline/
漸進(jìn)式發(fā)布
金絲雀發(fā)布、A/B 測(cè)試和藍(lán)綠發(fā)布都是主流的應(yīng)用發(fā)布策略,可有效減少上線風(fēng)險(xiǎn)。Kurator 0.6.0 在原統(tǒng)一應(yīng)用分發(fā)基礎(chǔ)上,增加漸進(jìn)式發(fā)布功能?,F(xiàn)在應(yīng)用可以指定三種漸進(jìn)式發(fā)布策略中的一種策略。同時(shí),可以將具備發(fā)布能力的統(tǒng)一分發(fā),與 CI/CD 流水線結(jié)合起來(lái),實(shí)現(xiàn)基于代碼倉(cāng)庫(kù)的 GitOps 工作流。
金絲雀發(fā)布
金絲雀部署是一種漸進(jìn)式發(fā)布策略。先向少數(shù)用戶發(fā)布新的軟件版本進(jìn)行測(cè)試,根據(jù)測(cè)試結(jié)果,決定是否向更多用戶推出新版本。旨在最大限度地減少新版本上線后對(duì)用戶的影響,是一種更安全、更可靠的軟件發(fā)布策略。參閱以下的操作示例,了解如何使用 Kurator 配置金絲雀發(fā)布。
通過(guò)配置 rollout 中的 workload 字段,可以將金絲雀發(fā)布的目標(biāo)設(shè)置為 webapp 命名空間下名為 backend 的應(yīng)用。
發(fā)布目標(biāo)除了支持 deployment 應(yīng)用之外,還支持 daemonSet應(yīng)用。流量分析使用 Kurator 內(nèi)置的請(qǐng)求成功率(request-sueccess-rate)和平均訪問(wèn)時(shí)延(request-duration)兩個(gè)指標(biāo)作為衡量新版本是否健康的標(biāo)準(zhǔn)。其中通過(guò) thresholdRange 指定閾值。示例中要求請(qǐng)求成功率達(dá)99%,平均訪問(wèn)時(shí)延小于 500ms,新版本的服務(wù)才會(huì)被認(rèn)定為健康。rolloutPolicy.canaryStrategy 配置了每次測(cè)試成功后,下次流量遞增的比例和最終允許測(cè)試版本流量占比的最大值,從而實(shí)現(xiàn)漸進(jìn)式發(fā)布新版本。
示例中每次遞增 10% 的流量流向新版本,最多為 50%。也可以設(shè)置 maxWeight 為 55,這樣在最后一次測(cè)試的時(shí)候,只會(huì)新增 5% 的流量流向新版本。除了這些配置之外,Kurator 還可以設(shè)定完成驗(yàn)證之后,流量以什么樣的比例逐步流向新版本。
更多細(xì)節(jié)請(qǐng)參考: https://kurator.dev/docs/fleet-manager/rollout/canary/
A/B測(cè)試
A/B 測(cè)試為效果測(cè)試,是驗(yàn)證應(yīng)用兩版本表現(xiàn)的測(cè)試方法。它通過(guò)將用戶分到不同組,每個(gè)組體驗(yàn)不同版本,然后分析每個(gè)組用戶在使用過(guò)程中的各項(xiàng)指標(biāo),選擇效果較好的版本。A/B 測(cè)試也可以先讓部分用戶試用新版本,收集真實(shí)環(huán)境下的用戶反饋,再?zèng)Q定是否上線新版本。了解如何在 Kurator 配置應(yīng)用的 A/B 測(cè)試,請(qǐng)參考下方操作示例。
和金絲雀發(fā)布類似,由 workload 指定 A/B 測(cè)試的目標(biāo)。通過(guò) metric 指定測(cè)試的指標(biāo)。A/B 測(cè)試和金絲雀發(fā)布不同的點(diǎn)在于需要配置 match 中的匹配規(guī)則,實(shí)現(xiàn)流量分組。上述 match 配置是只有 http 請(qǐng)求頭滿足使用 FireFox 瀏覽器或請(qǐng)求的 cookie 中包含 “type=insider” 的情況下,請(qǐng)求才會(huì)被轉(zhuǎn)發(fā)到新版本。通過(guò)對(duì)不同請(qǐng)求頭的處理達(dá)到對(duì)用戶分組的效果,對(duì)不同的版本進(jìn)行效果測(cè)試。除了匹配請(qǐng)求頭之外,還能匹配 URI、端口號(hào)等。
更多細(xì)節(jié)請(qǐng)參考: https://kurator.dev/docs/fleet-manager/rollout/abtest/
藍(lán)綠發(fā)布
藍(lán)綠發(fā)布是一種漸進(jìn)零停機(jī)發(fā)布方法。它將生產(chǎn)環(huán)境分為兩個(gè)獨(dú)立運(yùn)行的藍(lán)綠環(huán)境,藍(lán)環(huán)境承載當(dāng)前實(shí)際流量,綠環(huán)境預(yù)部署新版本。新版本通過(guò)測(cè)試后,只需切換流量到綠環(huán)境,就能實(shí)現(xiàn)零停機(jī)升級(jí)。藍(lán)環(huán)境備用支持回滾。通過(guò)實(shí)時(shí)擴(kuò)容,可近乎零停機(jī)完成迭代交付,提高發(fā)布效率和用戶體驗(yàn)。了解如何在 Kurator 配置藍(lán)綠發(fā)布的操作示例,請(qǐng)參考下方。
藍(lán)綠發(fā)布需要配置目標(biāo)應(yīng)用、測(cè)試指標(biāo)、迭代次數(shù)和容許測(cè)試失敗的次數(shù),其中測(cè)試的迭代次數(shù)由 analysisTimes 指定,容許測(cè)試失敗的次數(shù)由 checkFailedTimes指定,除此之外無(wú)需配置別的規(guī)則。因?yàn)樗{(lán)綠發(fā)布在測(cè)試新版本的時(shí)候是將全局流量轉(zhuǎn)發(fā)到綠環(huán)境中進(jìn)行測(cè)試,沒有金絲雀發(fā)布的漸進(jìn)式流量遞增和 A/B 測(cè)試的對(duì)用戶分組的需求。
更多細(xì)節(jié)請(qǐng)參: https://kurator.dev/docs/fleet-manager/rollout/blue-green/
未來(lái)展望
綜上所述,通過(guò) CI/CD 流水線和漸進(jìn)式發(fā)布功能,Kurator 實(shí)現(xiàn)了從源碼到發(fā)布的完整流水線自動(dòng)化,真正提升了開發(fā)效率和運(yùn)維能力,實(shí)現(xiàn)開發(fā)、配置和發(fā)布的應(yīng)用全流程生命周期管理。此外還大幅簡(jiǎn)化了采用 CI/CD 流水線和漸進(jìn)式發(fā)布的門檻。隨著 Kurator 的不斷迭代升級(jí),我們還將繼續(xù)為流水線添加更多的預(yù)定義任務(wù)模板,為漸進(jìn)式發(fā)布提供更多的測(cè)試指標(biāo)。歡迎大家試用 Kurator 并提出寶貴的意見與需求。Kurator的門戶為:https://github.com/kurator-dev/kurator
隨著功能的逐漸完善,Kurator 將成為用戶快速立體掌握云原生技術(shù)體系、高效運(yùn)行分布式應(yīng)用的強(qiáng)大工具。
參考鏈接
Kurator項(xiàng)目地址:https://github.com/kurator-dev/kurator
CI/CD流水線:https://kurator.dev/docs/pipeline/
軟件供應(yīng)鏈安全:https://kurator.dev/docs/pipeline/chain-security/
漸進(jìn)式發(fā)布:https://kurator.dev/docs/fleet-manager/rollout/
金絲雀發(fā)布:https://kurator.dev/docs/fleet-manager/rollout/canary/
A/B測(cè)試:https://kurator.dev/docs/fleet-manager/rollout/abtest/
藍(lán)綠發(fā)布:https://kurator.dev/docs/fleet-manager/rollout/blue-green/
關(guān)注#華為云開發(fā)者聯(lián)盟# 點(diǎn)擊下方,第一時(shí)間了解華為云新鮮技術(shù)~
華為云博客_大數(shù)據(jù)博客_AI博客_云計(jì)算博客_開發(fā)者中心-華為云
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。