1. 程式人生 > 其它 >Kubernetes學習筆記

Kubernetes學習筆記

簡介

Kubernetes是一個開源的,用於管理雲平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單並且高效,Kubernetes提供了應用部署,規劃,更新,維護的一種機制。

核心特點:自主管理容器

所有容器均在Pod中執行,一個Pod可以承載一個或者多個相關的容器。

當容器建立失敗時,容器會被node agent:kubelet自動重啟。

Kubernetes提供服務的抽象,提供固定的IP地址和DNS名稱,與一系列Pod進行動態關聯,當一個Pod容器訪問該地址的時候,會轉發到本地代理,每臺機器上均有一個本地代理,Kube Proxy時刻追蹤Pod的動態變化。

設計架構:

Kubernetes Master:

1.Api Server:提供資源操作唯一入口,提供認證、授權、訪問控制,Api註冊和發現等機制。

2.scheduler:負責資源的排程,按照預定的策略講Pod排程到對應的機器上。

3.Controller manager:負責維護叢集的狀態,如故障檢測,自動擴充套件,滾動更新等。

4.etcd:儲存了整個叢集的狀態。

Kubernetes Node:

1.Kubelet:負責維護容器的生命週期。

2.Kube-Proxy:負責為Service提供cluster內部的服務發現和負載均衡。

Kubernetes的設計理念

API設計原則

1.所有API應是宣告式的,宣告式操作更易於被使用者使用,可以使系統向用戶隱藏實現的細節,同時保留了系統未來持續優化的可能性。

2.API物件是彼此互補且可組合的,高內聚,低耦合。

3.高層API以操作意圖為基礎設計,高層設計一定是從業務出發,因此,針對k8s的高層API設計,一定是以k8s的業務為基礎出發,也就是以系統排程管理容器的操作意圖出發。

4.底層API根據高層API的控制需要設計,實現底層API的目的是為了被高層API使用,也要以需求為基礎。

5.儘量避免簡單封裝,不要有在外部API無法顯式知道的內部隱藏機制,內部隱藏機制非常不利於系統維護。

6.API操作複雜度與物件數量成正比,從系統性能角度考慮,要保證整個系統隨著系統規模的擴大,效能不會迅速變慢到無法使用。

7.API物件狀態不能依賴於網路連線狀態,要保證API物件狀態能應對網路狀態的不穩定。

8.儘量避免讓操作機制依賴於全域性狀態,因為在分散式系統中要實現全域性狀態的同步是非常困難的。

每個API物件有三大類屬性:元資料metadata,規範spec,狀態status

每個物件至少有3個元資料:namespace,name,uid,此外還有各種各樣的標籤labels來匹配不同的物件。

Pod

Pod是在k8s叢集當中執行部署應用或服務的最小單元,它是可以支援多容器的。Pod的設計理念是支援多個容器在一個Pod中共享網路地址和檔案系統,可以通過程序間通訊和檔案共享這種簡單高效的方式組合完成服務。

複製控制器(Replication Controller,RS)

監控執行中的Pod來保證叢集中執行指定數目的Pod副本。

副本集(Replica Set,RS)

RS是新一代RC,同樣提供高可用能力,區別在於RS能支援更多種類的匹配模式,副本集物件一般不單獨使用,而是作為Deployment的理想狀態使用。

部署

部署表示使用者對叢集的一次更新操作,包括建立、更新、刪除、滾動升級等。

服務(Service)

在K8s叢集中,客戶端需要訪問的服務就是Service物件,每個Service物件會對應一個叢集有效的虛擬ip,叢集內部通過虛擬ip訪問服務。在K8s叢集中微服務的負載均衡是通過kube-proxy來完成的,是一個分散式代理伺服器。

任務(Job)

Job是K8s用來控制批處理型任務的API物件。

後臺支撐服務集(DaemonSet)

後臺支撐型服務的核心關注點在K8s叢集中的節點(物理機或虛擬機器),要保證每個節點上都有一個此類Pod執行。

有狀態服務集(PetSet)

對於RC和RS中的Pod,一般不掛載儲存或者掛載共享儲存,儲存的是所有Pod共享的狀態,對於PetSet中的Pod,每個Pod掛載自己獨立的儲存,如果一個Pod出現故障,從其他節點啟動一個同樣名字的Pod,要掛載上原來Pod的儲存繼續以它的狀態提供服務。

節點(Node)

K8s叢集中的Node也就等同於Mesos叢集中的Slave節點,是所有Pod執行所在的工作主機,可以是物理機也可以是虛擬機器。不論是物理機還是虛擬機器,工作主機的統一特徵是上面要執行kubelet管理節點上執行的容器。

名字空間(Namespace)

名字空間為K8s叢集提供虛擬的隔離作用,K8s叢集初始有兩個名字空間,分別是預設名字空間default和系統名字空間kube-system,除此以外,管理員可以可以建立新的名字空間滿足需要。

K8s系統最核心的兩個設計理念:一個是容錯性,一個是易擴充套件性。容錯性實際是保證K8s系統穩定性和安全性的基礎,易擴充套件性是保證K8s對變更友好,可以快速迭代增加新功能的基礎。