Kubernetes是Google十幾年來大規模容器技術應用的重要成果,是Google嚴格保密十幾年的秘密武器—Borg的一個開放原始碼版本。Borg是Google內部使用的久負盛名的大規模叢集管理系統,以容器技術為基礎來實現資源管理的自動化,以及跨多個資料中心的資源使用率的最大化。十幾年以來,Google一直透過Borg管理著數量龐大的應用程式叢集。正是由於站在Borg這個前輩的肩膀上,汲取了Borg的經驗與教訓,所以Kubernetes一經開放原始碼就一鳴驚人,並迅速稱霸容器領域。
Kubernetes 是什麼?
Kubernetes也是一個全新的以容器技術為基礎的分散式架構領先方案,是容器雲的優秀平台選型方案,已成為新一代的以容器技術為基礎的PaaS平台的重要底層框架,也是雲端原生技術生態圈的核心,服務網格(Service Mesh)、無伺服器架構(Serverless)等新一代分散式架構框架及技術紛紛以Kubernetes為基礎實現,這些都奠定了Kubernetes在基礎架構領域的王者地位。
其次,如果我們的系統設計遵循了Kubernetes的設計思想,那麼傳統系統架構中那些和業務沒有多大關係的底層程式或功能模組,就都可以立刻從我們的視線中消失,我們不必再費心於負載平衡器的選型和部署實施問題,不必再考慮引入或自己開發一個複雜的服務治理框架,不必再頭疼於服務監控和故障處理模組的開發。總之,使用Kubernetes提供的解決方案,我們不僅節省了不少於30%的開發成本,還可以將精力更加集中於業務本身,而且由於Kubernetes提供了強大的自動化機制,所以系統後期的運行維護難度和運行維護成本大幅度降低。
然後,Kubernetes是一個開放的開發平台。與J2EE不同,它不侷限於任何一種語言,沒有限定任何程式設計介面,所以不論是用Java、Go、C++還是用Python編寫的服務,都可以被映射為Kubernetes的Service(服務),並透過標準的TCP通訊協定進行互動。此外Kubernetes平台對現有的程式設計語言、程式設計框架、中介軟體沒有任何侵入性,因此現有的系統也很容易改造升級並遷移到Kubernetes平台上。
最後,Kubernetes是一個完備的分散式系統支撐平台。Kubernetes具有完備的叢集管理能力,包括多層次的安全防護和存取控制機制、多租戶應用支撐能力、透明的服務註冊和服務發現機制、內建的智慧負載平衡器、強大的故障發現和自我修復能力、服務輪流升級和線上擴充能力、可擴充的資源自動排程機制,以及多粒度的資源配額管理能力。同時,Kubernetes提供了完整的管理工具,這些工具涵蓋了包括開發、部署測試、運行維護監控在內的各個環節。因此,Kubernetes是一個全新的以容器技術為基礎的分散式架構解決方案,並且是一個整合式的完備的分散式系統開發和支撐平台。
在Kubernetes中,Service是分散式叢集架構的核心。一個Service物件擁有如下關鍵特徵。
- 擁有唯一指定的名稱(比如mysql-server)。
- 擁有一個虛擬IP位址(ClusterIP位址)和通訊埠編號。
- 能夠提供某種遠端服務能力。
- 能夠將用戶端對服務的存取請求轉發到一組容器應用上。
為什麼要用Kubernetes?
使用Kubernetes的理由很多,最重要的理由是,IT行業從來都是由新技術驅動的。Kubernetes是軟體領域近幾年來最具創新的容器技術,涵蓋了架構、研發、部署、運行維護等全系列軟體開發流程,不僅對網際網路公司的產品產生了極大影響,也對傳統行業的IT技術產生了越來越強的衝擊。以Kubernetes為基礎的新一代容器架構已成為網際網路產品及大規模系統的必選方案。2020 年3 月,虛擬化技術巨頭VMware 發佈了使用Kubernetes重新打造的全新vSphere 7。向全球宣告了其擁抱Kubernetes的決心,堪稱虛擬化技術十年來最大的一次演進。vSphere 7 透過底層重構,使得使用者能夠以ESXi管理VM虛擬機器的方式來運用Kubernetes的能力。毫無疑問,VMware的這一舉動將對IT行業帶來重大影響,也宣告了以Kubernetes為核心的容器技術取代、融合虛擬機器技術的時代正在加速到來。
如今,數百家廠商和技術社區共同建構了非常強大的雲端原生生態,市面上幾乎所有提供雲基礎設施的公司都以原生形式將Kubernetes作為底層平台,可以預見,會有大量的新系統選擇Kubernetes,不論這些新系統是執行在企業的本機伺服器上,還是被託管到公有雲上。阿里雲容器服務Kubernetes版ACK(Alibaba Cloud Container Service for Kubernetes)是全球首批透過Kubernetes一致性認證的服務平台。據公開資料,截至2020年,在阿里雲的ACK上,已經執行著上萬個使用者的Kubernetes叢集。而騰訊自研的TKEx容器平台的底層也使用了Kubernetes原生技術,服務於騰訊的各種業務系統,包括騰訊會議、騰訊課堂、QQ及騰訊看點等,目前這些業務已執行的Kubernetes叢集規模達到幾百萬CPU核心數。百度雲容器引擎(Cloud Container Engine)也採用Kubernetes作為容器叢集管理系統,於2019年年底也獲得了雲端原生計算基金會的官方認證,而在更早的2018年,百度的深度學習平台PaddlePaddle也宣佈支援Kubernetes,並在當年成為Kubernetes官方唯一支援的深度學習框架。華為早在Kubernetes剛開放原始碼時就以社區創始成員及白金會員的身份加入其中,華為雲的容器引擎(CCE)也以Kubernetes為基礎實現,同時補齊了完整的應用程式開發、交付與運行維護流程,為客戶提供完整的整合式雲端上應用生命週期管理方案。
使用Kubernetes有哪些好處呢?
首先,可以「輕裝上陣」地開發複雜系統。以前需要很多人(其中不乏技術達人)一起分工協作才能設計、實現和運行維護的分散式系統,在採用Kubernetes 解決方案之後,只需一個精悍的小團隊就能輕鬆應對。在這個團隊裡,只需一名架構師負責系統中服務元件的架構設計,幾名開發工程師負責業務程式的開發,一名系統兼運行維護工程師負責Kubernetes 的部署和運行維護,因為Kubernetes 已經幫我們做了很多。
其次,可以全面擁抱以微服務架構為核心思想的新一代容器技術的領先架構,包括基礎的微服務架構,以及增強的微服務架構(如服務網格、無伺服器架構等)。微服務架構的核心是將一個巨大的單體應用分解為很多小的相互連接的微服務,一個微服務可能由多個實例副本支撐,副本的數量可以隨著系統的負荷變化進行調整。微服務架構使得每個服務都可以獨立開發、升級和擴充,因此系統具備很高的穩定性和快速迭代能力,開發者也可以自由選擇開發技術。Google、亞馬遜、eBay、Netflix 等大型網際網路公司都採用了微服務架構,Google 更是將微服務架構的基礎設施直接打包到Kubernetes 解決方案中,讓我們可以直接應用微服務架構解決複雜業務系統的架構問題。
本文節錄自《從Docker動手邁入全新DevOps時代:最完整Kubernetes全書》,由深智數位 授權轉載。