第三篇 自研私有云與K8S對(duì)比

前言

本來(lái)計(jì)劃這篇寫(xiě)一寫(xiě)k8s設(shè)計(jì)特點(diǎn),但是最近在做技術(shù)路線規(guī)劃方面的事情尊浓,筆者在曠視科技做一款名為devops的私有云產(chǎn)品(此devops非彼devops)后文稱之為MDO(megvii devops私有云)戳寸,自研了一套類似k8s的編排調(diào)度工具。k8s只是私有云中的一個(gè)子集,私有云不僅關(guān)注編排部署渠驼,還關(guān)注自身部署升級(jí)、易用性运吓、穩(wěn)定性渴邦、異構(gòu)、安全性拘哨、監(jiān)控告警谋梭、災(zāi)備、基礎(chǔ)設(shè)施倦青、文檔在地化等瓮床。
從這個(gè)角度上看,對(duì)比MDO和k8s并不公平,因?yàn)閗8s只是私有云中管理編排調(diào)度隘庄、網(wǎng)絡(luò)存儲(chǔ)等方面的一個(gè)核心組件踢步。雖然對(duì)比并不全面,但是很有意義和價(jià)值丑掺,可以從架構(gòu)組件获印,對(duì)于云管理的概念抽象兩個(gè)角度縱向?qū)Ρ人伎迹由顚?duì)云管理的認(rèn)知街州。

組件架構(gòu)

MDO

mdo架構(gòu)如下兼丰, 通過(guò)manager + agent兩個(gè)概念管理集群,manager 和 agent上運(yùn)行的都是無(wú)狀態(tài)的服務(wù)唆缴,集群狀態(tài)持久化到etcd中鳍征。

  • manager
    主要包括mdo-manager服務(wù)、etcd集群面徽、Prometheus艳丛、Altermanager、Grafana監(jiān)控告警系統(tǒng)趟紊、Ntp server時(shí)間同步組件氮双、Nginx、keepalived织阳、CoreDns高可用負(fù)載均衡網(wǎng)絡(luò)組件眶蕉。
  • agent
    主要包括mdo-monitor自定義監(jiān)控組件、mdo-ctl唧躲、Ntp Client造挽、Node Exporter等。


    devops架構(gòu).png
image.png

K8S

k8s架構(gòu)如下也是manager + agent兩個(gè)概念管理集群(我個(gè)人理解master + slave和manager+agent是一個(gè)意思弄痹,只不過(guò)狗屁的政治正確導(dǎo)致還是叫manager, agent文明一些)饭入。集群的狀態(tài)持久化到etcd中,這樣天然好做高可用肛真。

  • manager
    manager上有controller manager谐丢、scheduler、API server + etcd蚓让。其中API Server是etcd的入口乾忱,提供持久化的抽象。
  • agent(即Node)
    包含CNI網(wǎng)絡(luò)組件历极、Kubelet窄瘟、CRI組件、持久化組件趟卸。


    k8s-components.png

從架構(gòu)上來(lái)看MDO和k8s基本一致蹄葱,如果k8s加監(jiān)控告警也基本上使用prometheus+altermanager+exporter三件套氏义,時(shí)鐘同步也會(huì)用ntp server+client兩件套。但是图云,k8s的容器運(yùn)行時(shí)和網(wǎng)絡(luò)都采用組件化的方式惯悠。

抽象概念

K8S

