Kubernetes 為什麼這麼重要?
自然而然的,開發和部署雲原生應用程序已經變得非常受歡迎。對於一個允許快速部署和連續交付的 bug 修復和新功能的流程來說,它有明顯的優勢,但是沒有人會談到雞和雞蛋問題:怎樣才能達成這樣的目的呢?從頭開始構建基礎設施和開發流程來開發和維護雲原生應用程序是個不簡單的、耗時的任務。
Kubernetes 是一個相對較新的運行容器化負載的平台,它解決了這些問題。它原本是 Google 內部的一個項目,Kubernetes 在 2015 年被捐贈給了雲原生計算基金會,並吸引了來自世界各地開源社區的開發人員。 Kubernetes 的設計基於 Google 15 年的在生產和開發環境運維的經驗。由於它是開源的,任何人都可以下載並使用它,並實現其帶來的優勢。
那麼為什麼 Kubernetes 會有這麼大的驚喜呢?我認為它在像 OpenStack 這樣的基礎架構即服務(IaaS)和完整的平台即服務 (PaaS)的資源之間達到了最佳平衡,它的底層運行時實現完全由供應商控制。Kubernetes 提供了兩個優勢:對管理基礎設施的抽象,以及深入裸機進行故障排除的工具和功能。
IaaS 與 PaaS
OpenStack 被大多數人歸類為 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 實現了強大而有效的功能,可幫助你開發、部署和調試雲原生應用程序。它的架構和設計代表了數十年的難得的經驗,而你的團隊能夠免費獲得該優勢。
(題圖:squarespace.com)
作者簡介:
Tim Potter - Tim 是 Hewlett Packard Enterprise 的高級軟體工程師。近二十年來,他一直致力於自由和開源軟體的開發工作,其中包括 Samba、Wireshark、OpenPegasus 和 Docker 等多個項目。Tim 博客在 https://elegantinfrastructure.com/ ,關於 Docker、Kubernetes 和其他基礎設施相關主題。
via: https://opensource.com/article/17/6/introducing-kubernetes
作者:Tim Potter 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive