為什麼Kubernetes對企業的業務至關重要

  • 2019 年 12 月 4 日
  • 筆記

如果將伺服器應用程式通過容器移動到雲平台中,則需要進行一些容器編排,Kubernetes在此將發揮重要作用。

人們可能已經注意到,很多企業現在都在採用Kubernetes,例如AWS、IBM/Red Hat、Microsoft、VMware等。甚至擁有自己的容器編排程式Docker Swarm的Docker現在也支援Kubernetes。那麼為什麼每個人都這麼做?

隨著越來越多的企業繼續將應用程式從伺服器和虛擬機遷移到容器,通常都會採用Kubernetes。

在以往,企業在伺服器硬體上運行伺服器程式。隨後出現了虛擬機(VM),可以在一個平台上運行多個作業系統和應用程式。這使企業能夠在一台伺服器上運行十次或更多的伺服器實例。這反過來又使企業能夠在這些虛擬機之上按需運行,這既節省了成本,又帶來了很大的靈活性。

企業可以在單個伺服器上運行更多伺服器程式,這將帶來更多的成本節省和靈活性。這正是容器所提供的優勢。

人們將會看到虛擬機管理程式(例如Hyper-V、KVM和Xen)通過模擬虛擬硬體而起作用。這使得它們在系統需求方面供過於求,但是,容器使用共享的作業系統。這意味著它們比管理程式效率更高。

容器並不是虛擬化硬體,而是位於單個Linux實例之上。這意味著企業可以在小容器中運行應用程式。實際上,用戶可以運行的伺服器應用程式實例數是在相同硬體上的虛擬化的四到十倍。

容器還適合進行持續集成(CI)/持續部署/(CD)。這是一種Devops方法,旨在鼓勵開發人員儘早且經常地將其程式碼集成到共享存儲庫中,然後快速有效地部署程式碼。

最後,容器使開發人員能夠輕鬆地打包、傳輸和運行任何應用程式,這些應用程式輕巧、可遷移、自給自足,幾乎可以在任何地方運行。

那麼有一個問題,就是如何管理所有這些容器?使用容器,單個伺服器可能有數十個工作負載開始、工作和結束。這就是Kubernetes發揮作用的地方。

Kubernetes的發展歷史

Kubernetes的起源始於Google公司的Borg。它是用於Google大規模工作管理的大型內部集群管理系統。此後不久,Google公司在2014年發布了第一版Kubernetes。這個開源的容器編排程式可以將容器部署到一組機器中,提供運行狀況管理和複製功能,並使容器易於相互連接以及與其他程式連接。

因此,Kubernetes具有兩個主要優勢。得益於其Borg血統,它已經通過了全球最大的容器用戶Google公司的測試。而且,通過使其開源,Kubernetes擺脫了成為Google公司特定程式的負擔。尤其是在2018年8月,Google公司將Kubernetes項目的雲計算資源移交給了新家,即獨立的雲原生計算平台(CNCF)時。

自從CNCF接管Kubernetes以來,它已經從一個由Google公司和Red Hat公司主導的項目變成了一個擁有數千個貢獻者的項目。在此期間,幾乎消除了所有競爭。根據研究機構Red Monk公司的說法,目前仍然存在競爭者,但即使到2017年,名列《財富》雜誌100強的50%以上的公司使用Kubernetes作為其容器編排平台。

Kubernetes可以做些什麼

Google公司首席工程師兼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將保留追究其法律責任的權利。