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