k8s 基礎(chǔ)概念及架構(gòu)

一.學(xué)習(xí)前置知識(shí)

1.linux基本知識(shí)點(diǎn)? ? ?

2.docker 基礎(chǔ)知識(shí)? ? ?參考:http://www.reibang.com/c/fb233d56612f

二.k8s概念和架構(gòu)知識(shí)

0.應(yīng)用部署方式演變

在部署應(yīng)用程序的方式上,主要經(jīng)歷了三個(gè)時(shí)代:

應(yīng)用部署方式演變

1)傳統(tǒng)部署:互聯(lián)網(wǎng)早期,會(huì)直接將應(yīng)用程序部署在物理機(jī)上

優(yōu)點(diǎn):簡(jiǎn)單囚灼,不需要其它技術(shù)的參與

缺點(diǎn):不能為應(yīng)用程序定義資源使用邊界丽惶,很難合理地分配計(jì)算資源充甚,而且程序之間容易產(chǎn)生影響

2)虛擬化部署:可以在一臺(tái)物理機(jī)上運(yùn)行多個(gè)虛擬機(jī)券盅,每個(gè)虛擬機(jī)都是獨(dú)立的一個(gè)環(huán)境

(工作中沒(méi)有遇到這樣部署應(yīng)用的-----只在本地遇到過(guò)使用vargant本地部署服務(wù)測(cè)試使用)

優(yōu)點(diǎn):程序環(huán)境不會(huì)相互產(chǎn)生影響,提供了一定程度的安全性

缺點(diǎn):增加了操作系統(tǒng)项郊,浪費(fèi)了部分資源

3)容器化部署:與虛擬化類(lèi)似馅扣,但是共享了操作系統(tǒng)

優(yōu)點(diǎn):

a.可以保證每個(gè)容器擁有自己的文件系統(tǒng)、CPU着降、內(nèi)存差油、進(jìn)程空間等

b.運(yùn)行應(yīng)用程序所需要的資源都被容器包裝,并和底層基礎(chǔ)架構(gòu)解耦

c.容器化的應(yīng)用程序可以跨云服務(wù)商任洞、跨Linux操作系統(tǒng)發(fā)行版進(jìn)行部署

可能遇到的問(wèn)題:

a.一個(gè)容器故障停機(jī)了蓄喇,怎么樣讓另外一個(gè)容器立刻啟動(dòng)去替補(bǔ)停機(jī)的容器

b.當(dāng)并發(fā)訪(fǎng)問(wèn)量變大的時(shí)候,怎么樣做到橫向擴(kuò)展容器數(shù)量

c.當(dāng)并發(fā)訪(fǎng)問(wèn)量下降了交掏,怎么樣回收容器的數(shù)量

其實(shí)這些容器管理的問(wèn)題統(tǒng)稱(chēng)為容器編排問(wèn)題妆偏,為了解決這些容器編排問(wèn)題,就產(chǎn)生了一些容器編排的軟件:

Swarm盅弛、compose:Docker自己的容器編排工具? ? ?

(具體參考:http://www.reibang.com/c/fb233d56612f? ?中關(guān)于swarm和compose相關(guān)知識(shí))

Mesos:Apache的一個(gè)資源統(tǒng)一管控的工具钱骂,需要和Marathon結(jié)合使用

Kubernetes:Google開(kāi)源的的容器編排工具

1.k8s簡(jiǎn)單概述

kubernetes,是一個(gè)全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案挪鹏,是谷歌嚴(yán)格保密十幾年的秘密武器----Borg系統(tǒng)的一個(gè)開(kāi)源版本见秽,于2014年9月發(fā)布第一個(gè)版本,2015年7月發(fā)布第一個(gè)正式版本

使用k8s進(jìn)行容器化應(yīng)用部署狰住,及使用k8s的目標(biāo)是使容器化應(yīng)用部署及擴(kuò)容更加簡(jiǎn)潔和高效

2.k8s的功能及特性

1)自動(dòng)裝箱:基于容器對(duì)應(yīng)用運(yùn)行環(huán)境的資源配置要求自動(dòng)部署應(yīng)用容器

