分類: IT快速看

Kubernetes(K8s)介紹

Kubernetes(常簡稱為K8s)是用於自動部署、擴展和管理「容器化(containerized)應用程式」的開源系統。該系統由Google設計並捐贈給Cloud Native Computing Foundation(今屬Linux基金會)來使用。它旨在提供「跨主機集群的自動部署、擴展以及運行應用程式容器的平台」。 它支持一系列容器工具, 包括Docker等。CNCF於2017年宣布首批Kubernetes認證服務提供商(KCSPs),包含IBM、華為、MIRANTIS等服務商。

來源:wiki(https://zh.wikipedia.org/wiki/Kubernetes)

 

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

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

Rancher Labs在其Rancher容器管理平台中包含了Kubernetes的發布版。Kubernetes也在很多其他公司的產品中被使用,例如Red Hat的OpenShift,CoreOS的Tectonic, IBM的IBM私有雲產品,精靈雲的EcOS,以及 VMware的PKS等等。

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

Pod
Kubernetes的基本調度單元稱為「pod」。通過該種抽象類別可以把更高級別的抽象內容增加到容器化組件。一個pod一般包含一個或多個容器,這樣可以保證它們一直位於主機上,並且可以共享資源。Kubernetes中的每個pod都被分配一個唯一的(在集群內的)IP位址這樣就可以允許應用程式使用同一埠,而避免了發生衝突的問題。 Pod可以定義一個卷,例如本地磁碟目錄或網絡磁碟,並將其暴露在pod中的一個容器之中。pod可以通過Kubernetes API手動管理,也可以委託給控制器來實現自動管理。

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

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

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

tier=back-end AND release_track=canary

控制器
控制器是通過管理一組pod來實現來將實際集群狀態轉移到所需集群狀態的對帳循環機制。一種控制器指的是一組具有相同特徵的「複製控制器」,控制器通過在集群中運行指定數量的pod副本來處理複製和縮放。在基礎節點出現故障的情況下,它還可以用於處理創建替換pod。其它控制器也是核心Kubernetes系統的一部分,包括「DaemonSet控制器」為每台機器(或機器的一些子集)上運行的單個pod,和用於運行pod的「作業控制器」。控制器管理的pod組由作為控制器定義的部分的標籤選擇器來確定。

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

建構

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

Kubernetes Master是集群的主要控制單元,其用於管理其工作負載並指導整個系統的通信。Kubernetes控制平面由各自的進程組成,每個組件都可以在單個主節點上運行,也可以在支持high-availability clusters的多個主節點上運行。是Kubernetes控制平面的各種組件如下:

etcd
etcd 是由CoreOS開發,用於可靠地存儲集群的配置數據的一種持久性,輕量型的,分布式的鍵-值數據存儲組件。該組件可表示在任何給定時間點處的集群的整體狀態。其他組件在注意到存儲的變化之後,會變成相應的狀態。

API伺服器
API伺服器是一個關鍵組件 並使用 Kubernetes API 和 JSON over HTTP來提供了Kubernetes的內部和外部接口。API伺服器處理和驗證 REST請求並更新 API 對象的狀態etcd,從而允許客戶端在Worker節點之間配置工作負載和容器。

調度器
T調度程序是可插拔式組件,其基於資源可用性來選擇未調度的pod(由調度程序管理的基本實體)應該運行哪個節點。調度程序跟蹤每個節點上的資源利用率,以確保工作負載不會超過可用資源。為此,調度程序必須知道資源需求,資源可用性以及各種其他用戶提供的約束和策略指令,例如服務質量,親和力/反關聯性要求,數據位置等。實質上,調度程序的作用是將資源「供應」與工作負載「需求」相匹配以維持系統的穩定和可靠。

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

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

Kubelet
Kubelet負責每個節點的運行狀態(即確保節點上的所有容器都正常運行)。它按照控制面板的指示來處理啟動,停止和維護應用程式容器(按組織到pod中)。

Kubelet會監視pod的狀態,如果不處於所需狀態,則pod將被重新部署到同一個節點。節點狀態每隔幾秒就會傳遞消息至中繼主機。主控器檢測到節點故障後,複製控制器將觀察此狀態更改,並在其他健康節點上啟動pod。

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

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

cAdvisor
cAdvisor 是監視和收集例如每個節點上的容器的CPU,內存,文件和網絡使用情況等的資源使用情況和性能指標的代理組件。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *