K8s介紹以及運行架構(gòu)

Kubernetes(k8s)是Google開源的容器集群管理系統(tǒng)纵竖。在Docker技術(shù)的基礎(chǔ)上漠烧,為容器化的應(yīng)用提供部署運行、資源調(diào)度靡砌、服務(wù)發(fā)現(xiàn)和動態(tài)伸縮等一系列完整功能已脓,提高了大規(guī)模容器集群管理的便捷性。

Kubernetes最主要的設(shè)計思想是通殃,從更宏觀的角度度液,以統(tǒng)一的方式來定義任務(wù)之間的各種關(guān)系厕宗,并且為將來支持更多種類的任務(wù)留足余地。

Kubernetes所擅長的堕担,是按照用戶的意愿和整個系統(tǒng)的規(guī)則已慢,完全自動化地處理好容器之間的各種關(guān)系。這種功能霹购,就是我們經(jīng)常聽到的一個概念:編排佑惠。所以說,Kubernetes的本質(zhì)齐疙,是為用戶提供一個具有普遍意義的容器編排工具膜楷。

k8s中幾個重要概念

(1) Cluster,Cluster是 計算、存儲和網(wǎng)絡(luò)資源的集合贞奋,k8s利用這些資源運行各種基于容器的應(yīng)用赌厅。

(2) Master, Master是cluster的大腦,他的主要職責(zé)是調(diào)度轿塔,即決定將應(yīng)用放在那里運行特愿。master運行l(wèi)inux操作系統(tǒng),可以是物理機或者虛擬機勾缭。為了實現(xiàn)高可用揍障,可以運行多個master。

(3) Node, Node的職責(zé)是運行容器應(yīng)用漫拭。node由master管理亚兄,node負責(zé)監(jiān)控并匯報容器的狀態(tài),同時根據(jù)master的要求管理容器的生命周期采驻。node運行在linux的操作系統(tǒng)上审胚,可以是物理機或者是虛擬機。

(4),pod,pod是k8s的最小工作單元礼旅。每個pod可以包含一個或者多個容器膳叨。pod中的容器會作為一個整體被master調(diào)度到一個node上運行。 Pod有兩種使用方式痘系,運行單一容器和運行多個容器菲嘴, 運行單一容器是Kubernetes 最常見的模型,即便是只有一個容器汰翠,Kubernetes 管理的也是Pod 而不是直接管理容器龄坪。而pod中運行多個容器的話,哪些容器應(yīng)該放到一個Pod中复唤?答案是:這些容器聯(lián)系必須非常緊密健田,而且需要直接共享資源。

(5)controller, k8s不會直接創(chuàng)建pod,而是通過controller來管理pod的佛纫。controller中定義了pod的部署特性妓局,比如有幾個副本总放,在什么樣的node上運行等。為了滿足不同的業(yè)務(wù)場景好爬,k8s提供了多種controller局雄,包括Replication Controller(RC)、Replica Set(RS)存炮、Deployment 炬搭、daemonset、statefulset僵蛛、job等尚蝌。

RC是K8s集群中最早的保證Pod高可用的API對象,通過監(jiān)控運行中的Pod來保證集群中運行指定數(shù)目的Pod副本充尉。指定的數(shù)目可以是多個也可以是1個;少于指定數(shù)目衣形,RC就會啟動運行新的Pod副本驼侠;多于指定數(shù)目,RC就會殺死多余的Pod副本谆吴。即使在指定數(shù)目為1的情況下倒源,通過RC運行Pod也比直接運行Pod更明智,因為RC也可以發(fā)揮它高可用的能力句狼,保證永遠有1個Pod在運行笋熬。

(6)Replica Set (RS)

RS是新一代RC,提供同樣的高可用能力腻菇,區(qū)別主要在于RS后來居上胳螟,能支持更多種類的匹配模式。RS對象一般不單獨使用筹吐,而是作為Deployment的理想狀態(tài)參數(shù)使用糖耸。使用deployment時會自動創(chuàng)建Replica Set ,也就是說deployment是通過Replica.Set來管理pod的多個副本的丘薛,我們通常不需要直接使用Replica Set 嘉竟。

(7) deployment(部署)

