人們可能已經注意到,很多企業現在都在采用Kubernetes,例如AWS、IBM/Red Hat、Microsoft、VMware等。甚至擁有自己的容器編排程序Docker Swarm的Docker現在也支持Kubernetes。那么為什么每個人都這么做?
隨著越來越多的企業繼續將應用程序從服務器和虛擬機遷移到容器,通常都會采用Kubernetes。
在以往,企業在服務器硬件上運行服務器程序。隨后出現了虛擬機(VM),可以在一個平臺上運行多個操作系統和應用程序。這使企業能夠在一臺服務器上運行十次或更多的服務器實例。這反過來又使企業能夠在這些虛擬機之上按需運行,這既節省了成本,又帶來了很大的靈活性。
企業可以在單個服務器上運行更多服務器程序,這將帶來更多的成本節省和靈活性。這正是容器所提供的優勢。
人們將會看到虛擬機管理程序(例如Hyper-V、KVM和Xen)通過仿真虛擬硬件而起作用。這使得它們在系統需求方面供過于求,但是,容器使用共享的操作系統。這意味著它們比管理程序效率更高。
容器并不是虛擬化硬件,而是位于單個Linux實例之上。這意味著企業可以在小容器中運行應用程序。實際上,用戶可以運行的服務器應用程序實例數是在相同硬件上的虛擬化的四到十倍。
容器還適合進行持續集成(CI)/持續部署/(CD)。這是一種Devops方法,旨在鼓勵開發人員盡早且經常地將其代碼集成到共享存儲庫中,然后快速有效地部署代碼。
最后,容器使開發人員能夠輕松地打包、傳輸和運行任何應用程序,這些應用程序輕巧、可遷移、自給自足,幾乎可以在任何地方運行。
那么有一個問題,就是如何管理所有這些容器?使用容器,單個服務器可能有數十個工作負載開始、工作和結束。這就是Kubernetes發揮作用的地方。
Kubernetes的發展歷史
Kubernetes的起源始于谷歌公司的Borg。它是用于谷歌大規模工作管理的大型內部集群管理系統。此后不久,谷歌公司在2014年發布了第一版Kubernetes。這個開源的容器編排程序可以將容器部署到一組機器中,提供運行狀況管理和復制功能,并使容器易于相互連接以及與其他程序連接。
因此,Kubernetes具有兩個主要優勢。得益于其Borg血統,它已經通過了全球最大的容器用戶谷歌公司的測試。而且,通過使其開源,Kubernetes擺脫了成為谷歌公司特定程序的負擔。尤其是在2018年8月,谷歌公司將Kubernetes項目的云計算資源移交給了新家,即獨立的云原生計算平臺(CNCF)時。
自從CNCF接管Kubernetes以來,它已經從一個由谷歌公司和Red Hat公司主導的項目變成了一個擁有數千個貢獻者的項目。在此期間,幾乎消除了所有競爭。根據研究機構Red Monk公司的說法,目前仍然存在競爭者,但即使到2017年,名列《財富》雜志100強的50%以上的公司使用Kubernetes作為其容器編排平臺。
Kubernetes可以做些什么
谷歌公司首席工程師兼Kubernetes首席架構師Brian Grant表示,“Kubernetes是一個可遷移的、可擴展的開源平臺,用于管理容器化的工作負載和服務,同時促進聲明性配置和自動化。”那么這意味著什么呢?
Kubernetes運行在Linux之上,可與Pod、一個或多個容器的組一起部署到單個節點,物理服務器或虛擬機。其命令通常通過Kubernetes的命令行配置工具kubectl發送,它定義了工作的元數據和規范。這些描述由以JavaScript對象表示法(JSON)或YAML編寫的聲明性語句組成。這些通過Kubernetes API描述了用戶需要運行的應用程序,它們需要哪些容器映像以及創建集群所需狀態所需的網絡和存儲資源。
Kubernetes主站將接受命令,找出如何使用可用資源以最佳方式運行它們,并通過Pod生命周期事件生成器(PLEG)將用戶的行進命令中繼到Pod。用戶無需擔心確切的細節。
Kubernetes會找出最適合該任務的節點。Kubernetes分配資源并分配完成工作所需的Pod。因此,Kubernetes可以自動設置、監視和管理容器。
具體來說,Kubernetes使用戶能夠完成以下任務:
•控制和自動化應用程序部署和更新。使用它,可以描述已部署容器的所需狀態。然后,Kubernetes以受控的速率將容器化應用程序的實際狀態更改為所需狀態。例如,用戶可以創建新容器、刪除現有容器或更新容器的軟件內容。
•自動化容器配置。用戶為Kubernetes提供了一個節點集群,可用于運行容器化任務。然后,告訴Kubernetes每個容器需要多少CPU和內存(RAM)。然后,Kubernetes會自動將容器安裝到節點上,以充分利用可用資源。簡而言之,它可以動態擴展容器化應用程序及其資源。
•存儲編排。Kubernetes使用戶能夠自動掛載選擇的存儲系統,包括本地存儲、公共云提供商或存儲區域網絡。
•跨節點編排容器。容器通過使用其域名服務器(DNS)ID或IP地址公開。如果容器流量很高,Kubernetes還可以負載均衡并分配網絡流量以保持穩定性。
•自我修復。Kubernetes重新啟動失敗的容器,替換容器,關閉不響應用戶定義的運行狀況檢查的容器,并且在容器準備好之前不將其通告給客戶端。
•安全管理。Kubernetes允許用戶存儲和管理身份驗證數據,例如密碼、OAuth令牌和SSH密鑰。
綜合所有這些,Kubernetes具有三大優勢。
首先是穩定性,Kubernetes管理用戶的容器。如果虛擬機、服務器甚至集群出現故障,Kubernetes將自動啟動更多容器來承載負載。
然后是連續性。 Kubernetes使用戶可以修補應用程序或將其完全更改而不會影響其操作。新的容器是在線購買的,而舊容器將會過期,并且它們提供的服務將繼續運行。IT穩定性過去完全取決于服務器的正常運行時間。現在,有了容器和Kubernetes,一切都與服務正常運行時間有關。
另一個相關的優點是彈性。Kubernetes自動維護活動容器。這些稱為副本集。當Pod不能隨身帶走其所有容器化應用程序時,副本集具有所需的容器,該容器已經啟動并可以運行以接管負載。
簡而言之,當以前的方法失敗或需要大量停機時,基于Kubernetes的IT結構將與最新軟件一起運行。
Kubernetes不能做什么
Kubernetes并不是萬能的,不能什么都做。
例如,Kubernetes不是平臺即服務(PaaS)系統。Kubernetes提供了類似于PaaS的服務的構建塊,但是與Cloud Foundry不同,它沒有提供構建云原生應用程序所需的編程工具。而且,盡管當然可以在Kubernetes上構建和使用持續集成(CI)/持續部署/(CD)系統,但它并不是固有的持續集成(CI)/持續部署/(CD)。另外,作為一種管理容器的方法,它不附帶應用程序級別的服務,例如中間件或數據庫。
正因為如此,Kubernetes有著大量的發行版,其中包括針對Kubernetes的Amazon Elastic Container Service(EKS)、Azure Kubernetes Service(AKS)、Google Kubernetes Engine(GKE)、IBM Cloud Kubernetes Service、Red Hat的OpenShift、Pivotal Container Service(PKS)和VMware Kubernetes引擎。除了提供在特定云上部署Kubernetes所需的工具外,它們每個都有其自己的特殊附加功能。
為什么Kubernetes是未來的選擇
隨著繼續將應用程序從服務器和虛擬機遷移到容器,Kubernetes是不可避免的。即使使用諸如Ansible、Puppet或Salt之類的DevOps工具,對于系統管理員來說,根本也沒有實際的方法來管理數百或數千個臨時容器。它需要一個專用工具,而該工具就是Kubernetes。過去和現在都有其他容器編排工具。對于某些特殊用途,它們可能更適合一些企業。不過,一般來說,Kubernetes將是大多數企業的默認容器管理選擇。
由于它可以跨多個平臺運行,即使它們由競爭對手的云計算業務運行,Kubernetes也正成為混合云的流行選擇。這并不容易,但是許多Kubernetes發行商都在致力于提供易于部署的、基于Kubernetes的混合云。這些將使用戶能夠執行諸如運行混合云之類的事情,該過程可將后端數據保留在私有云中,而將公共云用作前端接口。
綜上所述,如果還沒有運行Kubernetes,那么將會很快就會擁有。就像Linux從根本上改變了服務器操作系統的空間,虛擬機導致云計算的興起一樣,Kubernetes將引領用戶進行基于容器的分布式計算。
版權聲明:本文為企業網D1Net編譯,轉載需注明出處為:企業網D1Net,如果不注明出處,企業網D1Net將保留追究其法律責任的權利。