參考書籍:《Kubernetes權威指南第2版從Docker到Kubernetes實踐全接觸》
內容來自:https://www.kubernetes.org.cn/docs
Kubernetes是一個高度自動化的資源控制系統,以“一切以服務爲中心”
作爲指導思想,也就是Service
,那麼由誰來提供Service呢?由Pod
對象,又通過Label
標籤來爲Service和Pod建立關聯;Pod運行在Node
上,那麼Pod又是怎麼產生的呢?可以直接定義創建,也可由RC(Replication Controller)
文件創建。
一、Master
是集羣控制節點,每個K8S集羣中都需要一個Master節點來負責整個集羣的管理和控制,它是整個集羣的“首腦”,運行着三個關鍵進程:
1.kube-apiserver
提供API,是所有資源增、刪、改、查等操作的唯一入口,也是集羣控制的入口進程
2.kube-controller-manager
所有資源對象的自動化控制中心,好比資源對象的“大總管”
3.kube-scheduler
負責資源調度(Pod)的進程,相當於公交公司的“調度室”
PS:通常Master節點還會啓動一個etcd Server
進程,用於保存K8S裏所有資源對象的數據
二、Node
除了Master,K8S集羣中的其他機器被稱爲Node節點,它是集羣中的工作負載節點,是真正幹活的。它有以下一組關鍵進程:
1.kubelet
負責Pod對應的容器的創建、啓停等任務,同時與Master節點密切協作,實現集羣管理的基本功能
2.kube-proxy
實現K8S Service的通信與負載均衡機制的重要組件
3.Docker Engine
負責本機的容器創建和管理工作
Node
節點可以在運行期間動態增加到K8S集羣中,默認情況下kubelet
會向Master
註冊自己,一旦Node被納入集羣管理範圍,kubelet進程就會定時向Master節點彙報自身的情況,如操作系統、Docker版本、機器的CPU和內存情況,以及之前有哪些Pod在運行。而當某個Node超時不上報信息,就會被Master判定爲“失聯”
,Node的狀態被標記爲不可用(Not Ready)
,隨後Master會觸發“工作負載大轉移”
的自動流程。
三、Pod
Pod是管理,創建,計劃的最小單元。
每個Pod都有一個特殊的“根容器”Pause容器
,Pod裏的多個業務容器共享Pause容器的IP和Volume,簡化了業務容器之間的通信問題和文件共享問題。
Kubernetes爲每個Pod分配了唯一的IP地址,稱之爲Pod IP
;採用虛擬二層網絡技術Flannel、Openvswitch
實現任意兩個Pod之間的TCP/IP直接通信。
Pod裏的服務進程通過Endpoint(PodIP+containerPort)
對外提供服務。
Pod可以對其能使用的服務器上的計算資源設置限額。以千分之一的CPU配額爲最小單元,用m表示。通常一個容器的CPU配額100~300m,即佔用0.1~0.3個CPU。CPU配額是一個絕對值,跟服務器CPU的個數無關。
內存的配額也是絕對值,用Mi表示。
Pod有兩種類型:
1.普通Pod
一旦創建,被放入到etcd
中存儲,隨後被調度到某個具體的Node上進行綁定,並被kubelet進程實例化成一組相關的Docker容器並啓動起來。當Pod中的某個容器停止時,K8s會自動檢測到這個問題並且重新啓動這個Pod(重啓Pod裏的所有容器),如果Pod所在的Node宕機,則會將這個Node上的所有Pod重新調度到其他節點上。
2.靜態Pod
不存放在K8s的etcd存儲裏,而是存放在某個具體的Node上的一個具體文件中,並且只在此Node上啓動運行。
四、Label
一對 key/value ,被關聯到對象上,比如Pod。標籤可以用來劃分特定組的對象(比如,所有女的),標籤可以在創建一個對象的時候直接給與,也可以在後期隨時修改,每一個對象可以擁有多個標籤,但是,key值必須是唯一的。
五、RC(Replication Controller)
Replication Controller 保證了在所有時間內,都有特定數量的Pod副本正在運行,如果太多了,Replication Controller就殺死幾個,如果太少了,Replication Controller會新建幾個,和直接創建的pod不同的是,Replication Controller會替換掉那些刪除的或者被終止的pod。
只創建一個pod,也要使用Replication Controller。Replication Controller 就像一個進程管理器,監管着不同node上的多個pod,而不是單單監控一個node上的pod。
六、Deployment
爲Pod和ReplicaSet提供了一個聲明式定義(declarative)方法,用來替代以前的ReplicationController來方便的管理應用。
七、Service
K8S中的Service就是我們經常提起的微服務架構中的一個“微服務”。
K8S爲每個Service都分配一個全局唯一的虛擬IP—Cluster IP,並通過DNS做了一個Name與Service的域名映射。
1.三個IP
a. Node IP
Node節點的IP地址。是物理網卡的IP地址,是一個真實存在的物理網絡。
b. Pod IP
它是Docker Engine根據docker0網橋的IP地址段進行分配的,不同Node裏面的Pod通過虛擬二層網絡進行互相通信。
c. Cluster IP
通過NodePort
的方式來訪問Service
八、Volume
是Pod中能夠被多個容器訪問的共享目錄。
Volume與Pod的生命週期相同,但與容器的生命週期不相關,當容器終止或者重啓時,Volume中的數據也不丟失。
九、Namespace
命名空間在很多情況下用於實現多租戶的資源隔離。
K8S集羣在啓動後會創建一個名爲“default”
的NameSpace。
十、Annotation
與Label類似,但沒有Label那樣嚴格的命名規則,是用戶任意定義的“附加”信息,以便於外部工具進行查找。