k8s_components.png
  • Deployment
    編排部署, 復(fù)雜應(yīng)用一般還需要Deployment上 再有一層依賴竣况。
  • Ingress
    對(duì)外暴露service克婶,Ingress在k8s中是一層概念抽象,有多種實(shí)現(xiàn)丹泉,常見(jiàn)的有Nginx ingress, haproxy ingress鸠补。
  • Service
    對(duì)外暴露pod,由于Pod自身啟動(dòng)的ip不是固定的嘀掸,k8s設(shè)計(jì)service這個(gè)概念,通過(guò)dns的方式對(duì)外代理服務(wù)规惰,service是k8s proxy 完成(待續(xù))
  • Pod
    邏輯概念睬塌,k8s并不真實(shí)存在pod。 Pod的目的是為了解決容器進(jìn)程的問(wèn)題歇万,容器的本質(zhì)是進(jìn)程揩晴,但是編排部署的時(shí)候,需要做進(jìn)程組級(jí)別的管理贪磺,pod大致對(duì)標(biāo)虛擬機(jī)硫兰,承擔(dān)調(diào)度,網(wǎng)絡(luò)寒锚,存儲(chǔ)劫映,安全方面的功能,在pod里提供sidecar功能刹前。
  • Container
    服務(wù)容器化泳赋,k8s容器化的起點(diǎn),以container的形式運(yùn)行在k8s集群中
  • CronJob
    定期任務(wù)
  • Job
    任務(wù)喇喉, 通常我們關(guān)注的重點(diǎn)是job的并發(fā)機(jī)制祖今,exit code != 0后,retry機(jī)制等拣技。
  • StatefulSet
    有狀態(tài)服務(wù)千诬,主要包括兩點(diǎn),持久化存儲(chǔ)的有狀態(tài)膏斤,服務(wù)啟動(dòng)的有狀態(tài)即服務(wù)之間的依賴關(guān)系徐绑,k8s通過(guò)給stateful set的pod編號(hào),這樣服務(wù)之間的依賴關(guān)系可以根據(jù)編號(hào)的順序啟動(dòng)掸绞,MDO中使用rank來(lái)實(shí)現(xiàn)服務(wù)之間的依賴泵三。持久化存儲(chǔ)是依賴pv/pvc的編號(hào)實(shí)現(xiàn)的耕捞。
  • DaemonSet
    守護(hù)進(jìn)程通常出現(xiàn)早于集群的出現(xiàn),通常管理網(wǎng)絡(luò)烫幕、安全俺抽、存儲(chǔ)、日志等事宜较曼。守護(hù)進(jìn)程exp網(wǎng)絡(luò)插件通常先運(yùn)行在pod上磷斧,pod才能變成schedule,也就是說(shuō)網(wǎng)絡(luò)守護(hù)運(yùn)行前捷犹,pod還沒(méi)有進(jìn)入schedule, 普通的進(jìn)程是不能運(yùn)行在unschedule的pod上的弛饭,這里就出現(xiàn)了悖論,不運(yùn)行網(wǎng)絡(luò)進(jìn)程萍歉,pod并不會(huì)變成schedule侣颂,但是正常邏輯網(wǎng)絡(luò)進(jìn)程無(wú)法運(yùn)行在unschedule的Pod上。
    k8s并沒(méi)有做黑魔法操作枪孩,而是引入了tolerations概念憔晒,即污點(diǎn)容忍,用來(lái)描述進(jìn)程可以運(yùn)行在某種污染比如unschedule的節(jié)點(diǎn)上蔑舞。daemonset運(yùn)行時(shí)自動(dòng)加上tolerations字段拒担,這樣就可以運(yùn)行在unschedule的pod上。
  • Horizontal PodAutoscaler
    水平擴(kuò)展
  • ConfigMap
    Config配置
  • Secret
    數(shù)據(jù)安全相關(guān)

MDO 功能與抽象概念

  • Node
    機(jī)器節(jié)點(diǎn)攻询,運(yùn)行的實(shí)體機(jī)器資源抽象从撼,包括GPU、Memory钧栖、CPU低零、NVME等計(jì)算內(nèi)存存儲(chǔ)資源

  • Deploy
    container組級(jí)別的服務(wù)部署:可以多個(gè)container部署在同一個(gè)Deploy中

  • 生命周期
    instance啟動(dòng)時(shí),可以自定義Pre操作桐经,結(jié)束時(shí)可以運(yùn)行Post操作毁兆,pre和post是按照順序執(zhí)行的,instance運(yùn)行狀態(tài)為運(yùn)行中和服務(wù)健康檢查阴挣,對(duì)標(biāo)k8s的liveness和readiness气堕。

  • 容器治理
    mdo的服務(wù)治理策略和k8s完全不同,k8s主要用于公司內(nèi)部有運(yùn)維的治理畔咧,可以理解為是標(biāo)準(zhǔn)機(jī)房或者機(jī)房的基礎(chǔ)設(shè)施較好茎芭。所以k8s對(duì)于pod等管理方法為當(dāng)list到某個(gè)pod不存在(exp:防火墻斷網(wǎng)等情況)會(huì)重新生成新的Pod調(diào)度資源。
    mdo使用的場(chǎng)景為私有化機(jī)房誓沸,非標(biāo)準(zhǔn)梅桩、無(wú)運(yùn)維、網(wǎng)絡(luò)設(shè)施較差的場(chǎng)景拜隧,調(diào)度部署是manager來(lái)處理宿百,但是調(diào)度部署后趁仙,對(duì)容器的運(yùn)維拉起等在每個(gè)Node節(jié)點(diǎn),依靠supervisor來(lái)管理垦页。假設(shè)集群節(jié)點(diǎn)間斷網(wǎng)雀费,那么斷網(wǎng)的Node上容器是正常運(yùn)行的,還可以被supervisor治理痊焊。manager不會(huì)重新生成pod盏袄。

  • Service
    Deploy組級(jí)別的服務(wù)部署,提供deploy之間公用的變量薄啥、配置辕羽、部署依賴等。提供patch垄惧、diff刁愿、回滾等功能

  • Job

    • Runonce
      只運(yùn)行一次的job,job的運(yùn)行狀態(tài)會(huì)被記錄到etcd中到逊,如果失敗不會(huì)自動(dòng)retry酌毡,運(yùn)行失敗需要手動(dòng)retry。
    • Normal
      可以retry蕾管,運(yùn)行時(shí)exit code為0時(shí)標(biāo)識(shí)Done否則會(huì)retry,和runonce區(qū)別在于normal job是冪等或者是可以重復(fù)執(zhí)行的菩暗。

