京東構建了全球最大的Kubernetes集羣

京东构建了全球最大的Kubernetes集群

作者|鮑永成

不在江湖久已。這兩年來我們(京東)完成了從 Kubernetes 的落地、推廣,到大規模運營的歷程。走過了那些山水,看過了那些風景,現在,我想,是時候講講我們的故事了。

故事要從四年前講起,JDOS(Jingdong Datacenter Operating System) 1.0 於 2014 年推出,基於 OpenStack 進行了深度定製,並在國內率先將容器引入生產環境。經歷了 2015 年 6.18/11.11 的考驗。團隊積累了大量的容器運營經驗,對 Linux 內核、網絡、存儲等深度定製,實現了容器秒級分配。

2016 年,我們將精力集中與了完善容器的監控、網絡、存儲,鏡像中心等容器生態建設,並積累了豐富的運營監控數據。也是在這一年,我們漸漸意識到了 OpenStack 架構的笨重,啟動了新一代容器引擎平臺 (JDOS 2.0) 的研發。

2017 年,JDOS2.0 全面推出,JDOS 從基礎設施昇華到應用平臺。2.0 推進了業務從源碼到編譯打包構建鏡像到上線的全流程,建設了一站式應用運行平臺。 這一年,我們逐步完善了容器的監控、網絡、存儲,鏡像中心等容器生態建設,開發了基於 BGP 的 Skynet 網絡、ContainerLB、ContainerDNS、ContainerFS 等多個項目。

並將其中部分項目進行了開源 (https://github.com/tiglabs/)。我們為我們的容器生態起了一個全新的名字:阿基米德,意為撬動數據中心的人。

京东构建了全球最大的Kubernetes集群

羅馬不是一天建成的。在容器化的過程中,我們經歷了很多,在這裡我認為有必要回顧一下我們的經驗和教訓,有資於後來者借鑑與參考。

  1. 不輕易放棄用戶。如果大量的改造工作都由業務方來承擔,那麼容器化的推動將會是一件極其艱難的事情。許多老的業務可能沒有那麼無狀態,甚而有一些諸如 ip 不變等的特殊需求。為用戶的定製和改造,不僅是一種妥協,更是提供一個兼容老的業務方式以使其容器化的方案。如果總是拒絕用戶,那麼在失去用戶的同時,也失去了與他們一起成長的機會。貼近用戶,瞭解用戶的需求,進行分析、歸類和適應性的改造。在成就了業務的同時,也是成就了自己。

  2. 幻想一蹴而就和急功近利,都是容器化過程中的大忌。對於應用進行改造的理想很豐滿,現實卻總是很骨感。因為這需要業務的大量的人力、物力、財力的支持。我們在容器化的過程中,採用了漸進式的策略。在開始,允許用戶將容器以虛擬機 / 物理機的使用方式進行使用,由其傳統的應用運維使用以往的工具進行部署和維護。同時,我們也提供了編譯構建上線的一站式服務,支持滾動升級、灰度發佈、負載均衡、域名解析等等服務。用便捷的運維管理方式吸引用戶自主進行轉變。再後來,我們放開了鏡像的構建過程。已經有越來越多的用戶願意自己去學習 Dockerfile,以便構建起屬於自己業務的鏡像了。

  3. 對於技術上的質疑要用技術來解決。新技術的推廣難免受到質疑與挑戰。要用於接受這些質疑和挑戰,並用技術和數據來證明自己。當然這也對團隊自身提出了更高的要求。對於新技術不是瞭解就可以了,而是能夠吃深吃透,進而根據場景進行定製。

  4. 架構要能化繁為簡,易於維護運營和排障。社區的功能總是大而全,而對於我們具體的落地實踐來說,我們更多要做的是減法,將原本繁雜的架構和流程梳理清晰,剪除不必要的功能,保證整個平臺良好的可維護性。

  5. 守住穩定的底線。穩定才是作為平臺賴以生存的基礎。將平臺進行加固,確保其穩定,不是說說而已,這其中有大量的工作需要做。穩定不是保守,不是守住現在的版本不再研發。而是要對於整個平臺的每個環節都能進行代碼級的精準掌握,對於上線前功能、性能進行充分測試,對於突發狀況有預案處理。從流程上能抑制雪崩問題的發生,並能夠控制故障的影響範圍。這些我們的具體工作將在未來的章節進行詳述。

調度的意義與難點

在實現了 99.9% 的業務容器化後,阿基米德迎來了全新的挑戰。近幾年硬件成本上漲帶來的 ROI 壓力以及建設異地多活的數據中心的實際需求,使得阿基米德 JDOS 的重點從容器集群管理轉向了調度,JDOS 也從集群管理平臺的角色逐漸轉換為了調度平臺。

調度的意義從微觀上來說,是為每個容器尋找到一個合適的落腳點,也就是節點。但是從宏觀角度來說,其意義在於將整個數據中心計算效能的提升。具體來說,調度可以在縮減資源碎片,資源時空複用,節能降耗以及提升計算效率方面取得巨大收益。而且該收益隨著集群規模的擴大,會有更為明顯的提升。

京东构建了全球最大的Kubernetes集群

調度雖然收益頗豐,但是要實現也非輕而易舉。調度不是空中樓閣,它依賴於大量的基礎工作。這其中一些典型的問題,需要一一解決,比如異構、隔離、監控、評估等問題。

京东构建了全球最大的Kubernetes集群

在 JDOS 1.0 中,因為容器更多的是以胖容器的形式存在,因此容器的使用相對來說是靜態的,也就是一次調度完成後容器不會輕易遷移。除非節點故障、維護等特殊情況,則將其遷移到別的節點。而在 JDOS 2.0 中,情況就變得更為複雜了。JDOS 2.0 允許用戶自動或者手動地進行應用的擴容縮容。並且,由於大數據、AI、serverless 等任務的引入,平臺在將其與業務容器進行混合部署的同時,也需要具備對相關任務進行實時監控和異常驅逐的能力。而這些,對於調度平臺的動態處理能力、時間規劃能力都提出了更高的要求。


分享到:


相關文章: