1. 程式人生 > >張鑫:“從Kubernetes到谷歌容器管理的落地與演化” – 運維派

張鑫:“從Kubernetes到谷歌容器管理的落地與演化” – 運維派

由工業和資訊化部指導,中國資訊通訊研究院主辦,業界知名組織雲端計算開源產業聯盟(OSCAR)承辦的2017全球雲端計算開源大會於4月19日-20日在北京國家會議中心順利召開。本文為本屆大會嘉賓分享的大會演講速記內容,敬請瀏覽。

嘉賓介紹:張鑫

公司職務:才雲CEO

大會演講速記

Kubernetes

大家好,我叫張鑫,來自才雲科技。我們創始團隊從卡耐基梅隆大學一直到谷歌,谷歌其實從2001年就開始使用容器。

容器叢集

我當時和我們CTO在叢集管理的團隊,通過容器叢集這樣一個系統,去管理當時80多個數據中心,超過一百萬臺伺服器的體量。

容器

這個調研資料是美國做容器監控公司針對目前容器常用的編排工具做的一個使用調研。

Kubernetes

我們看到為什麼今天這麼多的Kubernetes的演講,也是有它的必然原因在這裡面。從傳統IAAS到PAAS層劃分,我們看到基於底層的硬體軟體水電煤的服務,Kubernetes提供了對於微服務、業務等進行支援的一整套功能點。

谷歌

今天跟大家分享三塊內容,第一塊就是Kubernetes跟谷歌內部管理有什麼不同。第二塊Kubernetes作為面對現代微服務框架在傳統行業怎麼落地。第三塊我們一直說容器更多支援無狀態的應用,這塊非常不直觀的,容器其實也可以很好支援資料的應用。

叢集管理體系

第一個模組當時是在谷歌做叢集管理系統整個的生態。其中黃色的是berg,這是Kubernetes的前身,對其進行管理。真的在叢集管理體系裡面,其實叢集管理遠遠大於容器管理。

除了要管理容器以外,我們還有很多怎麼樣做機器層面管理,怎麼做安全方面的把控?怎麼保證我業務系統的SIA,有很多技術模組在我們容器之外的,首先容器管理不等同於叢集管理的。

這裡舉一個具體例子,以當時在谷歌上線一個新業務系統為例,當我們硬體從QA投入我這個業務系統以後,在整合管理內部有點像CNDB,有一個機器的資料庫,不光存放我硬體資訊,還存放我機器未來承載什麼任務,裝一些mysql節點還是儲存節點。

我存到資料庫在叢集還有一個非常重要的元件,就是工作流管理,工作流管理每隔15分鐘察看這個資料庫是不是有新表象參加,當有新資訊來了,根據表現記錄我這個機器裝什麼軟體,觸發其他模組API呼叫,對這個機器進行反映。

Kubernetes對上層應用進行生命週期生老病死的管理,我們大型系統裡面也會出現很多問題,這些問題誰管理,我們有一個節點醫生的模組。

每個有全域性節點醫生的設定,這兩個系統負責管理機器或者硬體層面的問題,當發現問題以後,把這個問題不是直接修復,還是把一個問題新增到機器資料庫裡,這時候工作流管理系統每15分鐘去看這個資料庫,當發現新問題以後會觸發修復的流程。

當時做到了60%所謂硬體的故障,都是通過這種軟體的方法修復,這個可能不是那麼直觀,覺得硬體壞了就壞了,怎麼可能軟體修復,發現硬體故障表彰由驅動層面軟得原因造成的,當體量達到百萬伺服器以後,當我們60%的情況都不需要人工的時候就是巨大效率的提升。

berg

開發者這端我提一下,我們所有應用在berg,什麼東西量大以後變成大問題,當我這麼大的程式碼量,我怎麼短時間完成測試,當時用了一套系統,這套系統首先自動識別出我們每一個可能觸發哪些測試級,其他大量的測試級無關,我就不會測試,同時測試的borgcli本身也執行在berg平臺上,從開發端到整個管理的全貌。容器管理在整個管理體系裡面是其中一環,並不是全部。這些東西都是谷歌內部所有的,作為我們外部企業怎麼儘量補全這樣一些功能,今天PPT我提一些小工具。

Harbor

第一個我們映象倉庫的管理,作為容器來講,我首先第一個要有映象倉庫,映象倉庫由中國研究院主打一個非常好的專案叫做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

剛才講完了Kubernetes跟谷歌的區別,以及我們演化和推進,怎麼用一個新技術用到相對老的行業裡面。

從我們落地經驗來看,其實落地遇到不少的挑戰,怎麼做離線部署,怎麼與私有云IAAS對接,對有狀態、單體應用的無縫遷移。線上系統升級,多租戶管理與安全把控。

我們有很多的openStack的使用者,我們怎麼保證不掉線的運營,線上升級系統、多租戶的管理與安全把控,都是Kubernetes在傳統行業中遇到的問題,也是我們實踐中需要解決的問題。

第一個我們服務對外的曝露,這部分內容有點專業,我們都知道Kubernetes裡面有一個服務的概念,叢集內部的服務之間可以很輕便訪問。

當我把一個服務曝露給叢集以外的事件,我把京東雲曝露在外面,外部怎麼訪問我的容器,我把對應服務對應起一個埠,在叢集所有節點上,我web訪問這個服務,要記住這三萬多的埠把服務打過來,第一個埠我們要做記憶,其次我們很難做負載均衡。

這裡頭有比較簡單的解決方案,我們還是先把服務在每臺機器上曝露出三萬多的埠。

為了避免使用者每次要把流量繫結在一臺伺服器的三萬埠,我們可以在外面設一個負載均衡器,可以解決一部分的問題,同時還是解決不了我怎麼從七層做負載均衡,我根據使用者ID等去做,我現在需要在機器上開哪些埠,只不過沒有曝露給使用者。

在Kubernetes首先解決七層的負載均衡,這個黑的我主要對系統做簡單的配置就可以把這個東西用起來,這個解決七層負載均衡的問題。

ingress

沒有解決我這個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

這是我們簡單提供的解決方案和原生的Tensorflow相比很多的優勢。當實現這個功能以後在同樣的一個Kubernetes叢集裡面,不光我們執行A服務應用,可以應用我們CI、CD的功能,可以在我同個機器上進行深度學習。

目前在安防、金融等等領域實現自動從攝像頭監控有著火。

電商

在電商領域實現了穿衣風格的搭配。

最後例子就是用深度學習做一個實際預測取得落地的效果。

有問題我們可以隨時交流。謝謝

文章來自微信公眾號:雲端計算開源產業聯盟