BizWorks應⽤平臺基於KubeVela的實踐

簡介: BizWorks與KubeVela的合作始於1.0.5版本,BizWorks在1.0.5版本上完成了關鍵技術驗證並且在1.2.5版本上基礎上擴展了BizWorks的應用部署和運維能力。通過近一年多的深度合作,BizWorks通過KubeVela解決了一些痛點和訴求,同時基於KubeVela功能和特性也沉澱了一些實踐,本文將分別通過介紹BizWorks在KubeVela使用場景來講述如何探索和實踐雲原生時代新一代PaaS平臺持續交付能力的落地。

前⾔

BizWorks與KubeVela的合作始於1.0.5版本,BizWorks在1.0.5版本上完成了關鍵技術驗證並且在1.2.5版 本上基礎上擴展了BizWorks的應⽤部署和運維能⼒。通過近⼀年多的深度合作,BizWorks通過 KubeVela解決了⼀些痛點和訴求,同時基於KubeVela功能和特性也沉澱了⼀些實踐,本⽂將分別通過介 紹BizWorks在KubeVela使⽤場景來講述如何探索和實踐雲原⽣時代新⼀代PaaS平臺持續交付能⼒的落地。

 

⼀、BizWorks介紹

BizWorks(https://bizworks.aliyun.com/)是⼀體化的阿⾥雲原⽣應⽤的開發和運營平臺,內置阿⾥巴巴 業務中臺構建的最佳技術實踐。產品主要包括:業務建模平臺、業務應⽤平臺、演練壓測平臺、能⼒運 營平臺、⼀體化運⾏和運維平臺。BizWorks提供的產品能⼒(圖1-1),普遍適⽤於企業雲原⽣應⽤⾼ 效開發以及企業業務能⼒沉澱和復⽤的場景。

image.png

圖 1-1 BizWorks業務架構

 

BizWorks⼀體化運⾏和運維平臺提供⼀站式的應⽤⽣命週期管理、運⾏託管和運維管控能⼒,⽀持多雲 適配,因此應⽤的⽣命週期管理是不可或缺的,其中CICD作爲應⽤持續演進的關鍵⽅式對客戶產品發佈 以及升級迭代扮演者⾄關重要的⻆⾊。

 

CI(持續集成)主要包括中臺類應⽤、低代碼類輕應⽤、託管類應⽤、集成類應⽤的構建和物料產出, 爲客戶透出個性化流⽔線能⼒,可以依據⽤戶實際需求編排符合業務需求的流⽔線,也可以直接使⽤業 界沉澱的通⽤流⽔線產品。

 

CD(持續交付/持續部署)主要包括上述⼏類應⽤構建制品部署上線以及運維,爲客戶提供核⼼的部署 操作能⼒,⽤戶可以基於內置的部署引擎完成應⽤的部署,同時也可以接⼊其他部署產品,例如EDAS。

 

本⽂將主要講述探索如何使⽤KubeVela在BizWorks⼀體化運⾏和運維平臺應⽤部署中落地。

 

⼆、應⽤交付的需求與落地

2.1 需求背景

BizWorks對於應⽤交付的需求主要包括兩個思考,第⼀個是在雲原⽣技術背景下,應⽤交付應該基於雲 原⽣技術架構進⾏設計,因爲採⽤的應⽤交付技術選型要能夠⽀持相應的技術組件訴求;第⼆個是從業 務需求出發,當前應⽤交付配置⾯臨碎⽚化的境況,包括環境配置、資源規格配置、持久化配置、⽹絡 ⼆、應⽤交付的需求與落地 2.1 需求背景 3 路由配置等,同時對於應⽤交付製品類型也不盡相同。爲了滿⾜上述的需求,BizWorks選擇使⽤ KubeVela來實現應⽤的持續交付,保證客戶環境交付終態的穩定性和可靠性。

 

2.2 應⽤部署架構

⽬前Bizworks⽀持四種類型的業務應⽤,集成了部分開源或阿⾥雲的中間件組件,其部分能⼒主要是通 過使⽤KebeVela的Application、Component、Trait以及WorkFlow來實現(如圖2-1)。在KubeVela Component基礎上BizWorks定義⾃⼰的⽆狀態組件(stateless-component)、有狀態組件(stafulcomponent)、組裝⽹絡(advanced-ingress-trait)等,然後通過KubeVela來屏蔽不同雲⼚商或 Kubernetes底座的複雜性和差異性,構成了當前BizWorks的應⽤部署架構。

image.png

圖 2-1 BizWork應⽤部署業務架構

 

2.2 碎⽚化配置的痛點與解決

對於平臺來說提供的功能如果具有可擴展和靈活性的話,可以爲平臺增強現有能⼒和推出更好體驗的功 能點帶來強⼤的幫助。但是由於平臺⾯對的使⽤者背景和訴求各不相同,爲了能儘可能滿⾜⼤多數場景 需求可能會導致配置化內容變得多⽽且散亂,這是當時⾯臨的碎⽚化配置痛點。BizWorks的解決⽅案是 藉助KubeVela豐富和強⼤的插件和運維特徵補丁功能,⾸先KubeVela的擁有很多常⻅的插件,例如分批 發佈、fluxcd等,並且也內置了很多可⽤性⾼的運維特徵補丁,例如標籤、註解、init-container、 ingress等。如果沒有定製化需求的話,使⽤KubeVela⾃帶的插件和運維特徵補丁基本就可以滿⾜需求;

如果需要針對平臺⾃身能⼒進⾏定製的話也是可以的,這⾥以⾃定義運維特徵補丁爲例,介紹下 BizWorks如何實現⾃定義功能。

 

BizWorks應⽤在發佈時,可以⽀持⽤戶⾃⼰配置⽹絡路由(如圖2-2),因此就需要⽀持同時⽣效多個 ingress和service的配置。我們在KubeVela內置的ingress運維特徵基礎上進⾏了改進,⽀持批量傳⼊聲 明的⽹絡路由配置,然後通過BizWorks以⾃定義運維特徵的⽅式下發到KubeVela(相關cue定義⻅下⽅ 示例代碼),最終⽣效到集羣中。

 

"bizworks-ingress-comp-1-22": {
type: "trait"
annotations: {}
description: "Enable public web traffic for the component, the ingress
API matches K8s v1.20+."
attributes: {
podDisruptive: false
}
}
template: {
outputs: {
// trait template can have multiple outputs in one trait
if parameter.route != _|_ {
for _, v in parameter.route {
"service-\(v.serviceName)": {
apiVersion: "v1"
kind: "Service"
metadata:
name: v.serviceName
spec: {
selector: "app.oam.dev/component": context.name
if v.serviceType != _|_ {
type: v.serviceType
}
ports: [
{
port: v.servicePort
protocol: v.serviceProtocolType
targetPort: v.port
},
]
}
}
if v["ingressName"] != _|_ {
"ingress-\(v.ingressName)": {
apiVersion: "networking.k8s.io/v1"
kind: "Ingress"
metadata: {
name: v.ingressName
annotations: {
if !v.classInSpec {
"kubernetes.io/ingress.class": v.class
}
if v.annotations != _|_ {
for _, t in v.annotations {
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章