2)自我修復(fù):一旦某一個(gè)容器崩潰张吉,能夠在短時(shí)間內(nèi)迅速啟動(dòng)新的容器,恢復(fù)業(yè)務(wù)催植!當(dāng)容器未通過(guò)監(jiān)控檢查時(shí),會(huì)關(guān)閉容器直到容器正常運(yùn)行勺择,才對(duì)外提供服務(wù)

自動(dòng)修復(fù)

3)水平擴(kuò)展:可以根據(jù)需要创南,自動(dòng)對(duì)集群中正在運(yùn)行的容器數(shù)量進(jìn)行調(diào)整

水平擴(kuò)展

4)服務(wù)發(fā)現(xiàn):服務(wù)可以通過(guò)自動(dòng)發(fā)現(xiàn)的形式找到它所依賴(lài)的服務(wù)

5)滾動(dòng)更新與回退:可以根據(jù)應(yīng)用的變化,對(duì)應(yīng)用容器運(yùn)行的應(yīng)用省核,進(jìn)行一次性或批量的更新和回退

6)負(fù)載均衡:如果一個(gè)服務(wù)起動(dòng)了多個(gè)容器稿辙,能夠自動(dòng)實(shí)現(xiàn)請(qǐng)求的負(fù)載均衡

7)存儲(chǔ)編排:可以根據(jù)容器自身的需求自動(dòng)創(chuàng)建存儲(chǔ)卷,可以訪(fǎng)問(wèn)外部存儲(chǔ)

8)批量部署:可以使用計(jì)劃任務(wù)和批量操作

2.k8s架構(gòu)組件

完整架構(gòu)圖
請(qǐng)求架構(gòu)圖

一個(gè)kubernetes集群主要是由控制節(jié)點(diǎn)(master)气忠、工作節(jié)點(diǎn)(node)構(gòu)成邻储,每個(gè)節(jié)點(diǎn)上都會(huì)安裝不同的組件赋咽。

1)master:集群的控制平面,負(fù)責(zé)集群的決策 ( 管理 )

ApiServer : 資源操作的唯一入口吨娜,接收用戶(hù)輸入的命令脓匿,提供認(rèn)證、授權(quán)宦赠、API注冊(cè)和發(fā)現(xiàn)等機(jī)制

Scheduler : 負(fù)責(zé)集群資源調(diào)度陪毡,按照預(yù)定的調(diào)度策略將Pod調(diào)度到相應(yīng)的node節(jié)點(diǎn)上。(算哪個(gè)節(jié)點(diǎn)資源用的少勾扭,部署上去)

ControllerManager : 負(fù)責(zé)維護(hù)集群的狀態(tài)毡琉,比如程序部署安排、故障檢測(cè)妙色、自動(dòng)擴(kuò)展桅滋、滾動(dòng)更新等(部署和維護(hù)的)

Etcd :負(fù)責(zé)存儲(chǔ)集群中各種資源對(duì)象的信息

master結(jié)構(gòu)圖

2)worker:集群的數(shù)據(jù)平面,負(fù)責(zé)為容器提供運(yùn)行環(huán)境 ( 干活 )

Kubelet : 【master派到node節(jié)點(diǎn)的代表】負(fù)責(zé)維護(hù)容器的生命周期身辨,即通過(guò)控制docker丐谋,來(lái)創(chuàng)建、更新栅表、銷(xiāo)毀容器

KubeProxy : 【提供網(wǎng)絡(luò)代理】負(fù)責(zé)提供集群內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡

Docker : 負(fù)責(zé)節(jié)點(diǎn)上容器的各種操作

node結(jié)構(gòu)圖

3)容器運(yùn)行環(huán)境【Container Runtime

容器運(yùn)行環(huán)境是負(fù)責(zé)運(yùn)行容器的軟件

