k8s學習

k8s簡介

在學習k8s以前,相信你們和我同樣,確定都學習和使用過docker容器,而且對容器技術有了一個基本的認識。引用張磊老師的總結:其實一個「容器」,其實是一個由Linux NameSpace、linux Cgroups和rootfs三種技術構建出來的進程隔離環境。linux

而k8s又是什麼呢,官方給出的定義是:k8s是一個開源的容器集羣管理系系統,能夠實現容器集羣的自動化部署、自動化擴容和維護等功能。說白了,咱們是用k8s是爲了管理docker集羣,即docker能夠當作k8s內部使用的低級別組件。可是k8s不單單支持docker,咱們在docker

後面學習k8s的架構時候能夠看到。api

和不少其餘組件先有工程實踐,後有方法論的法杖路徑不一樣。k8s的理論基礎則比工程實踐走的領先不少,這主要是得益於谷歌內部的Borg系統。k8s項目來源於Borg,能夠說是集結了Borg設計思想的精華,而且吸取了Borg系統中的經驗和教訓。網絡

在這面咱們要先記住一個概念,Pod。它是k8s中的最小編排單位,而不是容器。所以後面的架構設計等內容都是圍繞pod進行。架構

k8s的架構設計

k8s項目和它的原型項目Borg很相似,都是由Master和Node兩種類型的節點組成,其主要架構以下: 負載均衡

其中,Master節點由以下三個組件組成:分佈式

  • apiServer:提供了資源操做的惟一入口,並提供認證、受權,訪問控制、API註冊和發現等機制。而且將整個集羣的數據處理之後,持久化到etcd當中。學習

  • controller manager:負責維護集羣的狀態,好比狀態檢測、自動擴展和滾動更新等ui

  • scheduler:負責資源的調度,按照預約的調度策略將Pod調度到相應的機器上。雲計算

而在Node節點上,主要有如下一些核心組件:

  • kubelet:其是最核心的組件,主要負責維護容器的生命週期,同時也負責Volume(CVI)和網絡(CNI)的管理。

  • Container runtime:負責鏡像管理以及Pod和容器的真正運行(CRI)。

  • kube-proxy:負責爲Service提供cluster內部的服務發現和負載均衡。

k8s的設計理念

對於雲計算系統,系統API實際上處於系統設計的主導地位。在k8s中,系統沒支持一項新功能,引入一項新技術,必定會引入對應的API對象,支持對該功能的管理操做。

每一個API對象都有如下三個屬性:

  • 元數據(metadata):元數據是用來標識API對象的,每一個對象至少有3個元數據,namespace,name和uid

  • 規範(spec):規範描述了用戶指望k8s急羣衆的分佈式系統達到的理想狀態,例如用戶能夠設置指望的Pod的副本數爲3

  • 狀態(status):狀態描述了系統當前實際達到的狀態。

相關文章
相關標籤/搜索