Deployment表示用戶對K8s集群的一次更新操作,它是一個比RS應(yīng)用模式更廣的API對象洋侨,可以是創(chuàng)建一個新的服務(wù)舍扰,更新一個新的服務(wù),也可以是滾動升級一個服務(wù)希坚。以K8s的發(fā)展方向边苹,未來對所有長期伺服型的的業(yè)務(wù)的管理,都會通過Deployment來管理吏够。

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

長期伺服型和批處理型服務(wù)的核心在業(yè)務(wù)應(yīng)用勾给,可能有些節(jié)點運行多個同類業(yè)務(wù)的Pod滩报,有些節(jié)點上又沒有這類Pod運行;而后臺支撐型服務(wù)的核心關(guān)注點在K8s集群中的節(jié)點(物理機或虛擬機)播急,要保證每個節(jié)點上都有一個此類Pod運行脓钾。節(jié)點可能是所有集群節(jié)點選定的一些特定節(jié)點。典型的后臺支撐型服務(wù)包括桩警,存儲可训,日志和監(jiān)控等在每個節(jié)點上支持K8s集群運行的服務(wù)。

(9) statefuleset

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

(10) job 用于運行結(jié)束就刪除的應(yīng)用胯努,而其他controller中的pod通常是長期持續(xù)運行的。

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

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

k8s運行容器pod與訪問容器這兩項任務(wù)分別由controller和service執(zhí)行溉箕。

(12)、namespace

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

Kubernetes 默認創(chuàng)建了兩個,Namespace旱捧。default -- 創(chuàng)建資源時如果不指定独郎,將被放到這個

Namespace 中。kube-system:Kubernetes 自己創(chuàng)建的系統(tǒng)資源將放到這個Namespace 中


1枚赡、k8s中master的組成

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

(2) Scheduler(kube-scheduler),scheduer負責(zé)決定將pod放在哪個node上運行贫橙。另外scheduler在調(diào)度時會充分考慮集群的架構(gòu)贪婉,當前各個節(jié)點的負載,以及應(yīng)用對高可用卢肃、性能疲迂、數(shù)據(jù)親和性的需求才顿。

(3) Controller,Manager(kube-controller-manager),負責(zé)維護集群的狀態(tài),比如故障檢測尤蒿、自動擴展诀蓉、滾動更新等红选。Controller

Manager 由多種 controller組成雷逆,包括 replication controller壤追、endpoints,controller、namespace,controller示弓、serviceaccounts controller 等讳侨。

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

(4)etcd

負責(zé)保存k8s集群的配置信息和各種資源的狀態(tài)信息歹叮,K8S中所有的服務(wù)節(jié)點的信息數(shù)據(jù)、配置數(shù)據(jù)都是存儲在ETCD中铆帽,當數(shù)據(jù)發(fā)生變化時,etcd會快速的通知k8s相關(guān)組件德谅。

(5)pod網(wǎng)絡(luò)(flannel )

pod要能夠相互通信爹橱,k8s集群必須掌握pod網(wǎng)絡(luò),flannel是其中一個可選的方案窄做。


k8s中node的組成

(1)kubelet,? 是node的agent愧驱,當scheduler去確定在某個node上運行pod后,會將pod的具體配置信息發(fā)送給該節(jié)點的kubelet椭盏,kubelet會根據(jù)這些信息創(chuàng)建和運行容器组砚,并向master報告運行狀態(tài)。

(2)kube-proxy, service 在邏輯上代表了后端的多個 Pod掏颊,外界通過service 訪問 Pod糟红。service接收到的請求是如何轉(zhuǎn)發(fā)到 Pod 的呢?這就是kube-proxy要完成的工作乌叶。proxy是配合service實現(xiàn)從pod到service盆偿, 以及從外部的node? port到service的訪問。每個 Node都會運行 kube-proxy 服務(wù)准浴,它負責(zé)將訪問 service 的 TCP/UPD,數(shù)據(jù)流轉(zhuǎn)發(fā)到后端的容器事扭。如果有多個副本,kube-proxy會實現(xiàn)負載均衡乐横。

(3)pod網(wǎng)絡(luò), pod能能夠互相通信求橄,k8s集群必須部署pod網(wǎng)絡(luò)今野,flannel是其中一個可以選擇的方案




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

2罐农、API Server通知Controller Manager創(chuàng)建一個deployment資源条霜。

3、Deployment controller向API Server發(fā)送創(chuàng)建ReplicaSet的需求啃匿。