Kubernetes支持多個(gè)容器運(yùn)行環(huán)境:Docker笋鄙、containerd、cri-o怪瓶、rktlet以及任何實(shí)現(xiàn)Kubernetes CRI (容器運(yùn)行環(huán)境接口) 的軟件萧落。

4)fluentd:是一個(gè)守護(hù)進(jìn)程,它有助于提升集群層面日志

3.k8s核心概念

1)pod:

? ? ? k8s中最小的部署單元洗贰,容器都是運(yùn)行在pod中的找岖,一個(gè)pod中可以有1個(gè)或者多個(gè)容器,一個(gè)pod的容器時(shí)共享網(wǎng)絡(luò)的敛滋,生命周期時(shí)短暫的

2)controller【創(chuàng)建pod】:

? ? 確保預(yù)期的pod副本的數(shù)量许布,無(wú)狀態(tài)應(yīng)用部署,有狀態(tài)應(yīng)用部署(有特定的存儲(chǔ)及訪(fǎng)問(wèn)地址)绎晃,確保所有的node運(yùn)行同一個(gè)pod蜜唾,一次性任務(wù)和定時(shí)任務(wù)

3)service:定義一組pod的訪(fǎng)問(wèn)規(guī)則,支持多種方式【ClusterIP庶艾、NodePort袁余、LoadBalancer】

4)Label:標(biāo)簽,用于對(duì)pod進(jìn)行分類(lèi)咱揍,同一類(lèi)pod會(huì)擁有相同的標(biāo)簽

5)NameSpace:命名空間颖榜,用來(lái)隔離pod的運(yùn)行環(huán)境(同個(gè)命名空間里的pod可以相互訪(fǎng)問(wèn))

6)Volume:聲明在Pod容器中可訪(fǎng)問(wèn)的文件目錄,可以被掛載到Pod中一個(gè)或多個(gè)容器指定路徑下

支持多種后端存儲(chǔ)抽象【本地存儲(chǔ)、分布式存儲(chǔ)掩完、云存儲(chǔ)】

7)Deployment:定義一組Pod副本數(shù)目噪漾,版本等

通過(guò)控制器【Controller】維持Pod數(shù)目【自動(dòng)回復(fù)失敗的Pod】

通過(guò)控制器以指定的策略控制版本【滾動(dòng)升級(jí)、回滾等】

8)api:Kubernetes的API來(lái)操作整個(gè)集群

同時(shí)可以通過(guò) kubectl 且蓬、ui欣硼、curl 最終發(fā)送 http + json/yaml 方式的請(qǐng)求給API Server,然后控制整個(gè)K8S集群缅疟,K8S中所有的資源對(duì)象都可以采用 yaml 或 json 格式的文件定義或描述

4.k8容器部署流程

1)通過(guò)Kubectl提交一個(gè)創(chuàng)建RC(Replication Controller)的請(qǐng)求分别,該請(qǐng)求通過(guò)APlserver寫(xiě)入etcd

2)此時(shí)Controller Manager通過(guò)API Server的監(jiān)聽(tīng)資源變化的接口監(jiān)聽(tīng)到此RC事件,分析之后存淫,發(fā)現(xiàn)當(dāng)前集群中還沒(méi)有它所對(duì)應(yīng)的Pod實(shí)例

3)于是根據(jù)RC里的Pod模板定義一個(gè)生成Pod對(duì)象耘斩,通過(guò)APIServer寫(xiě)入etcd

4)此事件被Scheduler發(fā)現(xiàn),它立即執(zhí)行執(zhí)行一個(gè)復(fù)雜的調(diào)度流程桅咆,為這個(gè)新的Pod選定一個(gè)落戶(hù)的Node括授,然后通過(guò)API Server將這一結(jié)果寫(xiě)入etcd中

5)目標(biāo)Node上運(yùn)行的Kubelet進(jìn)程通過(guò)APiserver監(jiān)測(cè)到這個(gè)"新生的Pod.并按照它的定義,啟動(dòng)該P(yáng)od并任勞任怨地負(fù)責(zé)它的下半生岩饼,直到Pod的生命結(jié)束

