?如何搭建云原生大數(shù)據(jù)平臺的K8s底座
伴隨著數(shù)字化轉(zhuǎn)型腳步的加快,大數(shù)據(jù)已成為企業(yè)經(jīng)營管理的主要手段之一,越來越多的行業(yè)也選擇通過大數(shù)據(jù)來實現(xiàn)業(yè)績增長。今年年初,CNCF中國區(qū)總監(jiān)陳澤輝在2022云原生超級英雄會上表示,Kubernetes (K8s)已無處不在,越來越多的人在使用云原生和Kubernetes。數(shù)據(jù)時代,企業(yè)如何讓云原生大數(shù)據(jù)平臺借力K8s以發(fā)揮最大價值,今天我們就跟著智領(lǐng)云科技云平臺研發(fā)經(jīng)理Jason一起來深入了解一下。
背景介紹
什么叫云原生架構(gòu)
并不是運行在云主機上的程序或者容器化的程序就是云原生程序。
過去十年,隨著云計算的發(fā)展,云原生技術(shù)架構(gòu)逐步被更多的科技企業(yè)采納和應(yīng)用,其概念可歸納為以下幾點:
- Containerization:可運行代碼必須容器化發(fā)布
- Dynamic management:動態(tài)配置服務(wù),按使用量付費
- Micro-service:使用類似于K8s的云操作系統(tǒng)面向資源池發(fā)布和運維微服務(wù),而不是自己面向節(jié)點操作
- Orchestration: 使用底層云平臺操作系統(tǒng)的分布式管理體系,而不是自己獨立管理
- Automation: 大部分運維操作由代碼完成,而不是手工操作
云原生架構(gòu)的優(yōu)勢
使用云原生架構(gòu)帶來的好處很多,其優(yōu)勢歸納起來大概可以有以下幾點:多租戶、按需擴容、高效迭代、降低成本,以及安全性和合規(guī)性。
智領(lǐng)云聯(lián)合創(chuàng)始人 & CEO彭鋒博士曾以Twitter公司為例,強調(diào)云原生架構(gòu)的優(yōu)勢。
“Twitter從2011年開始建設(shè)自己內(nèi)部的私有云平臺,我們看到的是業(yè)務(wù)開發(fā)效率數(shù)量級的增長,同時避免了部門墻,避免了數(shù)據(jù)孤島和應(yīng)用孤島(因為都必須遵守云平臺和其上的大數(shù)據(jù)平臺的發(fā)布規(guī)范)。從80臺機器的Hadoop集群,到8000臺機器的全局?jǐn)?shù)據(jù)平臺,在統(tǒng)一集群中不斷擴展數(shù)據(jù)能力矩陣,支撐業(yè)務(wù)運營。很多數(shù)據(jù)能力建設(shè)的工作,也因為應(yīng)用的云原生化成為可能?!?/p>
對比企業(yè)在使用傳統(tǒng)大數(shù)據(jù)平臺時遇到的困難和難點,云原生架構(gòu)的優(yōu)勢便能夠更好地凸顯出來。那么,云原生架構(gòu)又是如何解決這些難點,成為如今大數(shù)據(jù)平臺搭建的市場趨勢呢?
傳統(tǒng)大數(shù)據(jù)平臺的難點,主要體現(xiàn)在其組件安裝運維復(fù)雜:
- 每個大數(shù)據(jù)組件都有自己的安裝流程,系統(tǒng)要求,第三方庫支持要求
- 獨立的分布式管理,高可用,容錯,日志,授權(quán),鑒權(quán)機制
- 難以實現(xiàn)對于多租戶,資源隔離,審計,計費的支持
- 工具體系復(fù)雜,無法支持CI/CD,系統(tǒng)測試,質(zhì)量控制
- 無法實現(xiàn)大數(shù)據(jù)組件及應(yīng)用的混合調(diào)度,資源使用率低
因此,數(shù)據(jù)應(yīng)用的開發(fā)流程及管理散布在各個系統(tǒng)組件中,缺乏統(tǒng)一全局的管理,開發(fā)運營效率低。
傳統(tǒng)大數(shù)據(jù)平臺存在的問題,已經(jīng)逐漸無法支撐數(shù)據(jù)驅(qū)動業(yè)務(wù)運營更為豐富的需求,所以呈現(xiàn)出來的市場趨勢就是大數(shù)據(jù)平臺的云原生化。具體來看:
- K8s基本已成為云平臺的標(biāo)配,我們只需要適配K8s即可
- 新的大數(shù)據(jù)組件更多的以云原生的方式發(fā)布
- Hadoop會被云原生存儲+資源調(diào)度取代,現(xiàn)有Hadoop集群的工作負(fù)載需要遷移
- 原始的大數(shù)據(jù)平臺已經(jīng)建設(shè)完畢,DataOps的需求出現(xiàn)
- 云原生應(yīng)用的普及,數(shù)據(jù)源逐漸標(biāo)準(zhǔn)化,在線集成處理成為可能
- 數(shù)字化轉(zhuǎn)型需要低門檻,低代碼的自助型平臺
規(guī)劃設(shè)計
接下來,我們要討論的是怎樣規(guī)劃設(shè)計這樣的云平臺系統(tǒng),這部分可以從基礎(chǔ)設(shè)施層(IaaS)、平臺服務(wù)層(PaaS),以及應(yīng)用交付層來看,而每個層面都需要結(jié)合當(dāng)前的業(yè)務(wù)規(guī)模和需求來權(quán)衡一些問題,比如:
- IaaS:基礎(chǔ)設(shè)施管理成本的權(quán)衡
- PaaS:K8s的版本管理、監(jiān)控告警日志集成
- 應(yīng)用交付:如何隔離容器編排層的復(fù)雜概念,專注于應(yīng)用開發(fā)
我們的目標(biāo)是要去交付一個K8s云平臺,需求可以先拆分為以下三大方面:
- 首先 IaaS 層的建設(shè),我們要決定是托管在公有云,還是自建私有云,或者是最復(fù)雜的混合云架構(gòu);
- 其次 PaaS 層的建設(shè),我們要決定是用原生的K8s,還是發(fā)型版的K8s(各公有云廠商的K8s服務(wù),或者像Kubesphere、Rancher、OpenShift這些面向私有發(fā)布的發(fā)行版等);
- 最后是應(yīng)用交付的體系,我們的目的不是為了搭建K8s而搭建,交付了K8s平臺之后,更重要的是如何快速、靈活地將業(yè)務(wù)系統(tǒng)“搬”到K8s平臺上來,并在未來能夠充分利用好K8s容器編排的各種特性,例如容器運行時/網(wǎng)絡(luò)/存儲接口、故障自動遷移、彈性伸縮、租戶控制等。
針對以上三個方面的設(shè)計規(guī)劃,其現(xiàn)狀及問題包括:
(1) IaaS層:最主要的是管理成本的權(quán)衡:公有云搭建最快,具備公有云產(chǎn)品使用的能力即可,管理成本相對較低,但產(chǎn)品價格很貴;私有云需要有虛擬化平臺建設(shè)及運維的能力,管理成本相對較高;混合云前兩者的能力都需要,還需要具備網(wǎng)絡(luò)基礎(chǔ)設(shè)施建設(shè)的能力,管理成本最高。
(2) PaaS層:官方開源版本無任何定制,但要構(gòu)建一套完整的生態(tài)系統(tǒng),需要自行搭建例如倉庫、監(jiān)控、報警、日志、負(fù)載均衡等額外的系統(tǒng),技術(shù)選型可控但對團隊能力要求高;發(fā)行版一般提供一套比較完備的生態(tài)系統(tǒng),但技術(shù)選型往往不可控,容易被綁定,另外難以滿足自定義需求的時候,還是需要自行建設(shè);除此之外,K8s的版本發(fā)布非???,如果想用新的特性或者修復(fù)bug,需要跟上新版本,但底層平臺升級往往是非常吃力且容易出事故的。
(3) 應(yīng)用交付:K8s的優(yōu)勢是容器化編排能力很強,一開始看上去像海面上一座優(yōu)美的小島;劣勢是它的系統(tǒng)架構(gòu)、概念原理、管理使用非常復(fù)雜,等深入了解了之后才發(fā)現(xiàn)小島原來只是露出海面的冰山一角;對于應(yīng)用開發(fā)者來說,平臺工程師應(yīng)該把容器編排層的能力抽象隔離并封裝簡化,讓上層用戶專注于應(yīng)用開發(fā),不需要承受整個冰山的重量。
實現(xiàn)路徑
結(jié)合規(guī)劃設(shè)計各層面的具體實踐,接下來要講一講我們自己的實現(xiàn)路徑。首先,在基礎(chǔ)設(shè)施層和平臺服務(wù)層,面向公有云場景,我們的實踐是基于阿里云容器服務(wù)ACK去構(gòu)建在公有云場景的K8s平臺。
ACK 整合了阿里云虛擬化、存儲、網(wǎng)絡(luò)和安全能力,提供高性能可伸縮的容器應(yīng)用管理能力,支持企業(yè)級容器化應(yīng)用的全生命周期管理。
ACK當(dāng)前支持的版本為:1.22.3 和 1.20.11,僅發(fā)布Kubernetes雙數(shù)號的大版本,版本支持策略如下:
- 集群創(chuàng)建:ACK支持Kubernetes兩個大版本的創(chuàng)建,例如v1.16、v1.18。當(dāng)新版本Kubernetes發(fā)布時,較老的一個版本將不再開放創(chuàng)建功能。
- 升級和運維保障:ACK保障最近的三個Kubernetes大版本的穩(wěn)定運行,同時支持最新版本往前兩個大版本的升級功能,例如當(dāng)前最新版本為v1.20,則ACK支持v1.18、v1.16的升級功能。
- 工單答疑:ACK僅提供最近的三個Kubernetes大版本的技術(shù)支持。
那么,在私有云場景中,我們的建設(shè)實踐是采用了VMware的一套技術(shù)架構(gòu),物理機采用DELL的PowerEdge系列。并在物理機上部署VMware ESXi,通過VMware vCenter Server將多臺物理機資源組成資源池,組成虛擬化管理平臺。
除此之外,在私有發(fā)布場景中,還需要去部署K8s的整個系統(tǒng),我們選用了青云的KubeKey。
這款開源K8s安裝器項目,可以輕松、高效、靈活地單獨或整體安裝 Kubernetes 和 KubeSphere。
支持的Linux 發(fā)行版本:
- Ubuntu 16.04, 18.04, 20.04
- Debian Buster, Stretch
- CentOS/RHEL 7
- SUSE Linux Enterprise Server 15
支持的Kubernetes 版本:
- v1.17: v1.17.9
- v1.18: v1.18.6
- v1.19: v1.19.8
- v1.20: v1.20.6
- v1.21: v1.21.5 (default)
- v1.22: v1.22.1
使用起來也比較簡單,具體操作如下:
- 創(chuàng)建集群:
./kk create cluster -f config.yaml
- 添加節(jié)點:
./kk add nodes -f config.yaml
- 刪除節(jié)點:
./kk delete node <nodeName> -f config.yaml
- 刪除集群:
./kk create cluster -f config.yaml
在應(yīng)用交付層,我們的實踐是基于KubeVela這一引擎來做平臺建設(shè)。
KubeVela 作為一個開箱即用的現(xiàn)代化應(yīng)用交付與管理平臺,使得應(yīng)用在面向混合云環(huán)境中的交付更簡單、快捷。使用 KubeVela 的軟件開發(fā)團隊,可以按需使用云原生能力構(gòu)建應(yīng)用。隨著團隊規(guī)模的發(fā)展、業(yè)務(wù)場景的變化擴展其功能,一次構(gòu)建,隨處運行。
KubeVela 圍繞著云原生應(yīng)用交付和管理場景展開,背后的應(yīng)用交付模型是 Open Application Model,簡稱 OAM ,其核心是將應(yīng)用部署所需的所有組件和各項運維動作,描述為一個統(tǒng)一的、與基礎(chǔ)設(shè)施無關(guān)的“部署計劃”,進而實現(xiàn)在混合環(huán)境中標(biāo)準(zhǔn)化和高效率的應(yīng)用交付。
為什么要用 KubeVela?
云原生技術(shù)的發(fā)展趨勢正在朝著利用 Kubernetes 作為公共抽象層來實現(xiàn)高度一致的、跨云、跨環(huán)境的的應(yīng)用交付而不斷邁進。然而,盡管 Kubernetes 在統(tǒng)一底層基礎(chǔ)架構(gòu)細(xì)節(jié)方面表現(xiàn)出色,它并沒有在混合的分布式部署環(huán)境之上提供應(yīng)用層的軟件交付模型和抽象。我們已經(jīng)看到,這種缺乏統(tǒng)一上層抽象的軟件交付過程,不僅降低了生產(chǎn)力、影響了用戶體驗,甚至還會導(dǎo)致生產(chǎn)中出現(xiàn)錯誤和故障。
然而,為現(xiàn)代微服務(wù)應(yīng)用的交付過程建模是一個高度碎片化且充滿挑戰(zhàn)的事情。到目前為止,絕大多數(shù)試圖解決上述問題的技術(shù)方案,要么過于簡單以致于無法覆蓋實際生產(chǎn)使用中的問題,要么過于復(fù)雜難以落地使用。云原生帶來的基礎(chǔ)設(shè)施能力爆發(fā)式增長也決定了新一代的應(yīng)用管理平臺不能以硬編碼的方式做能力的集成和 UI 的構(gòu)建,除了滿足基礎(chǔ)的功能和場景,平臺本身的擴展能力成為了新時代應(yīng)用管理平臺的核心訴求。這就意味著平臺不僅要簡單易用,還要能夠隨著應(yīng)用交付和管理的需求復(fù)雜度提升能夠不斷擴張,能夠讓開發(fā)者自助式的接入和使用,充分享受云原生生態(tài)的紅利。
這也是 KubeVela 出現(xiàn)的核心價值:它既能夠簡化面向混合環(huán)境(多集群/多云/混合云/分布式云)的應(yīng)用交付過程;同時又足夠靈活可以隨時滿足業(yè)務(wù)不斷高速變化所帶來的迭代壓力。它本身是一個面向混合交付環(huán)境同時又高可擴展的應(yīng)用交付引擎,滿足平臺構(gòu)建者的擴展和自建需求;同時又附加了一系列開箱即用的擴展組件,能夠讓開發(fā)者自助式的開發(fā)、交付云原生應(yīng)用。
KubeVela 核心功能
統(tǒng)一的應(yīng)用交付模型:KubeVela 創(chuàng)新性的提出了開放應(yīng)用模型(OAM)來作為應(yīng)用交付的頂層抽象,該模型支持交付任意類型的工作負(fù)載包括容器、數(shù)據(jù)庫甚至是虛擬機到不同的云和 Kubernetes 集群中。用戶無需關(guān)心任何基礎(chǔ)設(shè)施細(xì)節(jié),只需要專注于定義和部署應(yīng)用即可。應(yīng)用只需要一次編排,就可以隨處運行,免去了適配不同平臺的痛苦。
- 聲明式交付工作流:KubeVela 的整個交付模型完全是由用戶聲明式驅(qū)動的,兼顧用戶體驗和健壯性,其控制循環(huán)能夠有效避免配置漂移,且具備多租權(quán)限控制能力。用戶可以通過 CUE 語言(一種源自 Google Borg 系統(tǒng)的數(shù)據(jù)配置語言)自由的根據(jù)需求場景來設(shè)計和選用交付工作流中的每一個步驟,滿足業(yè)務(wù)快速增長的需求,同時持續(xù)保證生產(chǎn)環(huán)境面向終態(tài)的穩(wěn)定性。
- 多集群/混合云應(yīng)用交付控制平面:KubeVela 原生支持豐富的多集群/混合環(huán)境持續(xù)交付策略,也支持跨環(huán)境交付。這些交付策略為你的分布式交付流程提供了充足的效率和安全的保證。KubeVela 提供的中心化管控能力也減輕了到每一個集群去排查問題的負(fù)擔(dān),針對不同的平臺提供統(tǒng)一的體驗,為了享受自動化交付的便利,你再也不需要成為 Kubernetes 專家。
KubeVela vs. 傳統(tǒng) PaaS 平臺
傳統(tǒng) PaaS (如 Heroku,Cloud Foundry 等) 提供完整的應(yīng)用程序部署和管理功能,旨在提高開發(fā)人員的體驗和效率。在這個場景下,KubeVela 也有著相同的目標(biāo)。
不過,KubeVela 和它們最大的區(qū)別在于其可擴展性。
KubeVela 是可編程的。它的交付工作流乃至整個應(yīng)用交付與管理能力集都是由獨立的可插拔模塊構(gòu)成的,這些模塊可以隨時通過編寫 CUE 模板的方式進行增/刪/重定義且變更會即時生效。與這種機制相比,傳統(tǒng)的 PaaS 系統(tǒng)的限制非常多:它們需要對應(yīng)用類型和提供的能力進行各種約束來實現(xiàn)更好的用戶體驗,但隨著應(yīng)用交付需求的增長,用戶的訴求就一定會超出 PaaS 系統(tǒng)的能力邊界。這種情況在 KubeVela 平臺中則永遠(yuǎn)不會發(fā)生。
此外,KubeVela 是一個獨立于運行時集群的應(yīng)用交付控制平面(這是我們認(rèn)為的下一代 PaaS 系統(tǒng)的合理形態(tài)),而現(xiàn)有的 PaaS 則往往選擇以插件形式部署在運行時集群當(dāng)中。
下面,我們來舉一個最簡單的示例來看一看怎樣將一個應(yīng)用或服務(wù),能夠快速的在K8s上以容器化的方式運行起來:
交付Helm組件
在交付應(yīng)用后,我們需要運維該應(yīng)用來觀測它的指標(biāo)和日志。
基于此,我們在KubeVela引擎構(gòu)建云平臺時,在日志、監(jiān)控告警等層面做了相應(yīng)的自動化的集成。主要的四個方面包括監(jiān)控目標(biāo)、監(jiān)控面板、日志采集、告警規(guī)則特征上做了相應(yīng)的開發(fā)。
下圖為監(jiān)控目標(biāo)特征、監(jiān)控面板特征、日志采集特征、告警規(guī)則特征:
向上賦能
基于前面構(gòu)建好的底層云平臺系統(tǒng),最后我們講講它的能力。
由于我們公司核心產(chǎn)品是一個一站式的云原生DataOps平臺,底層的云平臺系統(tǒng)搭載了上層的容器化大數(shù)據(jù)平臺、數(shù)據(jù)集成開發(fā)平臺、數(shù)據(jù)資產(chǎn)運營平臺、數(shù)據(jù)質(zhì)量平臺等各種數(shù)據(jù)平臺系統(tǒng)。
- 從應(yīng)用交付的角度,云平臺賦能了數(shù)據(jù)平臺的大數(shù)據(jù)及各種中間件快速容器化集成落地,例如典型的離線計算平臺開源組件Hive、Spark、HDFS以及流處理平臺開源組件Kafka、Flink等
- 從多租戶的角度,云平臺賦能了數(shù)據(jù)平臺的多租戶管理,例如資源配額管理、鑒權(quán)、授權(quán)等
- 從彈性的角度,云平臺賦能了數(shù)據(jù)平臺服務(wù)的彈性伸縮,以及集群級別的伸縮等
- 從調(diào)度的角度,云平臺賦能了數(shù)據(jù)平臺服務(wù)的K8s原生調(diào)度(Spark on K8s),以及增強型調(diào)度框架如Volcano的集成等
由于核心引擎提供的靈活、可擴展性,未來我們的云平臺還能夠?qū)⒏嗟腒8s生態(tài)及系統(tǒng)能力納入進來,向上面的業(yè)務(wù)層提供更強大的功能及性能支撐。
具體來說,目前的階段性成果體現(xiàn)在:
- 大數(shù)據(jù)組件的快速交付:Hive、Spark、HDFS、Kafka、Flink...
- 數(shù)據(jù)應(yīng)用的快速開發(fā)集成:自定義程序發(fā)布
- 統(tǒng)一的可觀測性集成和展示:監(jiān)控、告警、日志
- 全系統(tǒng)的多租戶實現(xiàn):租戶配額管理、服務(wù)/數(shù)據(jù)的鑒權(quán)+授權(quán)
未來更進一步向上賦能DataOps的能力則體現(xiàn)在:
- 開發(fā)運維:CI/CD,多環(huán)境管理
- 可觀測性:大數(shù)據(jù)平臺全鏈路追蹤
- 彈性伸縮:大數(shù)據(jù)作業(yè)資源彈性、自適應(yīng)
- 增強型調(diào)度:Volcano Scheduler,提供更適合大數(shù)據(jù)系統(tǒng)的使用
作者介紹
金津,智領(lǐng)云科技云平臺研發(fā)經(jīng)理,華中科技大學(xué)計算機系碩士。加入智領(lǐng)云6年多,長期從事云原生、容器化編排領(lǐng)域研發(fā)工作,主導(dǎo)了智領(lǐng)云自研的BDOS應(yīng)用云平臺產(chǎn)品開發(fā),并在多個大規(guī)模項目中成功實施落地,在大規(guī)模容器化編排系統(tǒng)方向有豐富的實踐經(jīng)驗。