漫話docker的衰落與kubernetes的興起

本文首發在OPPO互聯網公衆號,歡迎點擊轉載 https://mp.weixin.qq.com/s/wBC4CgAzXeTNURa1YdYmIQ面試

伴隨着kubernetes 1.20中對於docker的棄用,關於docker的滅亡與kubernetes的興起的話題再度熱了起來。討論中關於docker滅亡的觀點我不敢苟同。docker還遠未到達滅亡的程度。相較而言,我以爲更恰當的說法應該是docker的衰落。本文我也就我我的的角度,聊聊我所經歷的docker的衰落與kubernetes的興起。docker

橫空出世——docker的興起

第一次接觸docker,是2014年。當時OpenStack的主要負載仍是kvm。而咱們也嘗試過了更爲輕量的lxc,可是以失敗而了結了。docker這個集裝箱的小圖標配上docker container的理念,一會兒就吸引住了你們的目光。經歷過製做lxc鏡像的痛苦,你就會更體會到docker的難得。繁瑣的lxc鏡像製做與精簡的Dockerfile相比,孰高孰低、孰優孰劣可謂是一目瞭然。api

docker成功的將cgroup、union filesystem、namespace這些較爲穩定和成熟的技術結合了起來,輔以docker image的製做工藝,實現了集裝箱式的標準交付。這時候的docker,很有種「舉天下之豪傑而莫能與之爭」的氣勢。雖然在生產環節仍是或多或少,還有這樣那樣的問題,可是docker已經跨過了POC(Proof of concept)階段,進入了pre-product的行列了。在對docker深度定製後,最終咱們團隊也將OpenStack + docker的組合成功推向了生產。架構

docker

那兩年,知不知道docker、會不會作鏡像、懂不懂docker原理成爲基礎架構領域面試的常見話題。雖然只有少數幾個公司敢爲天下先,將docker搬上了生產,可是已經沒有人能夠忽略這顆冉冉升起的新星了。那兩年,活躍在各個會議、論壇上的都是docker的話題。你們熱衷於討論生產上docker遇到的坑。你們各出奇招,修修補補,跌跌撞撞,docker總算也是被搬上了生產。而在這時,即便是技術保守、持徘徊觀望態度的公司,也都會安排一些人力着手跟進docker的發展與各個公司的實踐經驗了,這時候的docker真的是風頭無兩。工具

生來巨人——kubernetes

時間到了2015年,此時我轉而負責進行CaaS(Container as a Service)服務的調研。這時候你們都在說CaaS,可是每一個人說的都不同,其實你們都是摸着石頭過河。在此期間,以研究OpenStack的magnum爲契機,我接觸到了swarm和kubernetes。性能

swarm

swarm是docker公司力推的集羣管理方案。docker、swarm和compose組成的三劍客完整覆蓋了運行時、集羣管理與編排,構成了一個看起來牢不可摧的生態系統。特別是別出心裁的將swarm的api與docker的api進行了拉齊,將集羣的管理複雜度與單節點的管理複雜度向用戶進行屏蔽,卻是有一種如臂使指的快感。這個設計直到如今我都還以爲立意真的很精巧。spa

kubernetes

而初出茅廬的kubernetes也來勢洶洶。背靠Google的大旗,有Borg的背書,kubernetes在氣勢上一點不輸swarm + compose的組合。伴隨着kubernetes 1.0的發佈,kubernetes也從幕後走向了臺前,開始大規模接受來自全世界的PR提交,在功能、性能和穩定性上快速提高。設計

到kubernetes 1.2版本,通過咱們內部評估,已經具有生產級的品質。而聲明式API、簡潔的架構、靈活的標籤等優秀的設計,在作選型時已經讓咱們徹底沒有理由拒絕。然後通過數月緊張的開發,kubernetes + docker的組合被搬上了舞臺,而且以極快的速度侵蝕OpenStack + docker的份額。此時的docker已經開始被限制爲了容器的運行時和鏡像製做工具。捆住了docker的手腳,kubernetes已經沒有了能夠掰手腕的對手,一統江湖的路上kubernetes再無障礙。blog

美人遲暮——docker的衰落

時至今日,docker的衰落已經成爲了避免爭的事實。而docker的衰落我以爲是多方面的緣由。一部分是docker自身的封閉和執拗己見。我曾經記得在當時參與了當時社區多個PR的討論。新增一個feature的超長的週期,已經能夠磨掉多數人的耐心。docker社區在多個觀點上略顯保守的方式,讓你們逐漸失去了參與的熱情。開發

另外一方面,也是更爲重要的一點,是容器技術自己的門檻已經被突破,已經沒法造成技術上的護城河。而對於容器技術之爭,已經轉化爲標準之爭。而對於標準上更有發言權的一方,無疑是具備更多用戶、更龐大社區和更強大的平臺的一方。在短短兩三年的時間內,天平就快速地向kubernetes傾斜,其主導的CRI、CNI、CSI標準已經成爲了事實上的通行標準。而相較之下,docker力推的CNM等標準則顯得曲高和寡。

k8s

與此同時,kubernetes並無放棄主動的進攻。kubernetes的強勢和扶植其餘容器運行時加速了docker的衰落。在1.6版本棄用docker manager直連docker,轉向CRI + dockershim的組合時,就註定了kubernetes會走到徹底解耦docker,也就是今天這一步。與此同時,其餘容器運行時也開始了瓜分市場份額。若是說gVisor、Kata只是嘗試挑戰docker在部分場景中的地位,那麼紅帽的Podman則已經吹響了全面進攻的號角。再結合前兩年docker的一些融資和收購傳聞,平添了一種英雄末路、美人遲暮的傷感。

世間多少英雄戲,每到收場總傷神

六年回望,其實不管是在當時仍是如今來看,docker都是一個革命性的產品。docker的衰落並非意味着容器運行時不重要了,而是你們愈來愈習覺得常了。時至今日,容器運行時做爲一個大部已經被解決的問題,一個相對成熟的模塊,已經成爲了整個基礎架構體系的一部分。而做爲上層的平臺和更爲上層的用戶來講,對此將會給予愈來愈少的關注。這就像如今大多數用戶並不會去關心內核了同樣。甚至在將來,我預測運行時都有可能會成爲一個內核級別的附屬模塊,會預裝到許多的發行版上,其運行也逐漸對大多數用戶變得更加透明(實際紅帽已經開始向這個方向作了)。而愈來愈多的用戶則會將更多的注意力集中在上層的交付、管理、編排上。至於kubernetes會不會衰落,我以爲在中短時間內(五年內)不會。kubernetes已經成爲了一個平臺級的項目。在這點上,kubernetes做爲平臺將比工具性質的docker具備更強的生命力。

相關文章
相關標籤/搜索