通常用來(lái)處理數(shù)據(jù)庫(kù)初始化等掰曾。

  • 網(wǎng)絡(luò)
    • instance獨(dú)立IP
      使用Flannel vxlan + etcd + coredns實(shí)現(xiàn)每個(gè)docker 容器有自己的ip。flannel vxlan模式通過(guò)分配子網(wǎng)的方式停团,提供三層上的兩層網(wǎng)絡(luò)旷坦,實(shí)現(xiàn)ip獨(dú)立。
    • 高可用
      使用KeepAlived + VIP + nginx提供高可用入口佑稠,其他高可以服務(wù)秒梅。etcd自身高可用,備份舌胶,恢復(fù)
    • 單向網(wǎng)絡(luò)
      通過(guò)隧道的方式實(shí)現(xiàn)manager到agent的單向網(wǎng)絡(luò)捆蜀。
  • Debug
    調(diào)試不是一個(gè)概念,而是MDO對(duì)用戶提供的調(diào)試工具幔嫂,mdo通過(guò)提供webterminal功能辆它,是的用戶可以通過(guò)界面登錄到節(jié)點(diǎn)或者container中調(diào)試分析,同時(shí)webterminal還具有操作審計(jì)履恩,回放歷史等功能锰茉。
  • 文檔在地化
    對(duì)于一個(gè)項(xiàng)目文檔的重要性不言而喻,尤其對(duì)于像MDO這種toB的私有云切心,不同的版本飒筑,文檔會(huì)有變動(dòng)片吊,靠?jī)?nèi)部wiki等記錄文檔是不好的。exp:某個(gè)現(xiàn)場(chǎng)部署的一年前的版本协屡,某個(gè)現(xiàn)場(chǎng)部署的是兩年前的版本俏脊,遇到這樣的現(xiàn)場(chǎng)oncall問(wèn)題,搜索內(nèi)部wiki等方式是無(wú)法很好應(yīng)對(duì)的著瓶。
    MDO是把文檔集成到repo中联予,直接在自身web服務(wù)的界面中顯示。優(yōu)點(diǎn)如下:
  1. 私有化現(xiàn)場(chǎng)出現(xiàn)問(wèn)題可以在現(xiàn)場(chǎng)查閱文檔材原,本地文檔直接對(duì)應(yīng)本地feature沸久。
  2. 當(dāng)一個(gè)同學(xué)開(kāi)發(fā)新的feature或者有修改時(shí),在commit同時(shí)必須包好文檔的變動(dòng)余蟹,可以review代碼的時(shí)候也review到文檔卷胯,甚至對(duì)于新入職的同學(xué)或者是不熟悉相關(guān)模塊的同學(xué)根據(jù)文檔的變化反過(guò)來(lái)review code的合理性。


    image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末威酒,一起剝皮案震驚了整個(gè)濱河市窑睁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌葵孤,老刑警劉巖担钮,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異尤仍,居然都是意外死亡箫津,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門宰啦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苏遥,“玉大人,你說(shuō)我怎么就攤上這事赡模√锾浚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵漓柑,是天一觀的道長(zhǎng)教硫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)辆布,這世上最難降的妖魔是什么栋豫? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮谚殊,結(jié)果婚禮上丧鸯,老公的妹妹穿的比我還像新娘。我一直安慰自己嫩絮,他們只是感情好丛肢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布围肥。 她就那樣靜靜地躺著,像睡著了一般蜂怎。 火紅的嫁衣襯著肌膚如雪穆刻。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天杠步,我揣著相機(jī)與錄音氢伟,去河邊找鬼。 笑死幽歼,一個(gè)胖子當(dāng)著我的面吹牛朵锣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播甸私,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼诚些,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了皇型?” 一聲冷哼從身側(cè)響起诬烹,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎弃鸦,沒(méi)想到半個(gè)月后绞吁,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唬格,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年掀泳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片西轩。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖脑沿,靈堂內(nèi)的尸體忽然破棺而出藕畔,到底是詐尸還是另有隱情,我是刑警寧澤庄拇,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布注服,位于F島的核電站,受9級(jí)特大地震影響措近,放射性物質(zhì)發(fā)生泄漏溶弟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一瞭郑、第九天 我趴在偏房一處隱蔽的房頂上張望辜御。 院中可真熱鬧,春花似錦屈张、人聲如沸擒权。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)碳抄。三九已至愉老,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剖效,已是汗流浹背嫉入。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留璧尸,地道東北人咒林。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像逗宁,于是被迫代替她去往敵國(guó)和親映九。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容