6)通過(guò)Kubectl提交一個(gè)新的映射到該P(yáng)od的Service的創(chuàng)建請(qǐng)求

7)ControllerManager通過(guò)Label標(biāo)簽查詢(xún)到關(guān)聯(lián)的Pod實(shí)例荚虚,然后生成Service的Endpoints信息,并通過(guò)APIServer寫(xiě)入到etod中

8)所有Node上運(yùn)行的Proxy進(jìn)程通過(guò)APIServer查詢(xún)并監(jiān)聽(tīng)Service對(duì)象與其對(duì)應(yīng)的Endponts信息籍茧,建立一個(gè)軟件方式的負(fù)載均衡器來(lái)實(shí)現(xiàn)Service訪(fǎng)問(wèn)到后端Pod的流量轉(zhuǎn)發(fā)功能

5.部署應(yīng)用流程介紹

以部署一個(gè)nginx服務(wù)來(lái)說(shuō)明kubernetes系統(tǒng)各個(gè)組件調(diào)用關(guān)系:

首先要明確版述,一旦kubernetes環(huán)境啟動(dòng)之后,master和node都會(huì)將自身的信息存儲(chǔ)到etcd數(shù)據(jù)庫(kù)中

1)一個(gè)nginx服務(wù)的安裝請(qǐng)求會(huì)首先被發(fā)送到master節(jié)點(diǎn)的apiServer組件

2)apiServer組件會(huì)調(diào)用scheduler組件來(lái)決定到底應(yīng)該把這個(gè)服務(wù)安裝到哪個(gè)node節(jié)點(diǎn)上

在此時(shí)寞冯,它會(huì)從etcd中讀取各個(gè)node節(jié)點(diǎn)的信息渴析,然后按照一定的算法進(jìn)行選擇,并將結(jié)果告知apiServer

3)apiServer調(diào)用controller-manager去調(diào)度Node節(jié)點(diǎn)安裝nginx服務(wù)

4)kubelet接收到指令后吮龄,會(huì)通知docker俭茧,然后由docker來(lái)啟動(dòng)一個(gè)nginx的pod

pod是kubernetes的最小操作單元,容器必須跑在pod中

5)nginx服務(wù)就運(yùn)行了漓帚,如果需要訪(fǎng)問(wèn)nginx母债,就需要通過(guò)kube-proxy來(lái)對(duì)pod產(chǎn)生訪(fǎng)問(wèn)的代理

這樣,外界用戶(hù)就可以訪(fǎng)問(wèn)集群中的nginx服務(wù)了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尝抖,一起剝皮案震驚了整個(gè)濱河市毡们,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌昧辽,老刑警劉巖漏隐,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異奴迅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)取具,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)脖隶,“玉大人,你說(shuō)我怎么就攤上這事暇检〔澹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵块仆,是天一觀的道長(zhǎng)构蹬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)悔据,這世上最難降的妖魔是什么庄敛? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮科汗,結(jié)果婚禮上藻烤,老公的妹妹穿的比我還像新娘。我一直安慰自己头滔,他們只是感情好怖亭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著坤检,像睡著了一般兴猩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上早歇,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天倾芝,我揣著相機(jī)與錄音,去河邊找鬼缺前。 笑死蛀醉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衅码。 我是一名探鬼主播拯刁,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逝段!你這毒婦竟也來(lái)了垛玻?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奶躯,失蹤者是張志新(化名)和其女友劉穎帚桩,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嘹黔,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡账嚎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郭蕉。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疼邀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出召锈,到底是詐尸還是另有隱情旁振,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布涨岁,位于F島的核電站拐袜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏梢薪。R本人自食惡果不足惜蹬铺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沮尿。 院中可真熱鬧丛塌,春花似錦、人聲如沸畜疾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)啡捶。三九已至姥敛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞎暑,已是汗流浹背彤敛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留了赌,地道東北人墨榄。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像勿她,于是被迫代替她去往敵國(guó)和親袄秩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

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