K8S入門之基本概念

參考書籍:《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那樣嚴格的命名規則,是用戶任意定義的“附加”信息,以便於外部工具進行查找。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章