您當(dāng)前的位置是:  首頁 > 新聞 > 專家觀點(diǎn) >
 首頁 > 新聞 > 專家觀點(diǎn) >

OpenStack+K8S為何是絕配

--最新培訓(xùn)PPT視頻

2017-07-11 14:30:43   作者:王后明   來源:開源云中文社區(qū)   評論:0  點(diǎn)擊:


  2017中國開源產(chǎn)業(yè)峰會暨第21屆中國國際軟件博覽會分論壇 
 6月28日,2017中國開源產(chǎn)業(yè)峰會暨第21屆中國國際軟件博覽會分論壇在北京隆重開幕。此次峰會由軟博會組委會指導(dǎo),北京市軟件與服務(wù)業(yè)協(xié)會和EasyStack聯(lián)合主辦。工業(yè)和信息化部信息化和軟件服務(wù)業(yè)司副司長李冠宇、北京市經(jīng)濟(jì)和信息化委員會委員姜廣智出席并致辭。
  基于Kubernetes構(gòu)建企業(yè)級容器云平臺視頻支持:IT大咖說
  以“開源、智能、未來”為主題,此次峰會特別聚焦開源容器技術(shù)領(lǐng)域,邀請了Linux基金會全球副總裁、CNCF COO Chris Aniszczyk到場進(jìn)行主題演講,在峰會特別打造的開源云核心技術(shù)培訓(xùn)專場中,來自EasyStack的容器架構(gòu)師王后明作了題為基于Kubernetes構(gòu)建企業(yè)級容器云平臺的培訓(xùn)演講,以下是他的演講內(nèi)容整理+PPT:
  EasyStack容器架構(gòu)師王后明
  大家下午好,開場之前先做個(gè)簡單的小調(diào)查。在座的各位如果用過OpenStack的請舉一下手,大部分都用過。那用過容器或者用過docker的有哪些同學(xué)?今天下午我分享的話題是基于Kubernetes構(gòu)建企業(yè)級的容器云平臺,整個(gè)分為三個(gè)大部分,首先我們簡單對比容器和虛擬機(jī)兩個(gè)之間的差異性,有一些特征,優(yōu)勢和劣勢。第二我們看一下容器云平臺在建構(gòu)的時(shí)候需要面臨哪些問題,第三可以看一下容器云平臺的典型應(yīng)用場景。
  首先看一下容器和虛擬機(jī)的區(qū)別,這個(gè)圖大家都是比較清楚。容器其實(shí)是對操作系統(tǒng)的封裝,把所有的應(yīng)用和它對應(yīng)的運(yùn)行時(shí)封裝在一個(gè)容器里面,然后以快速的容器進(jìn)行的方式發(fā)布上線應(yīng)用,這是容器的主要作用。虛擬機(jī)是相反,它是相對于容器來說是更重量級的虛擬化技術(shù),本身是對物理硬件的虛擬,把整個(gè)一套CBO、IO存儲系統(tǒng)整個(gè)虛擬化出來,也有相應(yīng)的應(yīng)用軟件在里面,這是容器和虛擬機(jī)兩個(gè)最大的差異,一個(gè)是虛擬層級不一樣,一個(gè)是在操作系統(tǒng)的虛擬,一個(gè)是對物理硬件的虛擬,這樣所帶來的差異就是說容器相對于虛擬機(jī)來講更輕量級,密度可以更能讓真正的硬件更好的發(fā)揮它的最大的資源利用率,這是它兩者之間的一個(gè)差異。
  從這邊我們可以看到其實(shí)這個(gè)截圖是來自于官方對容器的介紹頁面,其實(shí)官方推薦我們對容器使用方式是說讓容器和虛擬機(jī)在一起,就是說把容器運(yùn)行在虛擬機(jī)之內(nèi),這樣的話能讓應(yīng)用的部署和管理更加方便和高效。其實(shí)容器技術(shù)產(chǎn)生以后,真實(shí)的部署場景其實(shí)在國外是最先興起的,但是國外大部分百分之八九十的容器都是在云平臺上,所以說容器和虛擬機(jī)其實(shí)它更多的不是一個(gè)相互替代的技術(shù),它更多的是兩者之間結(jié)合來共同的為企業(yè)運(yùn)行空間里面來支撐下一代的運(yùn)營的基礎(chǔ)設(shè)施。這個(gè)是官方推薦的容器和虛擬機(jī)的一個(gè)最佳的組合方式。
  這邊我們可以簡單看一下跟容器相關(guān)的一個(gè)生態(tài)圈的情況。上午這個(gè)圖已經(jīng)見到了,這邊我和大家簡單再說一下。CNL是一個(gè)面向基金會的,他可以囊括的項(xiàng)目非常多,除了底層的基礎(chǔ)架構(gòu)這一層項(xiàng)目他不去管理之外,再往上包括移動、定義和部署這一層,這幾層有非常多的優(yōu)秀開源項(xiàng)目,這些開源項(xiàng)目一旦成熟了之后其實(shí)都有可能對他們進(jìn)行內(nèi)存管理。目前這個(gè)基金會托管項(xiàng)目一共有10個(gè),這個(gè)都是相對比較多。運(yùn)行時(shí)就是當(dāng)前運(yùn)行時(shí)在還是應(yīng)用Docker來管理虛擬機(jī)和容器,從下一個(gè)版本開始,其實(shí)可能在一些里面運(yùn)行時(shí)可能就會被代替COA,就是官方的標(biāo)準(zhǔn)容器。
  接下來我們看一下為什么要把OpenStack和Kubernetes結(jié)合在一起來構(gòu)建我們的容器的云平臺。首先OpenStack跟Kubernetes兩個(gè)為什么結(jié)合在一起?其實(shí)主要的一個(gè)原因就是說OpenStack它更多的是以基礎(chǔ)資源作為中心,其實(shí)比較擅長的是管理數(shù)據(jù)中心里面的像網(wǎng)絡(luò)設(shè)備、存儲設(shè)備,各種交換機(jī),其實(shí)更多比較擅長底層的基礎(chǔ)設(shè)施。Kubernetes相反,它更多的專注于應(yīng)用層的開發(fā),以應(yīng)用為中心,更多的是關(guān)注用戶更快速的把這個(gè)應(yīng)用從開發(fā)到部署上線,專注于創(chuàng)新型云原生應(yīng)用的交付和管理。
  我們把它們兩者結(jié)合起來,就是說使兩者之間1+1大于2,把兩者之間優(yōu)勢互補(bǔ),就是底層的基礎(chǔ)設(shè)施管理交給OpenStack來做,上層的云原生應(yīng)用的交付和管理來做,兩者相互互補(bǔ),加速應(yīng)用交付,助力業(yè)務(wù)創(chuàng)新。這是OpenStack和Kubernetes融合的一個(gè)最大的理念,就是它們兩者之間所擅長的時(shí)間并不一樣,但是關(guān)注點(diǎn)各有不同。
  接下來,我們會從OpenStack跟Kubernetes融合所具體的一些詳細(xì)的結(jié)構(gòu)來跟大家分享一下。
  第一部分就是說OpenStack和Kubernetes云平臺架構(gòu),最底層我們涉及到OpenStack和Kubernetes兩者之間的融合,所以最底層是以O(shè)penStack作為企業(yè)級的云平臺,來管理里面的計(jì)算資源、網(wǎng)絡(luò)資源、存儲資源等等,把這些資源形成池化,池化之后再把這些已經(jīng)虛擬化的資源交給一個(gè)核心的容器管理集群,這樣我們可以在OpenStack所管理出來的虛擬機(jī)或者是物理機(jī)之上來創(chuàng)建我們的容器集群,這樣就是說我們?nèi)萜骷焊鶲penStack這個(gè)環(huán)境是可以使用到統(tǒng)一到網(wǎng)絡(luò)和統(tǒng)一的存儲。統(tǒng)一的網(wǎng)絡(luò)在后面我們也會細(xì)說,統(tǒng)一的網(wǎng)絡(luò)就是說因?yàn)镺penStack網(wǎng)絡(luò)組件是OA,Kubernetes里面對應(yīng)的網(wǎng)絡(luò)組件也有很多的解決方案,如果沒有跟OpenStack這個(gè)平臺融合,它的網(wǎng)絡(luò)問題就是說在虛擬化再之上,再有一層OA網(wǎng)絡(luò),兩層OA會帶來網(wǎng)絡(luò)系統(tǒng)的損失。
  另外就是兩者之間相當(dāng)于是多層網(wǎng)絡(luò)底層網(wǎng)絡(luò)其實(shí)是一個(gè)黑盒,運(yùn)維管理起來管理管理的話相對于比較復(fù)雜,所以我們讓Neutron作為一個(gè)統(tǒng)一網(wǎng)絡(luò)管理組件,這樣把Neutron管理的這些原有的比如說企業(yè)級的硬件設(shè)備交換機(jī),能很好的把網(wǎng)絡(luò)能力傳遞給容器平臺,能更好的讓我們的容器應(yīng)用用到這些傳統(tǒng)的網(wǎng)絡(luò)設(shè)備,這些網(wǎng)絡(luò)設(shè)備的支持包括后面存儲設(shè)備的支持,其實(shí)在容器生態(tài)領(lǐng)域是相對比較薄弱的環(huán)節(jié),這是統(tǒng)一網(wǎng)絡(luò)。
  統(tǒng)一存儲是說當(dāng)前存儲能力比較弱,沒有像Cinder一樣這么豐富的對接這么高端的商業(yè)存儲,容器里面基本沒有做到,很少有存儲廠商再為Kubernetes對應(yīng)一個(gè)存儲。如果我們企業(yè)里面已經(jīng)有商業(yè)化存儲,已經(jīng)有這樣一個(gè)存儲設(shè)備,同時(shí)我要把這個(gè)設(shè)備非常方便的給這個(gè)容器來用,這個(gè)時(shí)候基本上很難用到,我們把兩者結(jié)合起來,用Cinder作為統(tǒng)一的整個(gè)大平臺的管控中心,把存儲能給虛擬化的應(yīng)用來用,又能給容器來用,這個(gè)是OpenStack跟Kubernetes平臺結(jié)合的一個(gè)最大的特點(diǎn),相比于運(yùn)行于裸機(jī)或者是運(yùn)行在公有云上或者私有云平臺上最大的一個(gè)亮點(diǎn)和特點(diǎn),后面我們會有詳細(xì)的片子來跟大家分享。再網(wǎng)上就是我們的企業(yè)級容器云平臺包括鏡像管理、持續(xù)集成、持續(xù)部署、應(yīng)用管理、容器集群管理,后面有更詳細(xì)的講解,我們有統(tǒng)一的管理界面,然后也有統(tǒng)一的編排,還有統(tǒng)一的支持OpenStack虛擬化應(yīng)用和統(tǒng)一應(yīng)用中心,我們可以讓整個(gè)云平臺的租戶管理、監(jiān)控告警、日志管理都可以達(dá)到最高要求。企業(yè)級的OpenStack平臺也是計(jì)算機(jī)資源管理、網(wǎng)絡(luò)資源管理、存儲資源管理。
  這邊是容器云平臺功能模塊,后面有更詳細(xì)的我就不仔細(xì)講了。然后我們可以看一下技術(shù)棧,OpenStack大家比較清楚。Kubernetes跟OpenStack的差別是Kubernetes本身它只是容器編排,并沒有像OpenStack那么豐富,如果只用Kubernetes,其實(shí)你離把容器真正運(yùn)用到生產(chǎn)上面還有很長的一段路要走,整個(gè)我們構(gòu)建容器云平臺的一個(gè)技術(shù)棧就是包括以Kubernetes為核心的一個(gè)容器調(diào)度和資源管理者的引擎。在核心的引擎之外我們集成了很多容器或者一些應(yīng)用一些技術(shù)組件,比如我們采用Harbor作為容器鏡像中心,目前還是采用Docker作為容器運(yùn)行時(shí),底層的SDN和SDS統(tǒng)一的用Neutron還有Cinder作為容器和OpenStack平臺的統(tǒng)一存儲和統(tǒng)一管理平臺。最底層的容器操作系統(tǒng)主要是跑容器化的Kubernetes應(yīng)有,可以更好更安全的來支撐容器化的應(yīng)用。
  再上面是功能模塊,這個(gè)分為幾大部分,DevOps、應(yīng)用管理和運(yùn)維管理,這個(gè)不詳細(xì)說,下面會有詳細(xì)介紹。這是功能模塊所涉及到的一些技術(shù)棧。
  然后這邊是應(yīng)用管理的方式,大家都知道Kubernetes里面應(yīng)用管理的功能相對是比較弱的,它本身其實(shí)是沒有一個(gè)應(yīng)用管理的概念,F(xiàn)在是有像him應(yīng)用商店應(yīng)用管理在里面,但是應(yīng)用商店如果你從開發(fā)到運(yùn)維上線的過程來說,對于Kubernetes來說涉及到交付和迭代比較多,復(fù)雜度也是比較高多,這樣的話我們是針對應(yīng)用商店比較難以使用的情況,我們封裝了一層簡單的應(yīng)用,這樣為了讓運(yùn)維更加方便。第一我們可以從鏡像倉庫封裝我們自己的應(yīng)用來部署,同時(shí)支持編排模板,也就是說我們可以用可視化的方式把整個(gè)容器應(yīng)用編排成一個(gè)模板,這樣我們不需要更多的去編寫,也就是說我們可以通過托代系統(tǒng)方式來交互和維護(hù)這種應(yīng)用。同時(shí)我們可以在后續(xù)支持以應(yīng)用商店的方式來交互我們的云應(yīng)用,這是應(yīng)用管理的一些在原生基礎(chǔ)上的一些情況。
  這是是Kubernetes的關(guān)鍵特性,這邊列了幾個(gè)點(diǎn)第一個(gè)Autoscaling是說我們可以設(shè)置一個(gè)預(yù)值,可以彈性的把這個(gè)應(yīng)用進(jìn)行伸縮。第二個(gè)灰度升級,就是我們應(yīng)用如果上線比較頻繁的話,我們可以采用滾動更新的方式讓應(yīng)用同時(shí)在不斷線的情況下完全升級。服務(wù)發(fā)現(xiàn)是說我們?nèi)绻岩粋(gè)大的系統(tǒng)拆成一個(gè)小的移動的話,服務(wù)之間肯定要有一套完整的發(fā)言機(jī)制,因?yàn)槿萜鞯木W(wǎng)絡(luò),容器的IP變化非常頻繁,因?yàn)椴煌5貢⻊?chuàng)建項(xiàng)目,這樣就有一個(gè)比較完整的服務(wù)發(fā)現(xiàn)的機(jī)制,我們也是把Kube-DNS這一套插件引入到整個(gè)容器平臺,為各種應(yīng)用來提供服務(wù)方向的機(jī)制。
  后面的ConfigMap比較好理解,就是配置管理,這種配置在容器應(yīng)用里面也是通過對應(yīng)的組件來管理應(yīng)用。Secret也是涉及到比如數(shù)據(jù)庫要提供給其他的應(yīng)用來消費(fèi),這個(gè)時(shí)候你基本上是避免明文的傳輸,這個(gè)時(shí)候我們建立一個(gè)Secret來管理密碼,這種東西主要是私秘的對象管理。健康檢查就是一般容器如果規(guī)模上億之后我們很難對容器做單個(gè)容器的一個(gè)管理,這個(gè)時(shí)候?qū)θ萜鞯慕】禉z查比較重要,也就是說我們可以在應(yīng)用里面設(shè)置他健康檢查點(diǎn),可以設(shè)置比如容器的某一個(gè)端口,判斷這個(gè)容器是不是在正常的提供服務(wù),如果不正常的話,會把不健康的容器進(jìn)行干掉,重新啟動比較健康的容器。負(fù)載均衡就是說容器在負(fù)載運(yùn)行,這個(gè)時(shí)候如果沒有負(fù)載均衡的話。
  另外故障自愈因?yàn)橄到y(tǒng)組件本身就是恢復(fù)化的管理。持久化存儲就是說Kubernetes里面提供了一套持久化存儲的機(jī)制,我們很容易把這些組件接入上來為Kubernetes容器化存儲提供能力。集群高可用比較好理解。
  接下來我們可以看一下拿OpenStack和Kubernetes平臺兩者結(jié)合在一起能解決一個(gè)問題就是它支持兩層的彈性伸縮,我們知道如果僅僅是Kubernetes的話,它所涉及到的事情就是我們一旦是發(fā)現(xiàn)哪一個(gè)容器負(fù)載過高,我們可以把負(fù)個(gè)數(shù)量提升到3或者到5或者到10。如果我們對應(yīng)的Kubernetes平臺是運(yùn)行在物理機(jī)上,峰值非常高的時(shí)候,所有的物理機(jī)負(fù)載壓力都非常高,這個(gè)時(shí)候你想要擴(kuò)一臺物理機(jī)到容器里面去是非常困難的事情,如果把OpenStack加上Kubernetes融合在一起,因?yàn)镺penStack加上Kubernetes是非?斓,我們可以做到兩層的彈性伸縮。
  所以說第一級的時(shí)候如果容器本身它的壓力負(fù)載過高我們可以對容器本身的應(yīng)用本身維度進(jìn)行彈性伸縮,這樣的話整個(gè)平臺變得非常靈活,能更好的來應(yīng)對高并發(fā)的比如說618,或者天貓雙十一都肯定需要這種雙層彈性支撐,來突然的面對這種高并發(fā)壓力。
  這邊可以看一下監(jiān)控告警,因?yàn)镵ubernetes本身內(nèi)制有hmts,我們是把OpenStack加進(jìn)來之后,監(jiān)控告警相對比較完善。就是可以支持多維度的監(jiān)控,包括容器,容器從大的方面就是包括容器維度,包括容器節(jié)點(diǎn)維度,包括整個(gè)集群的狀態(tài)都可以監(jiān)控到。到容器里面,其實(shí)對于容器的CPU內(nèi)存,網(wǎng)絡(luò),其實(shí)都可以監(jiān)控到,節(jié)點(diǎn)維度也是這樣,它整個(gè)可以監(jiān)控不僅僅是容器維度進(jìn)行監(jiān)控,同時(shí)在容器節(jié)點(diǎn)本身,如果CPU、內(nèi)存處于壓力鍋大的話,也可以被監(jiān)控工具來監(jiān)控到。監(jiān)控到之后可以通過我們提前設(shè)置的這些預(yù)值,如果達(dá)到這個(gè)預(yù)值之后,可以進(jìn)行告警信息狀態(tài),同時(shí)讓管理人及時(shí)發(fā)現(xiàn)整個(gè)系統(tǒng)的負(fù)載壓力情況。同時(shí)告警信息可以對接企業(yè)里面的系統(tǒng),比如通過郵件或者是短信的方式通知到運(yùn)維人員來及時(shí)處理系統(tǒng)的高壓情況,這個(gè)是監(jiān)控報(bào)警的特性。
  日志的搜集和存儲的功能點(diǎn),Kubernetes里面只能看到單個(gè)戶的里面的容器,它并沒有對容器日志進(jìn)行歸類,日志統(tǒng)一檢索這些功能都沒有。如果一旦把應(yīng)用拆分了之后肯定涉及到很多應(yīng)用同時(shí)在運(yùn)行,如果我們只是單個(gè)來做其實(shí)并沒有辦法很好的幫我們定位和解決問題。這時(shí)候就需要有一個(gè)日志搜集和管理系統(tǒng)來幫我們管理這些問題,我們也是基于整個(gè)方案來實(shí)現(xiàn)這個(gè)日志搜集和管理的功能,這就是日志管理。
  接下來看一下網(wǎng)絡(luò),前面我們提到網(wǎng)絡(luò)其實(shí)是OpenStack和Kubernetes平臺融合的時(shí)候最重要的一個(gè)特性之一。我們看到現(xiàn)在的容器網(wǎng)絡(luò)方案存在的一些問題,從成熟度來講與OpenStack中生產(chǎn)級別的Neutron網(wǎng)絡(luò)相比,現(xiàn)有的容器網(wǎng)絡(luò)解決方案,如Flannel、Veave等的成熟度還有一定欠缺,特別是國內(nèi)容器剛剛興起,大家普遍的大規(guī)模的使用還不是太多,如果用的話其實(shí)也是對容器現(xiàn)有的方案有一些改造,沒有多少是直接用容器里面的某個(gè)方案的。所以從成熟度來說沒有OpenStack這種平臺成熟。
  第二就是嵌套Overlay網(wǎng)絡(luò),性能損耗、延遲、管理、調(diào)試復(fù)雜度。這個(gè)是現(xiàn)有容器一些問題,我們采用Neutron統(tǒng)一管理容器平臺和OpenStack平臺的網(wǎng)絡(luò),網(wǎng)絡(luò)架構(gòu)扁平化實(shí)現(xiàn)容器與容器之間,以及容器與虛擬機(jī)之間的直連,引入高級網(wǎng)絡(luò)特性,可將Neutron的高級特性引入容器網(wǎng)絡(luò)中,諸如安全組、FloatingIP、QoS、LBaaS、FWaaS、VPNaaS等,來更好的管理容器的網(wǎng)絡(luò)。這邊是容器網(wǎng)絡(luò)的一些存在的問題和我們的一些優(yōu)勢。
  這邊是具體的容器網(wǎng)絡(luò)和OpenStack網(wǎng)絡(luò)兩者之間的一個(gè)交匯架構(gòu)。它最大的思路就是說我們以Kuryr作為控制器,這個(gè)時(shí)候Kuryr對應(yīng)的從Neutron這邊對應(yīng)Port、Network,這樣的話就是達(dá)到OpenStack和Kubernetes兩者之間的網(wǎng)絡(luò)組件的流通。
  我們接下來再看一下Neutron LB作為容器外部負(fù)載均衡器,Neutron LB作為容器集群外部負(fù)載均衡器支持L4/L7層負(fù)載均衡、支持應(yīng)用會話保持、自動鍵控隔離不可用節(jié)點(diǎn)、支持資源池動態(tài)擴(kuò)縮。
  這個(gè)是OpenStack和Kubernetes結(jié)合非常重要的一個(gè)優(yōu)勢,或者說我們可以把企業(yè)里面已經(jīng)有的開源式分布式存儲,或者是第三方雙向存儲,比如說EMC的存儲設(shè)備,IEM的存儲設(shè)備,這些存儲設(shè)備在QoS里面沒有很好的驅(qū)動去管理的,把OpenStack平臺引進(jìn)進(jìn)來之后,就可以利用豐富的移動存儲進(jìn)行虛擬化,再把這個(gè)存儲提供給容器化的應(yīng)用,這邊是兩者之間融合存儲的一個(gè)優(yōu)勢。
  另外可以看一下多租戶隔離問題,在OpenStack里面多租戶隔離特性增強(qiáng)容器安全隔離性,每個(gè)OpenStack租戶可單獨(dú)創(chuàng)建并管理Kubernetes集群。也就是說我們的應(yīng)用是很容易的就能相互干擾,我們利用OpenStack和Kubernetes的特性,每個(gè)租戶里面都有一個(gè)容器集群,這樣的話能針對同一個(gè)業(yè)務(wù),讓每一個(gè)業(yè)務(wù)能避免相互之間的干擾。
  最后一部分可以看一下典型的應(yīng)用場景,這個(gè)可能大家也比較熟悉。第一個(gè)就是說像6·18,雙十一高流量,同時(shí)有比較大峰值的波動的話,通常比較適合這種輕量級的產(chǎn)品。像京東,大家也可以看到京東的分享。這邊就是很好的支持微服務(wù)的改造,這個(gè)也是組大的一個(gè)使用場景。最后一個(gè)收益就是說我們除了這個(gè)容器,我們?nèi)诤霞軜?gòu)可以帶來異構(gòu)平臺統(tǒng)一管理、資源統(tǒng)一調(diào)度、提升安全性,這個(gè)是我們所帶來的一些優(yōu)勢。今天的分享就到這邊,謝謝大家!

專題