2017 年是 Kubernetes 的勝利之年,很多人還不明白這意味著什么。但如果看一下云計算業界的動向,你會發現,Kubernetes 的影響正在擴散。
在本文中我將分享我們的發現,并試圖說服你:基于容器 +Kubernetes 的新型 PaaS 將會成為云計算的主流。
但是這些意味著什么呢?首先,這意味著開發人員必須要掌握一個與 90% 的容器工作相關的容器編排平臺。這是一個學習 Kubernetes 很好的理由。同時這還意味著我們已經深深地依賴于 Kubernetes,Kubernetes 就像容器領域中的 Amazon.在 Kubernetes 上進行設計、實現和運行應用程序可以讓你在不同的云提供商、Kubernetes 發行版和服務提供商之間自由地對應用程序進行遷移。它能讓你有機會找到 Kubernetes 認證的開發人員,讓他們來開發項目并且在以后持續提供支持。Kubernetes 不是 VM,也不是 JVM,它是全新的應用程序可移植層,它是大家共同的選擇。——Bilgin Ibryam,Red Hat 首席架構師
基于“容器 +k8s”的新型 PaaS
Kubernetes 并不是傳統意義上的 PaaS,事實上,傳統 PaaS 可以基于 Kubernetes 構建。
在過去,PaaS 經歷了這樣的發展:
第一代:如最早的 Heroku,嚴格限定的運行時,不可修改的環境。對于 Ruby on Rails 這種小型單體應用來說很合適。
第二代:Cloud Foundry (DEA 版本) ,可以簡單的自定義環境,包括云端構建。也開始對多服務的應用有所支持。
第三代:Cloud Foundry (Diego 版本),如當前版本的 GAE 和 AWS Elastic Beanstalk,它們都經過之前兩代 PaaS 迭代而來。在這個版本里增加了對容器的支持,更自由的環境配置,對微服務的支持更強大。
第四代:Kubernetes 以及其它容器編排引擎。這一代的平臺變成了 Kubernetes 本身,它是面向云原生應用計算的、徹底基于分布式和容器的計算平臺。
第四代 PaaS 的關注點也和之前不一樣,我們可以把前三代 PaaS 稱為應用級 PaaS(Application PaaS),它們關注的是應用的運行,第四代稱為容器 PaaS,或者 CaaS、KaaS,它們關注的是應用的打包和分發。
第四代 PaaS 當然也可以使用其它的技術達到類似的效果,但就像前面所說的,Kubernetes 贏得了這場競爭。
從下面的 PaaS 平臺架構圖中可以看到,我用了 Docker+Kubernetes 層來做了一個“技術緩沖層”。也就是說,如果沒有 Docker 和 Kubernetes,構建 PaaS 將會復雜很多。當然,如果你正在開發一個類似 PaaS 的平臺,那么你會發現自己開發出來的東西會跟 Docker 和 Kubernetes 非常像。相信我,最終你還是會放棄自己的輪子而采用 Docker+Kubernetes 的。——陳皓 《洞悉 PaaS 平臺的本質》
這是一個大而全的 PaaS 平臺架構,實際中可以根據需求進行裁剪。
業界趨勢:全在做 PaaS
如果我們看一下業界,會發現,從公有云到私有云,從傳統企業到互聯網新貴,都在擁抱 Kubernetes,都在做 PaaS.
公有云全在做 k8s 和容器
從 AWS 到 Google Cloud、微軟 Azure,到國內的騰訊云、華為云等,都在提供 k8s 容器服務。如果一個公有云到現在還沒有提供 k8s 服務,或者沒有計劃做,那么可以認為它的技術已經落后于時代了。
公有云提供的 k8s 和容器服務,具體來說分為兩類:
一類是提供多租戶的單容器實例,這種其實類似于上面提到的第三類 PaaS,用戶創建的是單個容器,值得一提的是,這類 PaaS 仍可構建于 k8s 之上,并且不少云計算廠商已經采用這種方案。另外,由 KataContainer 技術逐漸應用到生產環境,帶來將無服務器概念和容器結合的 Serverless Container Cloud 理念,讓容器也能兼具傳統虛擬化的優點,讓這類服務的未來充滿了想象空間。
Kubernetes 所要扮演的角色,乃是取代傳統的 Infrastructure Layer 并鼓勵技術人員進行上層的“二次創新”,而并不是直接面對最終用戶。真正為最終用戶提供云服務的,很大概率應該是構建于 Kubernetes 之上的、更加簡潔高效的服務型 API,而 Serverless,尤其是 Serverless Container Cloud 的設計,正是這種需求下最為貼切的實現方式之一。——張磊,浙江大學博士研究員,Hyper 項目成員,Kubernetes 項目資深成員與社區維護者。
另一類是提供 Kubernetes 引擎,這種情況下用戶創建的是 Kubernetes 集群,如 GKE、Azure AKS、騰訊云 CCS 等。
第二類服務是目前公有云研發的重點,發布的時間基本集中在去年下半年到現在,我們采訪和調研了微軟 Azure、騰訊云、華為云,情況基本類似。
k8s 將成私有云的標準解法
私有云的情況分為兩類,一類是企業搭建數據中心和私有云自用,另一類是服務提供商,為客戶提供私有云解決方案。在這兩類情況中我們都看到 Kubernetes 被使用的越來越多,并且無論是企業、服務提供商,還是客戶都嘗到了 Kubernetes PaaS 的甜頭。
對于自用型私有云來說,系統的演進是一個復雜的問題,盲目采用新技術有時不僅無助于業務,還造成資源浪費。k8s 的表現如何呢?我們讓京東的經驗來說話吧:
(采用容器和 Kubernetes 的)JDOS 2.0 接入了包含大數據、Web 利用、深度學習等多種類型的利用,并為每一種利用依據類型采取了不同的資源限制方式,并打上了 Kubernetes 的不同標簽。基于多樣的標簽,我們實現了更加多樣和靈便的調度方式,并在部份 IDC 試驗性地混合部署了在線任務和離線任務。相較于 1.0,總體資源應用率提升了約 30%.——鮑永成,京東基礎平臺部技術總監
對于服務提供商來說,Kubernetes 健康的生態可以保證它們有大量的第三方軟件和工具使用,同時 PaaS 易于開發和代碼 / 應用復用的特性,也降低了它們交付項目的成本,并縮短了交付周期。
對于客戶來說,基于 Kubernetes 的 PaaS 可以實現應用自由遷移,這使企業可以采用多重云策略,并變相提升了對供應商的議價能力。
云計算經過了十多年的發展,已然進入的云原生的新階段,企業應用優先考慮部署在云環境,如何順應云原生的大潮,使用容器和 Kubernetes 構建云原生平臺,踐行 DevOps 理念和敏捷 IT,開源軟件和社區如何助力 IT 轉型,所有這些問題的解決方案就是 PaaS 平臺,其對于企業的重要性不言而喻。——宋凈超 TalkingData 容器平臺負責人
運維也需要 PaaS
騰訊互娛的運維團隊,需要為公司的在線游戲提供運維能力,這可能是中國挑戰最大要求最高的運維服務,因此他們有數百人的研發團隊,他們的做法可以很大程度上代表運維的發展方向,而不斷思考和迭代的結果就是自研了一套 PaaS 平臺藍鯨。藍鯨本身不使用 Docker、Kubernetes 等,完全自研,但我們可以看到,運維的發展方向就是 PaaS.
PaaS 本身與 DevOps 的理念完全契合,它改變了傳統運維的職責,讓他們變成運維開發,為企業研發運維工具乃至是 PaaS 平臺。而對于沒有藍鯨團隊開發能力的人,容器和 Kubernetes 能為他們提供彎道超車的捷徑。
京東金融的運維團隊就采用了 Kubernetes 來搭建他們的 PaaS 平臺:
PasS 平臺化將問題的關注點從基礎資源上升到了應用層面,目標是提供一個幫助開發人員運行、管理應用的平臺,讓使用者更關注運行的代碼(業務邏輯)。
PaaS 能解決的問題:
應用聚合:如開發需要一個 Redis,直接啟動一個 Redis 容器即可
服務發現、快速伸縮、狀態管理等
服務監控、恢復、容災
費用統計:提供計算資源信息匯總,針對不同項目收費
安全管控:不管什么平臺,安全都非常重要,例如 A 應用可以訪問 B,B 不允許訪問 A 以及安全審計等。
快速部署。
隨著 Docker 容器技術的出現,讓我們有了更合適的工具建設 PaaS 平臺,具備了基于應用構建服務的能力。在 Docker 容器調度框架上,我們又選擇了 Kubernetes 平臺。——張龍,京東金融 PE
為什么 PaaS 會成為云計算主流?
除了上面的這些,我們還可以看到,PaaS 是 SaaS 服務發展到一定程度后必然會做的事情,這么做不僅可以滿足客戶更全面、定制化的需求,也讓 SaaS 廠商可以向更多領域拓展。如果要舉一個例子的話,大家想想微信和小程序就能理解。
而為什么 Kubernetes 會成為 PaaS 的選擇,為什么 PaaS 會成為云計算的主流,是因為容器和 Kubernetes 是今日云原生概念的核心和基礎。云計算誕生到現在有十來年了,但云時代的應用應該長什么樣子,過去一直沒有人能說清楚,直到容器誕生后,我們終于離想象中的云時代稍微近了一些。
通過了解軟件工程的這三個本質,你會發現,我們上面所說的那些分布式的技術點是高度一致的,也就是下面這三個方面的能力。
分布式多層的系統架構。
服務化的能力供應。
自動化的運維能力。
只有做到了這些,我們才能夠真正擁有云計算的威力。這就是所謂的 Cloud Native.而這些目標都完美地體現在 PaaS 平臺上。前面講述的分布式系統關鍵技術和軟件工程的本質,都可以在 PaaS 平臺上得到完全體現。——陳皓 《洞悉 PaaS 平臺的本質》
云計算的未來
過去幾年云計算的發展令人眼花繚亂,想要預測它的未來無疑是極為困難的,但只要把握住 Kubernetes 這條主線,理解從虛擬化到容器再到兩者融合的發展路線,在短期內我們還是能做一些預測。
這個問題(Kubernetes 在五年后會變成怎樣)很好。我希望,在接下來的五年中,我們對 Kubernetes 的討論不比對 Linux 內核的討論多。它真的應該成為所有工作的基礎。如果我們接下來的行為正確,我認為,有些事情就會成真。
大多數開源和 ISV(軟件供應商)的安裝指令都是始于“選擇一個經過認證的 Kubernetes 集群”。第 2 步將是“運行這個 kubectl 命令”。Kubernetes 將讓第三方軟件不再憂慮開發針對無數平臺的版本,讓那些供應商更容易提供云提供商托管服務之外的方案。在許多情況下,使用云服務并沒什么不對,但是,你應該從你自己的基礎設施上也能獲得類似的體驗。
我相信,對于開發流程,我們將從封閉的 PaaS 服務,轉向企業可以使用一流組件組裝類似 PaaS 功能。其中,有些可能是領域專屬的,只在一個特定的行業里應用。企業能夠快速組裝一個完整的解決方案,提供從代碼到有強大防護的生產環境的簡單路徑,也提供在需要時“打破玻璃”運行自定義功能的能力。——Craig McLuckie,Kubernetes 創始人
Kubernetes 已經勝利,但基于 Kubernetes 的各類組件、工作流并不成熟,就像 Kubernetes 創始人 McLuckie 所說的,Kubernetes 需要成為討論的“背景”,我們討論的將是基于容器編排的各種創新和應用,比如 Service Mesh.
在我看來,在三到五年之后, Kubernetes 會成為服務器端的標準環境, 就像現在的 Linux,而 Service Mesh 就是運行在 Kubernetes 上的分布式應用的動態鏈接器,屆時開發一個分布式應用將會像開發單機程序一樣簡單,業界在分布式操作系統上長達三十多年的努力將以這種方式告一段落。——宋瀟男,普元信息云計算架構師