導讀 | 在開發和部署雲端原生應用程式時,執行容器化負載的 Kubernetes 平台起到了重大作用。自然而然的,開發和部署雲端原生應用程式已經變得非常受歡迎。對於一個允許快速部署和連續交付的 bug 修復和新功能的流程來說,它有明顯的優勢,但是沒有人會談到雞和雞蛋問題:怎樣才能達成這樣的目的呢?從頭開始建立基礎架構和開發流程來開發和維護雲端原生應用程式是個不簡單的、耗時的任務。 |
#Kubernetes 是一個相對較新的運行容器化負載的平台,它解決了這些問題。它原本是 Google 內部的一個項目,Kubernetes 在 2015 年被捐贈給了雲端原生運算基金會,並吸引了來自世界各地開源社群的開發人員。 Kubernetes 的設計是基於 Google 15 年的在生產和開發環境維運的經驗。由於它是開源的,任何人都可以下載並使用它,並實現其帶來的優勢。
那麼為什麼 Kubernetes 會有這麼大的驚喜呢?我認為它在像 OpenStack 這樣的基礎架構即服務(IaaS)和完整的平台即服務 (PaaS)的資源之間達到了最佳平衡,它的底層運行時實現完全由供應商控制。 Kubernetes 提供了兩個優勢:管理基礎設施的抽象,以及深入裸機進行故障排除的工具和功能。
IaaS 與 PaaSOpenStack 被大多數人歸類為 IaaS 解決方案,其中實體資源池(如處理器、網路和儲存)在不同使用者之間分配和共用。它使用傳統的基於硬體的虛擬化實現用戶之間的隔離。
OpenStack 的 REST API 允許使用程式碼自動建立基礎架構,但這就是問題所在。 IaaS 產品輸出的也是基礎設施。其創建後,支持和管理那些更多的基礎設施的服務方式並不多。在某種程度上,OpenStack 生產的底層基礎架構(如伺服器和 IP 位址)成為管理工作的重中之重。一個眾所周知的結果是虛擬機器(VM)的無序蔓延,而同樣的情況也出現於網路、加密金鑰和儲存磁碟區方面。這樣,開發人員建立和維護應用程式的時間就更少了。
像其它基於叢集的解決方案一樣,Kubernetes 以單一伺服器層級的方式運行,以實現水平縮放。它可以輕鬆添加新的伺服器,並立即在新硬體上安排負載。類似地,當伺服器沒有被有效利用或需要維護時,可以從叢集中刪除伺服器。其它 Kubernetes 可以自動處理的其他任務是編排活動,如工作調度、健康監測和維護高可用性。
網路是另一個可能難以在 IaaS 環境中可靠編排的領域。微服務之間透過 IP 位址通訊可能是很棘手的。 Kubernetes 實現了 IP 位址管理、負載平衡、服務發現和 DNS 名稱註冊,以在叢集內提供無痛、透明的網路環境。
專為部署而設計一旦創建了運行應用程式的環境,部署就是一件小事了。可靠地部署一個應用程式是說起來容易做起來難的任務 —— 它並不是最簡單的。 Kubernetes 相對其他環境的巨大優勢是,部署是一等公民。
使用一個單獨的 Kubernetes 命令列介面(CLI)的命令,可以描述應用程式並將其安裝在叢集上。 Kubernetes 從初始部署、推出新版本以及(當一個關鍵功能出現問題時)進行回滾,實現了應用程式的整個生命週期。運行中的部署也可以暫停和恢復。擁有現成的、內建的工具和支援應用程式部署,而不用自己建置部署系統,這是不容小覷的優點。 Kubernetes 用戶既不必重新發明應用程式部署的輪子,也不會發現這是一項艱鉅的任務。
Kubernetes 還可以監控運行中的部署的狀態。雖然你可以在 IaaS 環境中像編寫部署過程一樣編寫這個功能,但這是一個非常困難的任務,而這樣的情況還比比皆是。
專為 DevOps 設計隨著你在開發和部署 Kubernetes 應用程式方面獲得更多經驗,你將沿著與 Google 和其他前行者相同的路徑前進。你將發現有幾種 Kubernetes 功能對於多服務應用程式的有效開發和故障排除是非常重要的。
首先,Kubernetes 能夠透過日誌或 SSH(安全性 shell)輕鬆檢查正在運行的服務的能力非常重要。透過一條命令列調用,管理員可以檢查在 Kubernetes 下執行的服務的日誌。這可能聽起來像是一個簡單的任務,但在 IaaS 環境中,除非你已經做了一些工作,否則這並不容易。大型應用程式通常具有專門用於日誌收集和分析的硬體和人員。在Kubernetes 中的日誌可能無法取代完整功能的日誌和指標解決方案,但它足以提供基本的故障排除。
第二,Kubernetes 提供內建的金鑰管理。從頭開發過自己的部署系統的團隊知道的另一個問題是,將敏感資料(如密碼和 API 令牌)安全地部署到虛擬機器上很困難。透過將金鑰管理變成一等公民,Kubernetes 可以避免你的團隊發明自己的不安全的、錯誤的金鑰分發系統或在部署腳本中硬編碼憑證。
最後,Kubernetes 有一些用於自動進行縮放、負載平衡和重新啟動應用程式的功能。同樣,這些功能是開發人員在使用 IaaS 或裸機時要自己編寫的。你的 Kubernetes 應用程式的縮放和運行狀況檢查在服務定義中進行聲明,而 Kubernetes 會確保正確數量的實例健康運作。
總結IaaS 和 PaaS 系統之間的差異是巨大的,包括 PaaS 可以節省大量的開發和調試時間。作為一種 PaaS,Kubernetes 實現了強大而有效的功能,可幫助你開發、部署和調試雲端原生應用程式。它的架構和設計代表了數十年的難得的經驗,而你的團隊能夠免費獲得該優勢。
作者簡介:
Tim Potter - Tim 是 Hewlett Packard Enterprise 的高級軟體工程師。近二十年來,他一直致力於自由和開源軟體的開發工作,其中包括 Samba、Wireshark、OpenPegasus 和 Docker 等多個專案。 Tim 部落格在https://elegantinfrastructure.com/ ,關於 Docker、Kubernetes 和其他基礎設施相關主題。
以上是對於Kubernetes的廣泛受歡迎,究竟是什麼原因?的詳細內容。更多資訊請關注PHP中文網其他相關文章!