Kubernetes 複雜嗎?可以不複雜
作為雲原生的核心產品,Kubernetes 提供的編排和管理功能,能輕鬆完成大規模容器部署,但 Kubernetes 自身的複雜性也導致眾多企業一直徘徊於容器服務之外。據調查,只有不足 10% 的用戶表示使用 Kubernetes 時沒有遇到阻礙。
在 2019 年的一個關於容器技術的一個調查數據中,有 40% 的受訪者表示計劃採用容器。然而,據 UCloud 產品經理張鵬波透露說,在他們接觸的用戶當中,曾經在兩年前表示有興趣遷移到容器的用戶,兩年過去了,這些用戶很多依舊「計劃採用」容器服務。
這讓我好奇其中發生了什麼。讓我們一起來探尋一下其中的癥結,以及是否可以將複雜的 Kubernetes變得不複雜。
Kubernetes 複雜嗎?
自從 2017 年,Kubernetes 在容器編排三強爭霸賽中勝出後,就成為了容器編排領域的事實標準,極大的助推了容器技術在業界的發展。作為企業級的容器服務編排系統,Kubernetes 從技術上是現在、乃至未來的主流。
容器擁有很多優點,包括不可變環境、輕量級、快速啟動等優勢;而容器編排系統又在此基礎上更進一步,提供了更加強大的功能,包括自動部署、快速擴容、故障自愈等等。
然而,在這一系列令人神往的優勢和功能背後,Kubernetes 也相應的引入了更多的複雜性。這些複雜性體現在多個方面,比如說:
- 首先是 Kubernetes 架構,本質上,Kubernetes 是用來管理分散式系統的平台。而一說到分散式,複雜性是不可避免的,管理分散式系統的平台自然也不例外。
- 另外是容器支持的網路,Kubernetes 支持的網路類型很多。很多用戶對於 Kubernetes 的網路非常疑惑或者說很糾結,當業務要遷移到 Kubernetes 時,選擇什麼類型的網路是一個難以抉擇的問題。特別是在業務遷移上去之後又遇到一些問題的話,排查起來會非常麻煩,這給用戶帶來很大負擔。
- 最後還有就是各種各樣 Kubernetes 組件的配置,這些都是用戶將業務遷移到 Kubernetes 的障礙。
有什麼解決方案嗎?
如上所述,並不是每個用戶都能嘗到桃子的美味的,還有很多渴望遷移到容器環境的用戶被拒之門外。
在這種情況下,全球各家雲服務商,都紛紛推出自己的容器編排服務,在 Kubernetes上構建了自己的 Kubernetes發行版或定製產品。
而作為中國第一家公有雲科創板上市公司,UCloud 利用在 UK8S 產品的技術沉澱,推出新的容器管理服務產品 Cube:兩步即可部署容器化應用;採用無伺服器形態,不需要再維護底層基礎設施;按秒後付費,無需預留資源;降低企業部署雲原生產品的學習和技術門檻。
為什麼要推出 Cube?
在容器和 Kubernetes 如火如荼發展的同時,UCloud 發現,在他們的 UK8S 上線大概兩年多的時間裡,之前曾經想把業務遷到 Kubernetes 的用戶。在兩年後的今天,他們還是說這個話,說我很想上 Kubernetes,還需要你們來做技術交流。
UCloud 產品經理張鵬波說:
這讓我們一度很困惑,我們一開始也做了一些嘗試,比如說做了很多線下的培訓、線上的交流,嘗試去推動用戶把他們的業務遷移到 UK8S 裡面來。但是發現這個過程非常緩慢,我們沒有辦法控制和推動用戶的遷移流程。很多公司的業務在快速發展,運維和研發是沒有辦法做架構上的調整的。
發現溝通、培訓這條路實際上是走不通之後的。後來我們想,能不能換一條路,能不能基於 Kubernetes提供這樣一個產品:這個產品只具有 Kubernetes 好處,掩蓋了 Kubernetes 的複雜性,只提供類似於自動部署、快速擴容這樣的特性,而用戶不需要關心底層的 Kubernetes 架構,不需要再操心 Kubernetes 的網路了,也不需要去學習 Kubernetes 的各種 API 了。
Cube 的設計思路
沿著這個思路,UCloud 形成了自己的 Cube 產品。它的設計是從以下幾個方面考慮的:
首先,Kubernetes 裡面哪些功能是會經常會用到的,比如 Deployment 控制多副本容器組的管理, Job 控制任務型容器組,Service 做服務發現,PVC可以用來抽象使用塊存儲以及文件存儲。這是 Kubernetes 最核心的一些功能。UCloud 在設計 Cube 的時候,希望將這些功能全部保留。這意味著整個 Cube 是基於 Kubernetes 來實現的。把這些複雜性全部屏蔽掉,用戶不需要維護 Kubernetes 集群,不需要操心 Kubernetes 網路方案,而是由 Cube 提供一個最優網路方案,把容器的網路和虛擬機的網路扁平化。
其次,把業務遷移到 Kubernetes 的時候,把單體業務變成分散式業務、微服務的時候,用戶一定需要考慮容器日誌的統一收集、統一管理的問題。在 Cube 裡面自動完成了日誌的採集工作,集成了日誌管理工作。另外,對容器環境的監控也是同樣的道理,統一在 Cube 中完成。
當把這些產品全部集成到 Cube 里以後,Cube 是一個什麼樣的產品形態呢?
首先保證 Kubernetes 最核心的功能,用戶能夠在 Cube 裡面創建 Kubernetes 常用的對象;另外 Cube 的產品形態應該是無伺服器的形式;最後,Cube 引入了輕量級的虛擬化技術,實現了容器組與容器組之間虛擬機級別的隔離,這樣好處是什麼呢?
我們都知道容器的運行是共享使用宿主機的內核的,存在一定的安全風險,Cube 為每一個容器組實現了一層虛擬機的封裝,可以使用戶安全的運行容器;同時 UCloud 容器團隊針對虛擬機的啟動進行了深入優化,虛擬機啟動速度最快只需要 125 毫秒。
Cube 的功能亮點
快速遷移
讓我們橫向對比一下,用戶使用 Kubernetes 和 Cube 的流程上會有哪些區別。
左邊是 Kubernetes,用戶要把業務遷移到 Kubernetes,大概要經過這幾個步驟:
- 第一個步驟學習 Kubernetes,不僅僅是一個人,也可能不僅僅是一個團隊,這個過程可能需要三個月到一年。
- 搭建集群,考慮集群的參數配置、集群的維護工作。
- 然後是做業務鏡像。
- 之後還要考慮了解 Kubernetes的 API 以及 Kubernetes 應用。
- 最後才部署應用。
從 UCloud 觀察到的情況來看,如果是對 Kubernetes非常熟悉的用戶,這個過程可能要一兩個月;但是如果對 Kubernetes 不熟悉,需要半年乃至一年。
使用 Cube 的話,就不再需要學習複雜的 Kubernetes知識了,和創建虛擬機一樣在 Cube 裡面創建一個應用,全部都是圖形化的方式。所以,Cube 整個流程只有兩步:
- 製作鏡像。
- 在 Cube 的界面上直接部署應用就好了。
UCloud 產品經理張鵬波說,「我們有幾個用戶知道了 Cube 公測,公測以後第一天進行了解,第二天就把自己部署的業務遷移到 Cube 上來了,一天的時間就可以完成業務遷移的工作。」
成本降低
另外在成本方面,我們知道 Kubernetes 是一個大型的分散式集群,除了工作節點以外,還有管理節點。管理節點只是用來管理 Kubernetes 支持的應用,這部分開銷實際上從企業角度來看是浪費的。對業務沒有起到正向的作用,所以 Kubernetes 成本會比較高。
而對於 Cube,因為只需要為容器實例來付費,容器用了多少資源就付多少錢,不再考慮管理節點的開銷、資源預留的問題。
更多的便利性
此外,還有一些其他針對 Kubernetes 自身的一些的改進。在 Cube 整個研發過程中,引入了一些亮點。
第一個是鏡像預熱,我們知道容器的啟動速度其實很快的,基本一秒鐘就能拉起來容器實例。但是這是熱啟動的情況,就是說工作節點上有這個鏡像時,拉起來速度是很快的。而在冷啟動的情況下,如果虛擬機上沒有對應的鏡像時,並且鏡像非常大時,這個過程就非常緩慢了。我們遇到過最大的鏡像有 20G 以上,容器的啟動的時間就要花費幾分鐘。這樣,容器本來說快速啟動的優勢就沒有了,比虛擬機還慢了。所以,UCloud 在研發 Cube 的時候,使用了鏡像預熱的技術,把容器鏡像變成 MBD 設備,在容器啟動的時候,把它納入到啟動容器的節點上去,省去了鏡像拉起的時間,讓容器冷啟動的時間從以前需要十幾分鐘變成現在只要幾秒鐘就拉起來了。
另外,因為 Kubernetes 是由谷歌開源的一項方案,很多理念和大部分企業更加超前一點。所以,在這種設計理念下,Kubernetes 每一個容器在重啟以後,容器的 IP 就會變化。而我們知道很多傳統的應用設計上是依賴於固定 IP 的,IP 一旦變化整個應用就會出現一些問題。很多用戶都希望讓容器重啟後 IP 保持不變。這對於特別是有狀態的服務尤為重要。所以,在 Cube 裡面使用了 UCloud 的 EIP 功能,能夠讓用戶容器重啟時其 IP 保持不變。
最後,Cube 要兼容原有的運維習慣。傳統上,虛擬機和 IDC 裡面的物理機在使用體驗上是沒有什麼差別的。有些用戶之前業務部署在虛擬機,經常需要在出現問題的時候,直接登錄到虛擬機裡面去排錯,查看一些日誌。所以,為了兼容用戶以前使用虛擬機的習慣,在 Cube 裡面的容器也提供了登錄功能,讓用戶在業務出現問題的時候,能夠登錄到容器里去快速排查問題。
結語
說實話,關於 Kubernetes 和各種發行版,我們也看過和研究過不少產品了,但是更多的是葉公好龍,沒有將自己的應用遷移到 Kubernetes上的想法。一方面對著 Kubernetes 的各種先進特性饞涎欲滴,另外一方面卻擔心沒有足夠的精力面對全新的技術變化帶來的挑戰。
不過,今天看到 UCloud 的 Cube 產品,我決定要去親自試試這個桃子的味道了。
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive