翻譯自:codilime.com/

  • codilime.com/kubernetes
  • codilime.com/kubernetes

Kubernetes是什麼以及如何使用它

Kubernetes是一個用於容器編排的開源系統,支持自動化應用程序部署,擴展以及管理。閱讀這篇博客文章,從商業視角瞭解下Kubernetes。我將簡要介紹虛擬化方法,構建Kubernetes的關鍵概念以及它在運行容器化應用程序時如何幫助您的業務。

首先,讓我們來看看採用Kubernetes的市場數據。根據Cloud Native Computing Foundation進行的一項調查,Kubernetes是容器管理工具的領導者。在調查中,83%的受訪者使用Kubernetes(2018年7月的數據,比2017年12月的77%),而58%的人在生產環境使用它,42%仍然在評估它。大多數受訪者是企業公司(5000多名員工),其中40%的人正在生產環境中使用Kubernetes。

根據2019年的RightScale雲狀態報告,Kubernetes的使用正在飆升。它在所有公司中的總體採用率從2018年的27%增加到2019年的48%,大型企業(1,000多名員工)甚至達到60%。2019年十大趨勢報告預測,應用程序開發的雲原生方法(包括容器和Kubernetes)將獲得更多的支持,因為許多企業正計劃採用這種方法。451 Research公司估計,到2020年,容器市場將從2016年的7.62億美元增長到27億美元。

鑒於過去幾十年中已經浮出的IT系統技術術語和命名法,從實現和性能的角度來看,準確掌握新技術所帶來的內容往往令人難以招架。因此,在深入探討為什麼要考慮部署Kubernetes之前,我將幫助您瞭解這項技術的用途以及它的工作原理。

虛擬化的舊方法

在早期,使用更多計算能力的唯一方法是在物理意義上添加更多硬體(因此舊的名稱為「伺服器羣」)。然後,虛擬機(VM)被引入,虛擬化的概念誕生了。在過去近20年中,這一概念一直在發揮著越來越大的作用。這種軟體引入了虛擬硬體抽象層(HAL),這反過來使得可以在父OS的相同底層硬體上運行多個操作系統(OS)和應用程序。雖然這種方法確實在當前的IT基礎架構領域具有優勢,特別是在涉及特定的複雜軟體的情況下,並且確實保持市場份額的大本營,但它並非沒有缺陷。

虛擬機的完全實現(為了進行比較我們稱為虛擬化2.0)可以迅速成為系統資源,因此需要更快,更昂貴的硬體。在混合設置中尤其如此,由於必須運行的應用程序的陣列和性質,同一臺計算機上需要多個競爭操作系統(並非所有應用程序始終在同一操作系統上可用)。因此,VMM(虛擬機監視器或虛擬機管理程序)軟體變得必要,使系統更加複雜。一旦設置完成,VM實施就是重量級且不靈活。畢竟,為了運行應用程序,每個VM不僅必須包含操作系統本身的完整空間,還包括整個堆棧(操作系統,設備驅動程序,應用程序等)的所有庫和依賴項(Libs / Bins)。每個VM還必須模擬底層硬體的虛擬版本,因此不會直接調用IRQ(中斷請求),而是通過軟體代理來進一步阻礙性能。將此結合在一個真實世界的雲場景中,適用於大型或嚴格的業務目標要求的組織,所有這些最終轉化為實施流失,軟體複雜性,有限的可移植性,浪費的CPU週期和GB,以及硬體和人工的顯著更多美元從IT管理的角度來看。虛擬化既不便宜也不易實現。所有這些最終轉化為實施流失,軟體複雜性,有限的可移植性,浪費的CPU週期和GB,以及從IT管理角度來看,硬體和勞動力的顯著增加。虛擬化既不便宜也不易實現。所有這些最終轉化為實施流失,軟體複雜性,有限的可移植性,浪費的CPU週期和GB,以及從IT管理角度來看,硬體和勞動力的顯著增加。虛擬化既不便宜也不易實現。

配圖來源自網路

新的虛擬化方法

虛擬化3.0,即容器化時代。容器並不是一個全新的解決方案,因為這個概念已經存在了大約二十年。但是,在2004 - 2008年,Solaris引入了Solaris Zones並創建了獨立的應用程序環境,而Google則突破性地使用到了生成環境業務。與此同時,Linux發布了內核編譯2.6.24,後來成熟為LXC(Linux容器)。到了2013年及以後:容器形式的虛擬化,而不僅僅是虛擬機,不斷瘦到認可,並且有充分的理由。Kubernetes項目最初由谷歌設計和創建,谷歌於2014年開源。它於2015年發布了1.0版,並與Linux基金會合作組建雲原生計算基金會負責Kubernetes項目。

容器對於VM來說就像是芭蕾舞者相比於相撲選手,你很快就會明白為什麼。如果您的組織需要非常特定的虛擬化實施形式,這可能是由於多種原因(即運行複雜的軟體環境),那麼VM可能仍然是您的可行性途徑。對於其他人來說,容器至少在初期是最佳選擇。關鍵的區別在於容器全部運行在同一主機操作系統上,因此無需像每個虛擬機那樣複製操作系統。此外,容器通過直接API調用來利用主機操作系統的Libs和Bins,並且僅在其本地模塊中封裝一些額外的Libs和Bins,這些Libs和Bins特定於它們運行的??應用程序。出於這些原因,容器同樣輕巧且便攜,並且遠遠少於您可能運行的任何VM的資源。

這些節省下來的CPU週期和GB可用於兩種不同的方案:運行具有更高系統性能和響應時間的同一組容器應用程序,或通過運行更多容器應用程序來更好地利用底層硬體。如果您需要在軟體故障或安全更新後重新啟動容器應用程序,那麼您只需幾秒鐘 - 與在相同方案中引導VM相差甚遠,更不用說混合VM配置了。容器式虛擬化當然伴隨著它自己的極少 - 可以說是不那麼極端的缺點。

首先,容器應該是輕便的,便攜的並且易於管理。但是,如果您的業務依賴於複雜的應用程序,則需要運行多個容器。這將增加多樣性,並最終導致性能瓶頸,因為容器爭奪對系統資源(操作系統和硬體)的受保護訪問。其次,容器默認不如VM安全。這是因為它們提供了進程級別的安全性,而不是操作系統級別的安全性,只有一個操作系統在運行,即主機操作系統(主機操作系統的任何安全漏洞自動成為容器的威脅)。在安全性至關重要的情況下,附加軟體是合理的。第三,因為在任何一個物理系統上運行整個容器集合併優化全面SaaS(軟體即服務)解決方案的交付是完全合理的,所以實時管理它們不再是手動任務。實際上,它需要類似於VMM的軟體,例如管理多個VM所需的軟體。

配圖來源自網路

Kubernetes是什麼和不是什麼

在這個階段,您可能會認為Kubernetes(簡稱K8S)是一個允許對容器化應用程序進行分組的軟體平臺,但事實並非如此。Kubernetes不是關於對容器和相應應用程序進行分組,而是在它們在提供此功能的平臺(例如Docker(最受歡迎的),Mesos,CoreOS rkt和LXC)中設置(和分組)之後編排它們。一旦這些設置在一對多關係類型的原理圖中(即Docker配置了多個容器和羣集形式的應用程序),像Kubernetes這樣的軟體就會出現在最前端來管理它,並使管理任務更少通過自動化的負擔。實質上,Kubernetes(容器管理器,CM)是VMM運行多個虛擬機的過程 - 一個軟體管理層將所有虛擬機固定在一起,並保持齒輪順利轉動。

Kubernetes就是協調和調度容器以便它們能夠以最佳方式運行,並在負載全天波動時隨時訪問系統資源。谷歌是該領域的專家,因為它在過去二十年中部署了大量(可能是最高)的伺服器和應用程序。Kubernetes的開發和設計受到Google Borg系統的高度影響,它是為管理大規模集羣而創建的。Kubernetes可以在內部部署或在雲中部署,使您能夠跨多個物理機運行容器應用程序,並維護一個故障安全監視層,用於重新啟動崩潰的容器。它還可以輕鬆推出包括回滾在內的更新,並根據各種性能指標自動擴展以關閉和啟動容器。最後但同樣重要的是,Kubernetes允許在一致的部署中運行容器化應用程序,從而通過第三方軟體(如Prometheus,Jaeger,EFK(Elasticsearch,Fluentd,Kibana)堆棧或cAdvisor)監控它們變得更加容易。Kubernetes和簡化的CM解決方案基本上是同義詞。

選擇Kubernetes的六大理由

開源的力量

在不斷擴大的容器應用領域,Kubernetes已發展成為事實上的行業標準。因此,您可以選擇多種服務提供商來幫助您在組織的IT基礎架構中實施它。如果出現任何問題,Kubernetes開發者的開放社區可以指望做正確的事情。更重要的是,Kubernetes並不是一個開源了就不再活躍的項目,而是一個全年四次大版本更新的項目。

成本效益

容器的複雜性和佔用空間都很輕,而且設置它們比設置VM要簡單得多。這使得Kubernetes成為管理容器化應用程序的非常靈活的平臺。Kubernetes配置可減少錯誤的CPU週期和GB的RAM,從而縮短響應時間,最終提高系統性能。並且由於Kubernetes的負載平衡引擎,它可以在需要時啟動,停止和優先處理給定的容器 - 所有這些都可以保持性能一致。

可移植性

由於其多功能性,Kubernetes可以在您的組織內本地設置和運行在大量底層操作系統上。此外,如果您決定在整個生命週期的部署過程中遷移到備用操作系統,您可以隨身攜帶現有工作負載,而無需重新設計應用程序或廢品並重新構建基礎架構。Kubernetes避免了供應商鎖定,您的設置將繼續標準化並隨著時間的推移而簡化。

可擴展性

Kubernetes從頭開始設計為模塊化容器管理工具(CM),您可以自由選擇混合和匹配組件,實現真正的交鑰匙和定製實施。使用Kubernetes,您可以決定要運行的操作系統,應用運行時(Libs / Bins),文件系統,處理器架構甚至雲平臺。應用程序開發人員還可以直接調用Kubernetes API(應用程序編程介面),並加強應用程序的集成,以提高性能和可管理性。

自愈

軟體將不時遭受奇怪的故障,導致功能癱瘓和系統失敗。然而,這些陷阱將使您成為可靠性困境的犧牲品。但不要害怕:Kubernetes能夠定期監控您的完整基礎設施(容器,節點,Pod,網路,硬體,操作系統)。如果軟體錯誤導致系統的某些部分崩潰,Kubernetes將立即重啟應用程序。如果錯誤是由於硬體故障引起的,Kubernetes將檢測到它並將應用程序分佈在多個pod中。在這兩種情況下,應用程序停機時間都減少到最低限度。

雲服務

因為Kubernetes很受歡迎,你不需要自己處理內部實現,也不需要在硬體上花錢。事實上,您可以通過註冊託管的Kubernetes解決方案來外包流程:PaaS(平臺即服務)或IaaS(基礎架構即服務)。您的角色是專註於通過您的應用提供最佳用戶體驗,將負載平衡和雲服務留給Kubernetes。

摘要

如您所見,順利部署和運行應用程序可能是一項嚴峻的挑戰。值得慶幸的是,Kubernetes等解決方案使得容器化應用程序的部署,擴展和管理變得更加容易。基於投入Kubernetes的其他優勢,為什麼這麼多企業選擇它並不奇怪。


推薦閱讀:
相關文章