作者簡介
Christopher Tozzi,自2008年來以自由職業者的身份對Linux、虛擬化、容器、資料儲存及其相關主題進行報導。
時至今日,Kubernetes已然成為風靡一時的容器編排排程工具,許多IT分析師均提出了企業應當在何時採用Kubernetes的深刻建議。然而,和所有其他的軟體平臺一樣,Kubernetes並非是一個適用於所有人的靈丹妙藥。我更傾向於認為人們在有些時候過分誇大了Kubernetes的作用,以至於他們產生了一種錯覺:他們無法離開Kubernetes,而實際上,Kubernetes比他們真正的需求要複雜得多。
為了分析人們真正的需求與Kubernetes的匹配程度,我分析了企業在採用Kubernetes編排之前必須考慮的5個事情。
Kubernetes是什麼?
如果您關注容器,您可能會知道Kubernetes是一個用於容器編排的開源工具,它可以自動執行諸如啟動容器、停止容器以及在同一個容器的不同例項之間的負載均衡等重要任務。
簡而言之,Kubernetes的主要目的是最大限度地減少工程師必須手動執行的管理工作量,並通過簡化容器操作,幫助企業大規模執行復雜的容器化應用程式。
決定是否採用Kubernetes的關鍵要素
基於Kubernetes的設立初衷,如果您喜歡自動化,討厭手動執行重複性的任務,那麼Kubernetes無疑是您的極佳選擇。
這是您決定是否採用Kubernetes的重要前提,但是,您不能僅根據這一“前提”就決定是否採用Kubernetes。在採用Kubernetes之前,您還需要考慮並權衡其他重要的因素。
1、Kubernetes的基礎設施規模
您的基礎設施規模是其中一個決定Kubernetes是否能夠很好地為您所用的關鍵要素。
Kubernetes的設計初衷是協調分佈在真正龐大的環境中的容器,這往往意味著企業應當擁有數十臺主機伺服器。根據過往的實施經驗,如果基礎架構中的伺服器少於50個,那麼您可能沒有足夠的資源來利用Kubernetes的全部優勢。
這並不是指Kubernetes無法在較小規模的基礎設施上執行。實際上,如果您願意,您可以在單個主機上執行Kubernetes。然而,由於Kubernetes其中的一個研發目的是:通過在數量龐大的叢集中分佈容器化應用程式提供高可用性,因此,如果您只有少量伺服器,則無法享受到Kubernetes的某些價值。
除此之外,考慮到設定和維護Kubernetes的複雜性,如果您的基礎設施規模較小,無法完全實現Kubernetes的高可用性承諾,那麼或許您不應投入過多時間和精力在Kubernetes上。
對於較小的基礎架構,您可以使用較為簡單的容器編排工具,或者使用如AWS ECS等具有內建編排的基於雲的容器服務。
2、Kubernetes作業系統環境
Kubernetes主要是一種Linux技術。儘管Kubernetes可以用於管理託管Windows伺服器上的容器化應用程式,這些應用程式作為Kubernetes伺服器叢集內的所謂工作節點執行。但託管Kubernetes核心服務的主要伺服器或者說主節點必須是Linux。
因此,如果您的商店以Windows為中心,那麼Kubernetes並非您的最佳選擇。但是您可以選擇Rancher輕鬆將Kubernetes的優勢引入Windows,並且極大程度降低使用的複雜性。
3、安裝和設定Kubernetes
在決定採用Kubernetes之前,您還需要評估您可以在此專案上投入的工作時間。
普通的開放原始碼版本的Kubernetes缺少內建的應用程式,也並未提供一種可以適用於所有預設配置的安裝方式。在叢集正常執行之前,您需要投入大量的時間從頭開始編寫及調整配置檔案。因此,安裝和配置Kubernetes的過程或許是一個令人生畏的過程,您需要投入大量的時間和精力。
部分Kubernetes發行版提供了互動式安裝程式指令碼,可以幫助您自動執行大部分設定過程。如果您選擇Rancher等Kubernetes發行版,則有望在一兩天內輕鬆完成配置及安裝。
第三種選擇是使用諸如Google Kubernetes Engine等雲供應商解決方案,將Kubernetes作為託管服務在雲上執行。在這種情況下,您可以自行選擇安裝及設定。但值得注意的一點是,在確定如何配置Kubernetes環境時,您的選擇可能會受到限制。
您必須意識到最為關鍵的一點:不要低估配置Kubernetes的難度。在您真的要全身心投入Kubernetes之前,請確保您所付出的努力是值得的。另一方面,如果您無法確定為企業在生產叢集上安裝和部署Kubernetes的難度,您可以嘗試使用K3s等輕量級Kubernetes發行版來進行測試,預估後續需要付出多少努力來進行Kubernetes的配置和設定。
4、Kubernetes和宣告式配置管理
Kubernetes採用了所謂的宣告式配置管理方法,這就意味著,您需要自行編寫配置檔案來設定Kubernetes應用程式應當如何執行,而Kubernetes將自動指出如何使應用程式符合規範。
宣告式配置管理與命令式配置管理相反,在命令式配置管理中,您可以自行配置應用程式的每個元件,並讓其按照您所想要的方式執行。
宣告式配置是Kubernetes在許多使用者例項中如此強大和可伸縮的其中一個原因。您可以設定一次配置,並且根據需要多次應用它。
但是,如果您的配置需求不斷變化,或者在工作負載或環境中的不同部分之間變化,那麼您應當如何處理呢?在這種情況下,宣告式配置管理將成為一個障礙,您將發現自己需要不斷地調整先前認為是“一勞永逸”的配置檔案。
因此,在您選擇採用Kubernetes之前,您需要考慮應用程式的配置需求。只有當您所需要的配置相對通用且靜態時,Kubernetes才是一個不錯的選項。
5、Kubernetes和多雲
Rancher等部分Kubernetes發行版的主要功能之一,是單個Kubernetes部署可以編排多個叢集,無論叢集位於在不同的公有云還是私有云上。這一功能使Kubernetes成為協助控制多雲架構複雜性的優秀工具。
在跨多雲部署容器化應用程式,並且Kubernetes的設定和配置工作很合理時,多雲上的Kubernetes是十分有意義的。
在這一因素中,您需要留意的是,在考慮是否以及何時採用Kubernetes時,應考慮您當前的多雲戰略以及多雲擴充套件計劃。
結 語
Kubernetes是一個非常棒的工具,在正確設定的情況下,它可以產生巨大的價值。但是,它並沒有達到殺手級應用程式的狀態,因為它無法在所有使用者例項中交付價值。在您被巨大的宣傳攻勢攻陷,並確定您無法離開Kubernetes之前,請清醒地對自己的需求進行評估,明確Kubernetes是否能在真正意義上幫助您更加有效、更加可靠地執行應用程式。