Kubernetes

出自Local Chinese Wikipedia
imported>Cewbot2026年4月17日 (五) 12:52的修訂 規範{{Multiple issues}}模板: 創建包含3個維護模板的{{Multiple issues}}模板: Expert, Roughtranslation, Expand English)
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
跳至導覽 跳至搜尋
Kubernetes
File:Kubernetes logo without workmark.svg
首次釋出2014年6月7日,​12年前​(2014-06-07[1]
目前版本1.25.3[2](2022年10月13日,​3年前​(2022-10-13
程式語言Go
作業系統跨平台
類型叢集管理
特許條款Apache特許條款 2.0
網站kubernetes.io

Kubernetes(常簡稱為K8s[註 1])是用於自動部署、擴充和管理「容器化(containerized)應用程式」的開源系統。[3]該系統由Google設計並捐贈給Cloud Native Computing Foundation(今屬Linux基金會)來使用。

它旨在提供「跨主機叢集的自動部署、擴充以及執行應用程式容器的平台」。[4] 它支援一系列容器工具,包括Docker等。

歷史[編輯]

File:GoogleCloudKubernetes.jpg
Google Container Engine簡報

Kubernetes(在希臘語意為「舵手」或「駕駛員」)由Joe Beda、Brendan Burns和Craig McLuckie創立,[5]並由其他谷歌工程師,包括Brian Grant和Tim Hockin等進行加盟創作,並由谷歌在2014年首次對外宣佈 。[6] 該系統的開發和設計都深受谷歌的Borg系統[7][8]的影響,其許多頂級貢獻者之前也是Borg系統的開發者。在谷歌內部,Kubernetes的原始代號曾經是Seven,即星際迷航中的Borg(博格人)。[9]Kubernetes標識中舵輪有七個輪輻就是對該專案代號的致意。

Kubernetes v1.0於2015年7月21日釋出。[10] 隨着v1.0版本釋出,谷歌與Linux基金會合作組建了Cloud Native Computing Foundation(CNCF)[11]並將Kubernetes作為種子技術來提供。

Rancher Labs在其Rancher容器管理平台中包含了Kubernetes的釋出版。[12]Kubernetes也在很多其他公司的產品中被使用,例如Red HatOpenShift[13][14] CoreOS的Tectonic, IBM的IBM私有雲產品,[15],精靈雲的EcOS[16],KubeSphere[17],以及 VMware的PKS等等。

而現今資訊界常見的縮寫手法「K8s」則是將「ubernete」八個字母縮寫為「8」而來。

設計[編輯]

Kubernetes在設計結構上定義了一系列的構建模組,其目的是為了提供一個可以共同提供部署、維護和擴充應用程式的機制。組成Kubernetes的組件設計概念為鬆耦合和可延伸的,這樣可以使之滿足多種不同的工作負載。可延伸性在很大程度上由Kubernetes API提供,此API主要被作為擴充的內部組件以及Kubernetes上執行的容器來使用。[18]

pod[編輯]

Kubernetes的基本排程單元稱為「pod」。通過該種抽象類別可以把更進階別的抽象內容增加到容器化組件。一個pod一般包含一個或多個容器,pod可以保證這些容器執行在同一主機節點上。[18]Kubernetes中的每個pod都被分配一個唯一的(在叢集內的)IP位址這樣就可以允許應用程式使用同一埠,而避免了發生衝突的問題。[19] Pod可以定義儲存的卷,例如本地磁碟目錄或網絡磁碟,並將其暴露給pod中的某個容器。[20]。pod可以通過Kubernetes API手動管理,也可以委託給控制器來實現自動管理。[18]

標籤和選擇器[編輯]

Kubernetes使客戶端(用戶或內部組件)將稱為「標籤」(label)的鍵值對附加到系統中的任何API對象,如pod和節點。相應地,「標籤選擇器」(label selector)是通過匹配對象的標籤,來查詢對象的方法。[18]

標籤和選擇器是Kubernetes中的主要分組機制,用於確定操作適用的組件。[21]

例如,如果應用程式的Pods具有系統分層的標籤 tier (比如"front-end"、"back-end")和 release_track 標籤(比如"canary"、"production"),那麼對所有"back-end" 和 "canary" 節點的操作可以使用如下所示的標籤選擇器:[22]

tier=back-end AND release_track=canary

控制器[編輯]

控制器是將叢集的狀態轉移到所需叢集狀態的對帳循環機制[23]

舉例而言,ReplicaSet控制器,通過在叢集中執行指定數量的特定pod的副本,來實現對pod複製和縮放的管理。如果有節點出現故障,它還能夠在其他節點建立pod的副本以替代被故障所影響的原來的pod。[23]Kubernetes系統還包括其他控制器,包括「DaemonSet控制器」,能夠令所有機器(節點)或其中的一部分機器(節點)執行恰好1個pod;「Job控制器」會啟動特定任務所需的pod,這樣的pod在完成任務後會進入「完成」狀態。[24] 控制器通常使用標籤選擇器來確定其管理的pod組。[22]

服務[編輯]

Kubernetes服務本質是一組協同工作的pod,類同多層架構應用中的一層。構成服務的pod組通過標籤選擇器來定義。[18]Kubernetes通過給服務分配靜態IP位址和域名來提供服務發現機制,並且以輪循排程英語Round-robin DNS的方式將流量負載均衡到能與選擇器匹配的pod的IP位址的網絡連接上(即使是故障導致pod從一桌機器移動到另一桌機器)。[19] 預設情況下,服務任務會暴露在叢集中(例如,多個後端pod可能被分組成一個服務,前端pod的請求在它們之間負載平衡);除此以外,服務任務也可以暴露在叢集外部(例如,從客戶端訪問前端pod)。[25]

概念[編輯]

File:Kubernetes.png
Kubernetes architecture diagram

Kubernetes遵循主從式架構設計。Kubernetes的組件可以分為管理單個的 node 組件和控制平面部分的組件。[18][26]

控制平面[編輯]

Kubernetes Master是叢集的主要控制單元,其用於管理其工作負載並指導整個系統的通訊。Kubernetes控制平面由各自的行程群組成,每個組件都可以在單個主節點上執行,也可以在支援高可用性叢集[26]的多個主節點上執行。是Kubernetes控制平面的各種組件如下:

etcd[編輯]

etcd頁面存檔備份,存於互聯網檔案館 是由CoreOS開發,用於可靠地儲存叢集的組態數據的一種永續性,輕量型的,分散式的鍵-值數據儲存組件。該組件可表示在任何給定時間點處的叢集的整體狀態。其他組件在注意到儲存的變化之後,會變成相應的狀態。[26]

API伺服器[編輯]

API伺服器是一個關鍵組件 並使用 Kubernetes APIJSON over HTTP來提供了Kubernetes的內部和外部介面。[18][27] API伺服器處理和驗證 REST請求並更新 API 對象的狀態etcd頁面存檔備份,存於互聯網檔案館),從而允許客戶端在Worker節點之間組態工作負載和容器。

排程器[編輯]

排程器(scheduler)是可延伸組件,它基於剩餘可用的資源以及其他約束條件來選擇節點,決定pod到哪個節點上執行。排程器跟蹤每個節點上的資源利用率,以確保工作負載(workload)不會被分配到超過可用資源的量。為此,排程程其必須知道工作負載的資源需求、節點的可用資源量,以及用戶提供的各種約束和策略指令,例如服務質素,親和性/反親和性要求,數據本地性等。簡言之,排程器的作用是將資源的「供應」與工作負載的「需求」相匹配以維持系統的穩定和可靠。 [28]

控制器管理[編輯]

控制器管理器是核心Kubernetes控制器,其包括DaemonSet控制器和複製控制器等。該控制器可與API伺服器進行通訊以在需要時建立,更新和刪除他們管理的資源(pod,伺服器端點等)[27]

Kubernetes 節點[編輯]

Node也稱為Worker或Minion,是部署容器(工作負載)的單機器(或虛擬機器)。叢集中的每個節點都必須具備容器的執行環境(runtime) ——比如 Docker,以及下面提到的其他組件,以便與這些容器的網絡組態進行通訊。

Kubelet[編輯]

Kubelet負責每個節點的執行狀態(即確保節點上的所有容器都正常執行)。它按照控制面(control plane)的指示,以pod來容納容器,處理容器的啟動、停止和維護。[18][29]

Kubelet會監視pod的狀態,如果不處於所需狀態,則pod將被重新部署到同一個節點。而關於節點的狀態監控,節點狀態的訊息每隔幾秒就會被傳送到控制面的API伺服器。控制面上檢測到節點故障後,會有一個進階的控制器監控到節點狀態的變化,並在其他健康的節點上啟動原本執行在故障節點上的pod。[30]

容器[編輯]

容器從屬於pod。在執行應用、庫及其依賴的微服務中,容器是最低層級的。通過繫結一個外部IP,容器可以被外網訪問。

Kube代理[編輯]

Kube代理是網絡代理負載均衡的實現,支援服務抽象以及其他網絡操作。[18]根據傳入請求的IP和埠,該組件會將流量轉發到指定的合適的容器中。

cAdvisor[編輯]

cAdvisor 是監視和收集例如每個節點上的容器的CPU,主記憶體,檔案和網絡使用情況等的資源使用情況和效能指標的代理組件。

註釋[編輯]

  1. 因為開頭字母K與結尾字母s中間有8個其他字母

參見[編輯]

參考文獻[編輯]

  1. First GitHub commit for Kubernetes. github.com. 2014-06-07 [2017-06-17]. (原始內容存檔於2017-03-01). 
  2. GitHub Releases page. github.com. 2022-10-13 [2022-10-13]. (原始內容存檔於2017-03-01). 
  3. kubernetes/kubernetes. GitHub. [2017-03-28]. (原始內容存檔於2017-04-21) (English). 
  4. What is Kubernetes?. Kubernetes. [2017-03-31]. (原始內容存檔於2019-05-30). 
  5. Google Made Its Secret Blueprint Public to Boost Its Cloud. [2016-06-27]. (原始內容存檔於2016-07-01) (en-US). 
  6. Google Open Sources Its Secret Weapon in Cloud Computing. Wired. [24 September 2015]. (原始內容存檔於2015-09-10). 
  7. Abhishek Verma; Luis Pedrosa; Madhukar R. Korupolu; David Oppenheimer; Eric Tune; John Wilkes. Large-scale cluster management at Google with Borg. Proceedings of the European Conference on Computer Systems (EuroSys). April 21–24, 2015 [2017-06-17]. (原始內容存檔於2017-07-27). 
  8. Borg, Omega, and Kubernetes - ACM Queue. queue.acm.org. [2016-06-27]. (原始內容存檔於2016-07-09). 
  9. Early Stage Startup Heptio Aims to Make Kubernetes Friendly. [2016-12-06]. [失效連結]
  10. As Kubernetes Hits 1.0, Google Donates Technology To Newly Formed Cloud Native Computing Foundation. TechCrunch. [24 September 2015]. (原始內容存檔於2020-11-17). 
  11. Cloud Native Computing Foundation. [2017-06-17]. (原始內容存檔於2017-07-03). 
  12. Deploy and Manage Kubernetes Clusters | Rancher Labs. Rancher Labs. [2017-04-15]. (原始內容存檔於2017-04-16) (en-US). 
  13. OpenShift v3 Platform Combines Docker, Kubernetes. blog.openshift.com. [14 August 2014]. (原始內容存檔於2015-07-06). 
  14. Why Red Hat Chose Kubernetes for OpenShift. blog.openshift.com. [7 November 2016]. (原始內容存檔於2017-02-21). 
  15. IBM Spectrum Conductor for Containers. ibm.com/developerWorks. [2017-05-19]. (原始內容存檔於2021-01-28) (en-US). 
  16. Ghostcloud Enterprise Container OS. www.ghostcloud.cn. [2019-07-24]. (原始內容存檔於2020-11-27) (en-US). 
  17. Open Source Enterprise Kubernetes Platform | KubeSphere. kubesphere.io. [2022-02-21]. (原始內容存檔於2022-05-04) (en-us). 
  18. 18.0 18.1 18.2 18.3 18.4 18.5 18.6 18.7 18.8 An Introduction to Kubernetes. DigitalOcean. [24 September 2015]. (原始內容存檔於2015-10-01). 
  19. 19.0 19.1 Langemak, Jon. Kubernetes 101 – Networking. Das Blinken Lichten. 2015-02-11 [2015-11-02]. (原始內容存檔於2015-10-25). 
  20. Strachan, James. Kubernetes for Developers. Medium (publishing platform). 2015-05-21 [2015-11-02]. (原始內容存檔於2015-09-07). 
  21. Surana, Ramit. Containerizing Docker on Kubernetes. LinkedIn. 2015-09-16 [2015-11-02]. 
  22. 22.0 22.1 Intro: Docker and Kubernetes training - Day 2. Red Hat. 2015-10-20 [2015-11-02]. (原始內容存檔於2015-10-29). 
  23. 23.0 23.1 Overview of a Replication Controller. Documentation. CoreOS. [2015-11-02]. (原始內容存檔於2015-09-22). 
  24. Sanders, Jake. Kubernetes: Exciting Experimental Features. Livewyer. 2015-10-02 [2015-11-02]. (原始內容存檔於2015-10-20). 
  25. Langemak, Jon. Kubernetes 101 – External Access Into The Cluster. Das Blinken Lichten. 2015-02-15 [2015-11-02]. (原始內容存檔於2015-10-26). 
  26. 26.0 26.1 26.2 Kubernetes Infrastructure. OpenShift Community Documentation. OpenShift. [24 September 2015]. (原始內容存檔於2015-07-06). 
  27. 27.0 27.1 Marhubi, Kamal. Kubernetes from the ground up: API server. kamalmarhubi.com. 2015-09-26 [2015-11-02]. (原始內容存檔於2015-10-29). 
  28. The Three Pillars of Kubernetes Container Orchestration - Rancher Labs. rancher.com. 18 May 2017 [22 May 2017]. (原始內容存檔於2017-06-24). 
  29. Marhubi, Kamal. What [..] is a Kubelet?. kamalmarhubi.com. 2015-08-27 [2015-11-02]. (原始內容存檔於2015-11-13). 
  30. Kubernetes Security | Issues and Best Practices | Snyk. snyk.io. 26 July 2020 [2021-05-16] (en-US). 

外部連結[編輯]