《專家觀察 | 張鑫:“從Kubernetes到谷歌容器管理的落地與演化”》要點:
本文介紹了專家觀察 | 張鑫:“從Kubernetes到谷歌容器管理的落地與演化”,希望對您有用。如果有疑問,可以聯系我們。
由工業和信息化部指導,中國信息通信研究院主辦,業界知名組織云計算開源產業聯盟(OSCAR)承辦的2017全球云計算開源大會于4月19日-20日在北京國家會議中心順利召開.本文為本屆大會嘉賓分享的大會演講速記內容,敬請瀏覽.
嘉賓介紹:張鑫
公司職務:才云CEO
大會演講速記
大家好,我叫張鑫,來自才云科技.我們創始團隊從卡耐基梅隆大學一直到谷歌,谷歌其實從2001年就開始使用容器.
我當時和我們CTO在集群管理的團隊,通過容器集群這樣一個系統,去管理當時80多個數據中心,超過一百萬臺服務器的體量.
這個調研數據是美國做容器監控公司針對目前容器常用的編排工具做的一個使用調研.
我們看到為什么今天這么多的Kubernetes的演講,也是有它的必然原因在這里面.從傳統IAAS到PAAS層劃分,我們看到基于底層的硬件軟件水電煤的服務,Kubernetes提供了對于微服務、業務等進行支持的一整套功能點.
今天跟大家分享三塊內容,第一塊就是Kubernetes跟谷歌內部管理有什么不同.第二塊Kubernetes作為面對現代微服務框架在傳統行業怎么落地.第三塊我們一直說容器更多支持無狀態的應用,這塊非常不直觀的,容器其實也可以很好支持數據的應用.
第一個模塊當時是在谷歌做集群管理系統整個的生態.其中黃色的是berg,這是Kubernetes的前身,對其進行管理.真的在集群管理體系里面,其實集群管理遠遠大于容器管理.
除了要管理容器以外,我們還有很多怎么樣做機器層面管理,怎么做安全方面的把控?怎么保證我業務系統的SIA,有很多技術模塊在我們容器之外的,首先容器管理不等同于集群管理的.
這里舉一個具體例子,以當時在谷歌上線一個新業務系統為例,當我們硬件從QA投入我這個業務系統以后,在集成管理內部有點像CNDB,有一個機器的數據庫,不光存放我硬件信息,還存放我機器未來承載什么任務,裝一些mysql節點還是存儲節點.
我存到數據庫在集群還有一個非常重要的組件,就是工作流管理,工作流管理每隔15分鐘察看這個數據庫是不是有新表象參加,當有新信息來了,根據表現記錄我這個機器裝什么軟件,觸發其他模塊API調用,對這個機器進行反映.
Kubernetes對上層應用進行生命周期生老病死的管理,我們大型系統里面也會出現很多問題,這些問題誰管理,我們有一個節點醫生的模塊.
每個有全局節點醫生的設置,這兩個系統負責管理機器或者硬件層面的問題,當發現問題以后,把這個問題不是直接修復,還是把一個問題添加到機器數據庫里,這時候工作流管理系統每15分鐘去看這個數據庫,當發現新問題以后會觸發修復的流程.
當時做到了60%所謂硬件的故障,都是通過這種軟件的方法修復,這個可能不是那么直觀,覺得硬件壞了就壞了,怎么可能軟件修復,發現硬件故障表彰由驅動層面軟得原因造成的,當體量達到百萬服務器以后,當我們60%的情況都不需要人工的時候就是巨大效率的提升.
開發者這端我提一下,我們所有應用在berg,什么東西量大以后變成大問題,當我這么大的代碼量,我怎么短時間完成測試,當時用了一套系統,這套系統首先自動識別出我們每一個可能觸發哪些測試級,其他大量的測試級無關,我就不會測試,同時測試的borgcli本身也運行在berg平臺上,從開發端到整個管理的全貌.容器管理在整個管理體系里面是其中一環,并不是全部.這些東西都是谷歌內部所有的,作為我們外部企業怎么盡量補全這樣一些功能,今天PPT我提一些小工具.
第一個我們鏡像倉庫的管理,作為容器來講,我首先第一個要有鏡像倉庫,鏡像倉庫由中國研究院主打一個非常好的項目叫做Harbor,可以支持多個鏡像之間復制,去做審計與健全這樣的工作.
我們才云自己對它進行了功能上的擴充,包括對鏡像進行安全掃描,實時的掃描鏡像中的漏洞,包括對鏡像可以添加標簽,去實現更靈活的管理,以及支持多種的存儲方案,這些都是我們做的工作.
提到發布,我們發布一直說做CICD,大家有一個體會,我們把一個傳統應用切割成微服務架構以后,其實發布反而一定程度上更復雜.
我原來發布一個二進制,現在我要拆分成很多模塊,如果后端更新話,前端也要更新,我們去年聯合發布了這樣一個系統,叫做Seco,支持微服務之間的拓撲依賴關系支持發布,發布過程當中也會實時進行鏡像倉庫掃描,大家看到截屏中的文字就是掃描出來鏡像的漏洞.
和發布相關就是另外一個概念就是灰度發布,我一個新版本的上線,我不希望新版本2.0一下替換1.0,對于基礎設計型的軟件我們按照一個數據中心一個數據中心更新.對于面向用戶的產品,谷歌的購物,它的搜索等等,我們按照流量,先把15%的流量引到我新版本里面.
基于Kubernetes我們怎么樣也做到灰度發布系統,其實也是可以利用它里面標簽的特性,以及它對服務的構建特性來實現一個灰度發布,時間關系我這里細節不說了.
我們用過Kubernetes的一線工程師,我們都知道,往KPS我非常容易的部署這樣一個服務,我構建一整套復雜的業務系統的時候,類似于Docker里面一樣,我如何快速構建一個復雜的系統,后來Kubernetes有一個開源解決方案,叫做Helm,我們推出一個輔助的工具叫做Heim-Registry,快速推出模板,把模板放到云應用商店里面,提供共享,以及快速構建.
我們監控報警系統,如果我們自己用過Kubernetes的時候話會知道,Kubernetes管理跑在它上面的應用,對里面應用進行監控和管理,但是Kubernetes自身也是非常復雜的軟件系統.
利用Kubernetes也知道,Kubernetes也要實時監控管理它的系統,在這個世界里面我們也需要有一個系統管理和維護Kubernetes自身.存儲替換成OPDMDB,把更多K8S系統的指標曝露出來,實現不同層級的報警策略.
剛才講完了Kubernetes跟谷歌的區別,以及我們演化和推進,怎么用一個新技術用到相對老的行業里面.
從我們落地經驗來看,其實落地遇到不少的挑戰,怎么做離線部署,怎么與私有云IAAS對接,對有狀態、單體應用的無縫遷移.線上系統升級,多租戶管理與安全把控.
我們有很多的openStack的用戶,我們怎么保證不掉線的運營,線上升級系統、多租戶的管理與安全把控,都是Kubernetes在傳統行業中遇到的問題,也是我們實踐中需要解決的問題.
第一個我們服務對外的曝露,這部分內容有點專業,我們都知道Kubernetes里面有一個服務的概念,集群內部的服務之間可以很輕便訪問.
當我把一個服務曝露給集群以外的事件,我把京東云曝露在外面,外部怎么訪問我的容器,我把對應服務對應起一個端口,在集群所有節點上,我web訪問這個服務,要記住這三萬多的端口把服務打過來,第一個端口我們要做記憶,其次我們很難做負載均衡.
這里頭有比較簡單的解決方案,我們還是先把服務在每臺機器上曝露出三萬多的端口.
為了避免用戶每次要把流量綁定在一臺服務器的三萬端口,我們可以在外面設一個負載均衡器,可以解決一部分的問題,同時還是解決不了我怎么從七層做負載均衡,我根據用戶ID等去做,我現在需要在機器上開哪些端口,只不過沒有曝露給用戶.
在Kubernetes首先解決七層的負載均衡,這個黑的我主要對系統做簡單的配置就可以把這個東西用起來,這個解決七層負載均衡的問題.
沒有解決我這個ingress系統部署在哪臺機器上,會不會存在單點失效的問題.
我們的解決方案本質上把Ingress做成一種資源,可調度的資源.
我們一個容器是一個可以被調動的資源,我們把Ingress也做成類似的調度資源,也實現了專門對Ingress的調動器.
我在一個機器里面自動部署一些Ingress的,同時Ingress不同之間,通過(英文)的方式,服務不同的應用.內容比較多,今天只能蜻蜓點水的把意思傳達一下.我現在快速跳到下面一個主題,就是日志.
Docker對于日志有自己一套管理辦法,但是落地傳統企業過程當中有兩個問題.第一個很多已有的應用采用寫文件的方式,我們是不是為了上這個系統我應用都要重寫,另外我寫不同文件還有額外的好處.
我通過日志類型寫到不同的文件里面,所以我很難實現細粒度的把控,用戶有時候希望這類日志寫到一個名字,A里、另外一個文件寫到B里,還是遇到一些需求,我們更改了Kubernetes的組件,使得Kubernetes或者Docker其實可以把存在本地的文件收集起來,發送到我們用的ELK里面.
第一種方法通過(英文)的方式,每一個塊里面除了我的(英文)應用,我還部署(英文),這個監聽我文件名和路徑,收集起來發送到(英文)里面.另外一種模式我們直接對EPI進行擴充,支持了一個東西,當我們部署的時候,我們寫YML文件可以指明這個POD寫在這個文件下你可以收集.經過這樣一些修改,我們成功落地在一些相對來說比較傳統的企業.
第一個全國最大的連鎖酒店之一,通過我們剛才做的適配最小化他們需要對應用所做的修改,上線至今目前運行到了七千多個容器,跑在數百臺的主機上.另外一個例子,中國最大卡的聯合組織,也是非常傳統的架構,底層用虛擬化來做的,上面通過我們采用的這樣一些方法,使得它可以非常輕便適配到傳統的行業.
第三大塊我們一直說容器和數據有狀態是天生的天敵,雖然我們可以掛載磁盤,用網絡存儲,不是容器的先天優勢,我們反而利用容器更好的做大數據的應用.
Docker和Kubernetes落地一個企業,大家最直觀的感覺,它解決我計算的問題,可以讓我計算更加輕便,可以讓我更高效去進行很多的計算.對于數據支持非常少,已有數據怎么利用更加快速的計算挖掘這個數據的價值,尤其是現階段我們數據變動體量越來越大,還有很多非結構化的數據,這是容器本身技術,或者我們看到產品很難解決的問題.
當然我們也知道最近從去年開始比較流行的就是我們AI,或者我們的深度學習,深度學習是一個很好實現AI的方法.
它相比于傳統的數據分析的方案更能提取一些復雜的特征,更能分析一些非結構化的數據,同時從精度上來講對于傳統的算法我可能很容易達到一個天花板,對于深度學習,隨著我數據量增加,我精度往往可以被持續的提升的,這是深度學習.
在深度學習這個領域里面由谷歌開源的一個方案叫做Tensorflow,社區活躍度來講跟Kubernetes非常相比,遠遠超過其他設計方案,獲得了最大社區的熱度.Tensorflow可能大部分人聽過,Tensorflow有很大的優勢,它最大問題就是計算量.
以做一個圖像分類為例,這是IMGENET的圖像分類,我們深度學習IMGENET提供很好方法.
另外就是一個數據平臺,我們怎么解決這個問題,利用容器和Kubernetes,利用他們分布式大規模計算的特性,實現極速深度學習的體驗.除了跑搜索、廣告、購物等等以外,其他業務和大數據業務都混跑在這個容器之上.
我們核心的解決方案把Tensorflow的算法容器化,同時跟Kubernetes做分布式的調度,我增加機器實現我的吞吐量.
這是我們簡單提供的解決方案和原生的Tensorflow相比很多的優勢.當實現這個功能以后在同樣的一個Kubernetes集群里面,不光我們運行A服務應用,可以應用我們CI、CD的功能,可以在我同個機器上進行深度學習.
目前在安防、金融等等領域實現自動從攝像頭監控有著火.
在電商領域實現了穿衣風格的搭配.
最后例子就是用深度學習做一個實際預測取得落地的效果.
有問題我們可以隨時交流.謝謝
文章來自微信公眾號:云計算開源產業聯盟
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4123.html