架構(gòu)師小組交流會(huì):每期選一個(gè)時(shí)下最熱門(mén)的技術(shù)話(huà)題進(jìn)行小組交流。
第一期主題:容器實(shí)踐。Docker 作為當(dāng)前最具顛覆性的開(kāi)源技術(shù)之一,其輕量虛擬化、可移植性是CI/CD,DevOps,微服務(wù)的重要實(shí)現(xiàn)技術(shù)。但目前技術(shù)還不夠成熟,在生產(chǎn)實(shí)踐中會(huì)遇到不少坑。本期參與小組交流的是國(guó)內(nèi)較早采用 Docker 實(shí)踐的公司。
參與嘉賓:滬江架構(gòu)師黃凱、滴滴架構(gòu)師田智偉、蘑菇街架構(gòu)師張振華、蘑菇街運(yùn)維架構(gòu)師向靖、七牛技術(shù)總監(jiān)袁曉沛、扇貝技術(shù)總監(jiān)丁彥
第一輪:自由交流
滬江黃凱:大家好,我是來(lái)自滬江的 Java 架構(gòu)師,我叫黃凱。在加入滬江之前,曾在 HP 和 IBM 的云計(jì)算部門(mén)擔(dān)任核心開(kāi)發(fā)和架構(gòu)職位。對(duì) IaaS、Paas、SaaS,尤其是云存儲(chǔ)有較深入的了解。2015 年加入滬江,擔(dān)任架構(gòu)師職位,主導(dǎo)的產(chǎn)品有:課件云存儲(chǔ),云轉(zhuǎn)碼等等。在這些項(xiàng)目中,我們使用 Mesos 和 Marathon 做 Docker 的編排工具,并開(kāi)發(fā)了一個(gè) Mesos Framework 做云轉(zhuǎn)碼的核心框架。
那么我們?yōu)槭裁匆褂?Docker,也是機(jī)緣巧合。由于我們的服務(wù)開(kāi)始的時(shí)候不是特別多,采用的就是一種普通的架構(gòu),后來(lái)隨著服務(wù)的增多,發(fā)現(xiàn)部署和運(yùn)維花的時(shí)間太長(zhǎng),我們想使用一些新的方式。開(kāi)始的時(shí)候研究過(guò) Openstack,后來(lái)覺(jué)得 Openstack 慢慢沒(méi)落,于是我們就選中現(xiàn)在使用的 Docker。我們并不把 Docker 當(dāng)成 VM 在用,而是使用它的原生的,在 Baremetal 上直接安裝 Docker,這樣運(yùn)行效率比在 VM 運(yùn)行 Docker 要來(lái)的快。課件云是由很多微服務(wù)組成,不光是一些存儲(chǔ),這種微服務(wù)是使用 Docker 部署,就相當(dāng)于編排,把這些微服務(wù)部署上去。轉(zhuǎn)碼這一塊是使用了 Mesos 框架,和 Docker 沒(méi)有特別大的關(guān)系,但是轉(zhuǎn)碼的應(yīng)用程序,比如說(shuō)我們現(xiàn)在應(yīng)用 FFmpeg,這個(gè)程序是運(yùn)行在 Docker 里面的。
為什么要選擇 Marathon?第一,我覺(jué)得 Mesos+Marathon 非常的容易理解。我們也研究過(guò) Kubernetes 和其他的一些方法,發(fā)現(xiàn)從運(yùn)維和研究的方面來(lái)說(shuō)的話(huà),Kubernetes 實(shí)在是太重而且太復(fù)雜,后來(lái)選擇了Marathon。我們現(xiàn)在是內(nèi)部服務(wù)使用,兩個(gè)部門(mén)在使用轉(zhuǎn)碼集群,大概是 Baremetal 有 20 臺(tái)的物理機(jī)。除去我們 API 的一些服務(wù),還有一些第三方組件的服務(wù)的話(huà),大概是有 400 多個(gè) Docker 容器在跑。
滴滴田智偉:大家好,我是滴滴代駕事業(yè)部架構(gòu)師,代駕事業(yè)部是公司最早嘗試 Docker 虛擬化的事業(yè)部。目前主要方向是業(yè)務(wù)系統(tǒng)及部分中間件的 Docker 化,我們做的時(shí)間也不太長(zhǎng),半年多的時(shí)間。線(xiàn)上是因?yàn)槲覀冇欣系囊惶装l(fā)布系統(tǒng),集成涉及的部門(mén)比較多,所以我們基于原來(lái)的發(fā)布系統(tǒng)完成了預(yù)發(fā)布環(huán)境 Docker 的部署。線(xiàn)下環(huán)境基于 Docker+K8s 開(kāi)發(fā)內(nèi)部的自動(dòng)化持續(xù)交付系統(tǒng)及開(kāi)發(fā)測(cè)試環(huán)境管理。我們?cè)谧鲩_(kāi)發(fā)和測(cè)試環(huán)境的自動(dòng)化,另一方面也是做環(huán)境管理的,兩套環(huán)境。對(duì)于項(xiàng)目并行的時(shí)候發(fā)現(xiàn)原來(lái)很多不夠用,原來(lái)很多配置是基于端口綁死的情況?,F(xiàn)在基于開(kāi)發(fā) Kubernetes 的話(huà),網(wǎng)絡(luò)隔離用了一部分,然后主要是用環(huán)境變量這一部分,主要考慮是解決一個(gè)配置可以應(yīng)用到在多個(gè)環(huán)境的情況,基于這個(gè)需求才用它。開(kāi)發(fā) Kubernetes 基于 Namespace,同一個(gè)服務(wù)在不同的 Namespace 下,它其實(shí)環(huán)境變量名可以是相同的,但是IP不同,而這一部分 IP 其實(shí)是由開(kāi)發(fā) Kubernetes 自己去管理的。基于環(huán)境變量獲取一些配置的話(huà),比如 IP 地址這種,就可以做到拿一份配置可以打出多套環(huán)境。
考慮業(yè)務(wù)的安全性和穩(wěn)定性,線(xiàn)上基于純 Docker 的方式在做。我們是基于裸的 Docker 來(lái)工作,主要是用資源隔離,沒(méi)有借助調(diào)度框架,也沒(méi)有自動(dòng)伸縮。我們是兩步走,一步是驗(yàn)證 Docker,其次是做開(kāi)發(fā) Kubernetes 線(xiàn)下使用和預(yù)研。為什么沒(méi)有考慮 Mesos?剛才跟滬江的同學(xué),我們的考慮是相反的。Mesos 側(cè)重點(diǎn)更專(zhuān)一一點(diǎn),首先不會(huì)有模塊的劃分,比如 Kubernetes 有 Replication controller ,Namespace 這種概念,而 Mesos 下幾乎沒(méi)有這種概念。我們拿 Kubernetes 主要是做一些編排的功能,而正好開(kāi)發(fā) Kubernetes 在整個(gè)發(fā)布和編排上,體系更全面一點(diǎn)。Mesos 最早是做資源管理,基于 Docker 做一個(gè) Framework 接進(jìn)來(lái)的話(huà),它不是專(zhuān)門(mén)為編排而生。Kubernetes 首先解決我們的問(wèn)題是,我們可能不需要加多份配置就可以搭多套不同的環(huán)境,它就是基于 Namespace 做一個(gè)多租戶(hù)的概念,會(huì)對(duì) Service 做一層隔離,對(duì)于動(dòng)態(tài)配置,擴(kuò)容這一部分暫時(shí)我們沒(méi)用到,確實(shí)用到的一些場(chǎng)景比較少。主要是做不同環(huán)境的隔離,并沒(méi)有太多使用編排細(xì)節(jié)上的東西,動(dòng)態(tài)伸縮之類(lèi)的目前線(xiàn)下沒(méi)有太大必要,線(xiàn)上可能會(huì)用到。