K8s介紹以及運行架構

Kubernetes(k8s)是Google開源的容器集群管理系統。在Docker技術的基礎上,為容器化的應用提供部署運行、資源調度、服務發現和動態伸縮等一系列完整功能,提高了大規模容器集群管理的便捷性。

Kubernetes最主要的設計思想是,從更宏觀的角度,以統一的方式來定義任務之間的各種關系,并且為將來支持更多種類的任務留足余地。

Kubernetes所擅長的,是按照用戶的意愿和整個系統的規則,完全自動化地處理好容器之間的各種關系。這種功能,就是我們經常聽到的一個概念:編排。所以說,Kubernetes的本質,是為用戶提供一個具有普遍意義的容器編排工具。

k8s中幾個重要概念

(1) Cluster,Cluster是 計算、存儲和網絡資源的集合,k8s利用這些資源運行各種基于容器的應用。

(2) Master, Master是cluster的大腦,他的主要職責是調度,即決定將應用放在那里運行。master運行linux操作系統,可以是物理機或者虛擬機。為了實現高可用,可以運行多個master。

(3) Node, Node的職責是運行容器應用。node由master管理,node負責監控并匯報容器的狀態,同時根據master的要求管理容器的生命周期。node運行在linux的操作系統上,可以是物理機或者是虛擬機。

(4),pod,pod是k8s的最小工作單元。每個pod可以包含一個或者多個容器。pod中的容器會作為一個整體被master調度到一個node上運行。 Pod有兩種使用方式,運行單一容器和運行多個容器, 運行單一容器是Kubernetes 最常見的模型,即便是只有一個容器,Kubernetes 管理的也是Pod 而不是直接管理容器。而pod中運行多個容器的話,哪些容器應該放到一個Pod中?答案是:這些容器聯系必須非常緊密,而且需要直接共享資源。

(5)controller, k8s不會直接創建pod,而是通過controller來管理pod的。controller中定義了pod的部署特性,比如有幾個副本,在什么樣的node上運行等。為了滿足不同的業務場景,k8s提供了多種controller,包括Replication Controller(RC)、Replica Set(RS)、Deployment 、daemonset、statefulset、job等。

RC是K8s集群中最早的保證Pod高可用的API對象,通過監控運行中的Pod來保證集群中運行指定數目的Pod副本。指定的數目可以是多個也可以是1個;少于指定數目,RC就會啟動運行新的Pod副本;多于指定數目,RC就會殺死多余的Pod副本。即使在指定數目為1的情況下,通過RC運行Pod也比直接運行Pod更明智,因為RC也可以發揮它高可用的能力,保證永遠有1個Pod在運行。

(6)Replica Set (RS)

RS是新一代RC,提供同樣的高可用能力,區別主要在于RS后來居上,能支持更多種類的匹配模式。RS對象一般不單獨使用,而是作為Deployment的理想狀態參數使用。使用deployment時會自動創建Replica Set ,也就是說deployment是通過Replica.Set來管理pod的多個副本的,我們通常不需要直接使用Replica Set 。

(7) deployment(部署)

Deployment表示用戶對K8s集群的一次更新操作,它是一個比RS應用模式更廣的API對象,可以是創建一個新的服務,更新一個新的服務,也可以是滾動升級一個服務。以K8s的發展方向,未來對所有長期伺服型的的業務的管理,都會通過Deployment來管理。

(8) daemonset(后臺支撐型服務)

長期伺服型和批處理型服務的核心在業務應用,可能有些節點運行多個同類業務的Pod,有些節點上又沒有這類Pod運行;而后臺支撐型服務的核心關注點在K8s集群中的節點(物理機或虛擬機),要保證每個節點上都有一個此類Pod運行。節點可能是所有集群節點選定的一些特定節點。典型的后臺支撐型服務包括,存儲,日志和監控等在每個節點上支持K8s集群運行的服務。

(9) statefuleset

能夠保證pod的每個副本在整個生命周期中名稱是不變的,而其他controller不提供這個功能。當某個pod發生故障需要刪除并重新啟動時,pod的名稱不會發生變化,同時statefulset會保證副本按照固定的順序啟動、更新或者刪除。、

(10) job 用于運行結束就刪除的應用,而其他controller中的pod通常是長期持續運行的。

(11) service, deployment可以部署多個副本,每個pod 都有自己的IP,外界如何訪問這些副本那?答案是service。

k8s的service定義了外界訪問一組特定pod的方式。service有自己的IP和端口,service為pod提供了負載均衡。

k8s運行容器pod與訪問容器這兩項任務分別由controller和service執行。

(12)、namespace

可以將一個物理的cluster邏輯上劃分成多個虛擬cluster,每個cluster就是一個namespace。不同的namespace里的資源是完全隔離的。Kubernetes 默認創建了兩個

Kubernetes 默認創建了兩個,Namespace。default -- 創建資源時如果不指定,將被放到這個

Namespace 中。kube-system:Kubernetes 自己創建的系統資源將放到這個Namespace 中


1、k8s中master的組成