4蛔外、ReplicaSet通知ReplicaSet controller啟動。

5溯乒、ReplicaSet controller發(fā)送創(chuàng)建Pod需求到API Server

6夹厌、API Server通知Scheduler執(zhí)行調(diào)度任務(wù)

7、Scheduler根據(jù)副本數(shù)將分配Pod到集群中的node節(jié)點

8裆悄、API Server通知對應(yīng)的node節(jié)點上面的kubelet組件準備創(chuàng)建pod

9矛纹、kubelet告訴docker在本節(jié)點上運行容器。

10光稼、docker在節(jié)點上運行一個或多個容器或南。

Deployment 的概念

作為最常用的Kubernetes對象,Deployment經(jīng)常會用來創(chuàng)建 ReplicaSet和Pod艾君,我們往往不會直接在集群中使用ReplicaSet部署一個新的微服務(wù)采够,一方面是因為ReplicaSet 的功能其實不夠強大,一些常見的更新冰垄、擴容和縮容運維操作都不支持蹬癌,Deployment的引入就是為了支持這些復(fù)雜的操作

Deployment 執(zhí)行流程總結(jié)

最后,總結(jié)一下deployment實現(xiàn)的過程:

(1)首先用戶通過 kubectl 創(chuàng)建Deployment虹茶。

(2)接著逝薪,Deployment創(chuàng)建 ReplicaSet。

(3)然后蝴罪,ReplicaSet 創(chuàng)建Pod

(4)最后董济,pod在每個節(jié)點上通過kubelet調(diào)用docker完成容器創(chuàng)建。

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

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

# 查看所有的資源信息

$ kubectl get all

$ kubectl get --all-namespaces

# 查看pod列表

$ kubectl get pod

# 顯示pod節(jié)點的標簽信息

$ kubectl get pod --show-labels

# 根據(jù)指定標簽匹配到具體的pod

$ kubectl get pods -l app=example

# 查看node節(jié)點列表

$ kubectl get node

# 顯示node節(jié)點的標簽信息

$ kubectl get node --show-labels

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

$ kubectl get pod -o wide

# 查看服務(wù)的詳細信息驯杜,顯示了服務(wù)名稱,類型做个,集群ip鸽心,端口,時間等信息

$ kubectl get svc

$ kubectl get svc -n kube-system

# 查看命名空間

$ kubectl get ns

$ kubectl get namespaces

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

$ kubectl get pod --all-namespaces

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

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

# 查看目前所有的replica set居暖,顯示了所有的pod的副本數(shù)顽频,以及他們的可用數(shù)量以及狀態(tài)等信息

$ kubectl get rs

# 查看已經(jīng)部署了的所有應(yīng)用,可以看到容器太闺,以及容器所用的鏡像糯景,標簽等信息

$ kubectl get deploy -o wide

$ kubectl get deployments -o wide

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市省骂,隨后出現(xiàn)的幾起案子蟀淮,更是在濱河造成了極大的恐慌,老刑警劉巖钞澳,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怠惶,死亡現(xiàn)場離奇詭異,居然都是意外死亡轧粟,警方通過查閱死者的電腦和手機甚疟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逃延,“玉大人,你說我怎么就攤上這事轧拄。” “怎么了檩电?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵拄丰,是天一觀的道長俐末。 經(jīng)常有香客問我料按,道長,這世上最難降的妖魔是什么卓箫? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮闷盔,結(jié)果婚禮上逢勾,老公的妹妹穿的比我還像新娘迫摔。我一直安慰自己攒菠,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布卓起。 她就那樣靜靜地躺著,像睡著了一般凹炸。 火紅的嫁衣襯著肌膚如雪戏阅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天啤它,我揣著相機與錄音奕筐,去河邊找鬼。 笑死变骡,一個胖子當著我的面吹牛离赫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播塌碌,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼渊胸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了台妆?” 一聲冷哼從身側(cè)響起翎猛,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎接剩,沒想到半個月后切厘,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡懊缺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年疫稿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡而克,死狀恐怖靶壮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情员萍,我是刑警寧澤腾降,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站碎绎,受9級特大地震影響螃壤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筋帖,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一奸晴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧日麸,春花似錦寄啼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至嗡综,卻和暖如春乙帮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背极景。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工察净, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盼樟。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓氢卡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親晨缴。 傳聞我的和親對象是個殘疾皇子异吻,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容