(1) API, Server(kube-apiserver),API Server是k8s的前端接口,各種客戶端工具以及k8s其他組件可以通過它管理集群的各種資源。

(2) Scheduler(kube-scheduler),scheduer負責決定將pod放在哪個node上運行。另外scheduler在調度時會充分考慮集群的架構,當前各個節點的負載,以及應用對高可用、性能、數據親和性的需求。

(3) Controller,Manager(kube-controller-manager),負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等。Controller

Manager 由多種 controller組成,包括 replication controller、endpoints,controller、namespace,controller、serviceaccounts controller 等。

不同的 controller管理不同的資源。例如 replication controller 管理 Deployment、StatefulSet、DaemonSet 的生命周期,namespace controller 管理 Namespace資源。

(4)etcd

負責保存k8s集群的配置信息和各種資源的狀態信息,K8S中所有的服務節點的信息數據、配置數據都是存儲在ETCD中,當數據發生變化時,etcd會快速的通知k8s相關組件。

(5)pod網絡(flannel )

pod要能夠相互通信,k8s集群必須掌握pod網絡,flannel是其中一個可選的方案。


k8s中node的組成

(1)kubelet,? 是node的agent,當scheduler去確定在某個node上運行pod后,會將pod的具體配置信息發送給該節點的kubelet,kubelet會根據這些信息創建和運行容器,并向master報告運行狀態。

(2)kube-proxy, service 在邏輯上代表了后端的多個 Pod,外界通過service 訪問 Pod。service接收到的請求是如何轉發到 Pod 的呢?這就是kube-proxy要完成的工作。proxy是配合service實現從pod到service, 以及從外部的node? port到service的訪問。每個 Node都會運行 kube-proxy 服務,它負責將訪問 service 的 TCP/UPD,數據流轉發到后端的容器。如果有多個副本,kube-proxy會實現負載均衡。

(3)pod網絡, pod能能夠互相通信,k8s集群必須部署pod網絡,flannel是其中一個可以選擇的方案




1.? ?kubectl發送部署deployment的請求到API Server。

2、API Server通知Controller Manager創建一個deployment資源。

3、Deployment controller向API Server發送創建ReplicaSet的需求。

4、ReplicaSet通知ReplicaSet controller啟動。

5、ReplicaSet controller發送創建Pod需求到API Server

6、API Server通知Scheduler執行調度任務

7、Scheduler根據副本數將分配Pod到集群中的node節點

8、API Server通知對應的node節點上面的kubelet組件準備創建pod

9、kubelet告訴docker在本節點上運行容器。

10、docker在節點上運行一個或多個容器。

Deployment 的概念

作為最常用的Kubernetes對象,Deployment經常會用來創建 ReplicaSet和Pod,我們往往不會直接在集群中使用ReplicaSet部署一個新的微服務,一方面是因為ReplicaSet 的功能其實不夠強大,一些常見的更新、擴容和縮容運維操作都不支持,Deployment的引入就是為了支持這些復雜的操作

Deployment 執行流程總結

最后,總結一下deployment實現的過程:

(1)首先用戶通過 kubectl 創建Deployment。

(2)接著,Deployment創建 ReplicaSet。

(3)然后,ReplicaSet 創建Pod

(4)最后,pod在每個節點上通過kubelet調用docker完成容器創建。

這個工作就變成了一個挑戰,而且全部停止了服務,再逐步升級的方式會導致服務較長時間不可用。針對這個問題,k8s提供了滾動更新(rolling-update)的方式來解決上述問題。滾動更新是針對pod來操作的,它通過一次只更新一小部分副本,成功后,再更新更多的副本,最終完成所有副本的更新。滾動更新的最大的好處是零停機,整個更新過程始終有副本在運行,從而保證了服務的連續性。

Kubectl?get 命令?:獲得資源信息

# 查看所有的資源信息

$ kubectl get all

$ kubectl get --all-namespaces

# 查看pod列表

$ kubectl get pod

# 顯示pod節點的標簽信息

$ kubectl get pod --show-labels

# 根據指定標簽匹配到具體的pod

$ kubectl get pods -l app=example

# 查看node節點列表

$ kubectl get node

# 顯示node節點的標簽信息

$ kubectl get node --show-labels

# 查看pod詳細信息,也就是可以查看pod具體運行在哪個節點上(ip地址信息)

$ kubectl get pod -o wide

# 查看服務的詳細信息,顯示了服務名稱,類型,集群ip,端口,時間等信息

$ kubectl get svc

$ kubectl get svc -n kube-system

# 查看命名空間

$ kubectl get ns

$ kubectl get namespaces

# 查看所有pod所屬的命名空間

$ kubectl get pod --all-namespaces

# 查看所有pod所屬的命名空間并且查看都在哪些節點上運行

$ kubectl get pod --all-namespaces? -o wide

# 查看目前所有的replica set,顯示了所有的pod的副本數,以及他們的可用數量以及狀態等信息

$ kubectl get rs

# 查看已經部署了的所有應用,可以看到容器,以及容器所用的鏡像,標簽等信息

$ kubectl get deploy -o wide

$ kubectl get deployments -o wide

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容