什么是k8s

?Kubernetes介紹

1.背景介紹

云計算飛速發(fā)展

- IaaS

- PaaS

- SaaS

Docker技術(shù)突飛猛進

- 一次構(gòu)建,到處運行

- 容器的快速輕量

- 完整的生態(tài)環(huán)境

2.什么是kubernetes

首先瓷式,他是一個全新的基于容器技術(shù)的分布式架構(gòu)領(lǐng)先方案群井。Kubernetes(k8s)是Google開源的容器集群管理系統(tǒng)(谷歌內(nèi)部:Borg)究西。在Docker技術(shù)的基礎(chǔ)上影所,為容器化的應(yīng)用提供部署運行、資源調(diào)度髓窜、服務(wù)發(fā)現(xiàn)和動態(tài)伸縮等一系列完整功能征讲,提高了大規(guī)模容器集群管理的便捷性据某。

Kubernetes是一個完備的分布式系統(tǒng)支撐平臺,具有完備的集群管理能力诗箍,多擴多層次的安全防護和準入機制癣籽、多租戶應(yīng)用支撐能力、透明的服務(wù)注冊和發(fā)現(xiàn)機制滤祖、內(nèi)建智能負載均衡器筷狼、強大的故障發(fā)現(xiàn)和自我修復(fù)能力、服務(wù)滾動升級和在線擴容能力匠童、可擴展的資源自動調(diào)度機制以及多粒度的資源配額管理能力埂材。同時Kubernetes提供完善的管理工具,涵蓋了包括開發(fā)汤求、部署測試俏险、運維監(jiān)控在內(nèi)的各個環(huán)節(jié)严拒。

Kubernetes中,Service是分布式集群架構(gòu)的核心竖独,一個Service對象擁有如下關(guān)鍵特征:

  • 擁有一個唯一指定的名字
  • 擁有一個虛擬IP(Cluster IP糙俗、Service IP、或VIP)和端口號
  • 能夠體統(tǒng)某種遠程服務(wù)能力
  • 被映射到了提供這種服務(wù)能力的一組容器應(yīng)用上

Service的服務(wù)進程目前都是基于Socket通信方式對外提供服務(wù)预鬓,比如Redis、Memcache赊颠、MySQL格二、Web Server,或者是實現(xiàn)了某個具體業(yè)務(wù)的一個特定的TCP Server進程竣蹦,雖然一個Service通常由多個相關(guān)的服務(wù)進程來提供服務(wù)顶猜,每個服務(wù)進程都有一個獨立的Endpoint(IP+Port)訪問點,但Kubernetes能夠讓我們通過服務(wù)連接到指定的Service上痘括。有了Kubernetes內(nèi)奸的透明負載均衡和故障恢復(fù)機制长窄,不管后端有多少服務(wù)進程,也不管某個服務(wù)進程是否會由于發(fā)生故障而重新部署到其他機器纲菌,都不會影響我們隊服務(wù)的正常調(diào)用挠日,更重要的是這個Service本身一旦創(chuàng)建就不會發(fā)生變化,意味著在Kubernetes集群中翰舌,我們不用為了服務(wù)的IP地址的變化問題而頭疼了嚣潜。

容器提供了強大的隔離功能,所有有必要把為Service提供服務(wù)的這組進程放入容器中進行隔離椅贱。為此懂算,Kubernetes設(shè)計了Pod對象,將每個服務(wù)進程包裝到相對應(yīng)的Pod中庇麦,使其成為Pod中運行的一個容器计技。為了建立Service與Pod間的關(guān)聯(lián)管理,Kubernetes給每個Pod貼上一個標(biāo)簽Label山橄,比如運行MySQL的Pod貼上name=mysql標(biāo)簽垮媒,給運行PHP的Pod貼上name=php標(biāo)簽,然后給相應(yīng)的Service定義標(biāo)簽選擇器Label Selector驾胆,這樣就能巧妙的解決了Service于Pod的關(guān)聯(lián)問題涣澡。

在集群管理方面,Kubernetes將集群中的機器劃分為一個Master節(jié)點和一群工作節(jié)點Node丧诺,其中入桂,在Master節(jié)點運行著集群管理相關(guān)的一組進程kube-apiserver、kube-controller-manager和kube-scheduler驳阎,這些進程實現(xiàn)了整個集群的資源管理抗愁、Pod調(diào)度馁蒂、彈性伸縮、安全控制蜘腌、系統(tǒng)監(jiān)控和糾錯等管理能力沫屡,并且都是全自動完成的。Node作為集群中的工作節(jié)點撮珠,運行真正的應(yīng)用程序沮脖,在Node上Kubernetes管理的最小運行單元是Pod。Node上運行著Kubernetes的kubelet芯急、kube-proxy服務(wù)進程勺届,這些服務(wù)進程負責(zé)Pod的創(chuàng)建、啟動娶耍、監(jiān)控免姿、重啟、銷毀以及實現(xiàn)軟件模式的負載均衡器榕酒。

在Kubernetes集群中胚膊,它解決了傳統(tǒng)IT系統(tǒng)中服務(wù)擴容和升級的兩大難題。你只需為需要擴容的Service關(guān)聯(lián)的Pod創(chuàng)建一個Replication Controller簡稱(RC)想鹰,則該Service的擴容及后續(xù)的升級等問題將迎刃而解紊婉。在一個RC定義文件中包括以下3個關(guān)鍵信息。

  • 目標(biāo)Pod的定義
  • 目標(biāo)Pod需要運行的副本數(shù)量(Replicas)
  • 要監(jiān)控的目標(biāo)Pod標(biāo)簽(Label)

在創(chuàng)建好RC后杖挣,Kubernetes會通過RC中定義的的Label篩選出對應(yīng)Pod實例并實時監(jiān)控其狀態(tài)和數(shù)量肩榕,如果實例數(shù)量少于定義的副本數(shù)量,則會根據(jù)RC中定義的Pod模板來創(chuàng)建一個新的Pod惩妇,然后將新Pod調(diào)度到合適的Node上啟動運行株汉,知道Pod實例的數(shù)量達到預(yù)定目標(biāo),這個過程完全是自動化歌殃。

架構(gòu)資料領(lǐng)取地址:895244712

Kubernetes優(yōu)勢:

- 容器編排

- 輕量級

- 開源

- 彈性伸縮

- 負載均衡

?Kubernetes的核心概念

1.Master

k8s集群的管理節(jié)點乔妈,負責(zé)管理集群,提供集群的資源數(shù)據(jù)訪問入口氓皱。擁有Etcd存儲服務(wù)(可選)路召,運行Api Server進程,Controller Manager服務(wù)進程及Scheduler服務(wù)進程波材,關(guān)聯(lián)工作節(jié)點Node股淡。Kubernetes API server提供HTTP Rest接口的關(guān)鍵服務(wù)進程,是Kubernetes里所有資源的增廷区、刪唯灵、改、查等操作的唯一入口隙轻。也是集群控制的入口進程埠帕;Kubernetes Controller Manager是Kubernetes所有資源對象的自動化控制中心叛赚;Kubernetes Schedule是負責(zé)資源調(diào)度(Pod調(diào)度)的進程

2.Node

Node是Kubernetes集群架構(gòu)中運行Pod的服務(wù)節(jié)點(亦叫agent或minion)递宅。Node是Kubernetes集群操作的單元,用來承載被分配Pod的運行恬吕,是Pod運行的宿主機氛琢。關(guān)聯(lián)Master管理節(jié)點厕鹃,擁有名稱和IP河爹、系統(tǒng)資源信息变丧。運行docker eninge服務(wù),守護進程kunelet及負載均衡器kube-proxy.

  • 每個Node節(jié)點都運行著以下一組關(guān)鍵進程
  • kubelet:負責(zé)對Pod對于的容器的創(chuàng)建狡蝶、啟停等任務(wù)
  • kube-proxy:實現(xiàn)Kubernetes Service的通信與負載均衡機制的重要組件
  • Docker Engine(Docker):Docker引擎宙刘,負責(zé)本機容器的創(chuàng)建和管理工作

Node節(jié)點可以在運行期間動態(tài)增加到Kubernetes集群中,默認情況下牢酵,kubelet會想master注冊自己,這也是Kubernetes推薦的Node管理方式衙猪,kubelet進程會定時向Master匯報自身情報馍乙,如操作系統(tǒng)、Docker版本垫释、CPU和內(nèi)存丝格,以及有哪些Pod在運行等等,這樣Master可以獲知每個Node節(jié)點的資源使用情況棵譬,冰實現(xiàn)高效均衡的資源調(diào)度策略显蝌。、

3.Pod

運行于Node節(jié)點上订咸,若干相關(guān)容器的組合曼尊。Pod內(nèi)包含的容器運行在同一宿主機上,使用相同的網(wǎng)絡(luò)命名空間脏嚷、IP地址和端口骆撇,能夠通過localhost進行通。Pod是Kurbernetes進行創(chuàng)建父叙、調(diào)度和管理的最小單位神郊,它提供了比容器更高層次的抽象,使得部署和管理更加靈活趾唱。一個Pod可以包含一個容器或者多個相關(guān)容器涌乳。

Pod其實有兩種類型:普通Pod和靜態(tài)Pod,后者比較特殊甜癞,它并不存在Kubernetes的etcd存儲中夕晓,而是存放在某個具體的Node上的一個具體文件中,并且只在此Node上啟動带欢。普通Pod一旦被創(chuàng)建运授,就會被放入etcd存儲中烤惊,隨后會被Kubernetes Master調(diào)度到摸個具體的Node上進行綁定,隨后該Pod被對應(yīng)的Node上的kubelet進程實例化成一組相關(guān)的Docker容器冰啟動起來吁朦,在柒室。在默認情況下,當(dāng)Pod里的某個容器停止時逗宜,Kubernetes會自動檢測到這個問起并且重啟這個Pod(重啟Pod里的所有容器)雄右,如果Pod所在的Node宕機,則會將這個Node上的所有Pod重新調(diào)度到其他節(jié)點上纺讲。

架構(gòu)資料領(lǐng)取地址:895244712

4.Replication Controller

Replication Controller用來管理Pod的副本擂仍,保證集群中存在指定數(shù)量的Pod副本。集群中副本的數(shù)量大于指定數(shù)量熬甚,則會停止指定數(shù)量之外的多余容器數(shù)量逢渔,反之,則會啟動少于指定數(shù)量個數(shù)的容器乡括,保證數(shù)量不變肃廓。Replication Controller是實現(xiàn)彈性伸縮、動態(tài)擴容和滾動升級的核心诲泌。

5.Service

Service定義了Pod的邏輯集合和訪問該集合的策略盲赊,是真實服務(wù)的抽象。Service提供了一個統(tǒng)一的服務(wù)訪問入口以及服務(wù)代理和發(fā)現(xiàn)機制敷扫,關(guān)聯(lián)多個相同Label的Pod哀蘑,用戶不需要了解后臺Pod是如何運行。

外部系統(tǒng)訪問Service的問題

首先需要弄明白Kubernetes的三種IP這個問題

Node IP:Node節(jié)點的IP地址

Pod IP: Pod的IP地址

Cluster IP:Service的IP地址

首先,Node IP是Kubernetes集群中節(jié)點的物理網(wǎng)卡IP地址葵第,所有屬于這個網(wǎng)絡(luò)的服務(wù)器之間都能通過這個網(wǎng)絡(luò)直接通信绘迁。這也表明Kubernetes集群之外的節(jié)點訪問Kubernetes集群之內(nèi)的某個節(jié)點或者TCP/IP服務(wù)的時候,必須通過Node IP進行通信

其次卒密,Pod IP是每個Pod的IP地址脊髓,他是Docker Engine根據(jù)docker0網(wǎng)橋的IP地址段進行分配的,通常是一個虛擬的二層網(wǎng)絡(luò)栅受。

最后Cluster IP是一個虛擬的IP将硝,但更像是一個偽造的IP網(wǎng)絡(luò),原因有以下幾點

  • Cluster IP僅僅作用于Kubernetes Service這個對象屏镊,并由Kubernetes管理和分配P地址
  • Cluster IP無法被ping依疼,他沒有一個“實體網(wǎng)絡(luò)對象”來響應(yīng)
  • Cluster IP只能結(jié)合Service Port組成一個具體的通信端口,單獨的Cluster IP不具備通信的基礎(chǔ)而芥,并且他們屬于Kubernetes集群這樣一個封閉的空間律罢。

Kubernetes集群之內(nèi),Node IP網(wǎng)、Pod IP網(wǎng)于Cluster IP網(wǎng)之間的通信误辑,采用的是Kubernetes自己設(shè)計的一種編程方式的特殊路由規(guī)則沧踏。

6.Label

Kubernetes中的任意API對象都是通過Label進行標(biāo)識,Label的實質(zhì)是一系列的Key/Value鍵值對巾钉,其中key于value由用戶自己指定翘狱。Label可以附加在各種資源對象上,如Node砰苍、Pod潦匈、Service、RC等赚导,一個資源對象可以定義任意數(shù)量的Label茬缩,同一個Label也可以被添加到任意數(shù)量的資源對象上去。Label是Replication Controller和Service運行的基礎(chǔ)吼旧,二者通過Label來進行關(guān)聯(lián)Node上運行的Pod凰锡。

我們可以通過給指定的資源對象捆綁一個或者多個不同的Label來實現(xiàn)多維度的資源分組管理功能,以便于靈活圈暗、方便的進行資源分配寡夹、調(diào)度、配置等管理工作厂置。

一些常用的Label如下:

  • 版本標(biāo)簽:"release":"stable","release":"canary"......
  • 環(huán)境標(biāo)簽:"environment":"dev","environment":"qa","environment":"production"
  • 架構(gòu)標(biāo)簽:"tier":"frontend","tier":"backend","tier":"middleware"
  • 分區(qū)標(biāo)簽:"partition":"customerA","partition":"customerB"
  • 質(zhì)量管控標(biāo)簽:"track":"daily","track":"weekly"

Label相當(dāng)于我們熟悉的標(biāo)簽,給某個資源對象定義一個Label就相當(dāng)于給它大了一個標(biāo)簽魂角,隨后可以通過Label Selector(標(biāo)簽選擇器)查詢和篩選擁有某些Label的資源對象昵济,Kubernetes通過這種方式實現(xiàn)了類似SQL的簡單又通用的對象查詢機制。

架構(gòu)資料領(lǐng)取地址:895244712

Label Selector在Kubernetes中重要使用場景如下:

    • kube-Controller進程通過資源對象RC上定義Label Selector來篩選要監(jiān)控的Pod副本的數(shù)量野揪,從而實現(xiàn)副本數(shù)量始終符合預(yù)期設(shè)定的全自動控制流程
    • kube-proxy進程通過Service的Label Selector來選擇對應(yīng)的Pod访忿,自動建立起每個Service島對應(yīng)Pod的請求轉(zhuǎn)發(fā)路由表,從而實現(xiàn)Service的智能負載均衡
    • 通過對某些Node定義特定的Label斯稳,并且在Pod定義文件中使用Nodeselector這種標(biāo)簽調(diào)度策略海铆,kuber-scheduler進程可以實現(xiàn)Pod”定向調(diào)度“的特性

?Kubernetes架構(gòu)和組件

image

- 服務(wù)分組,小集群挣惰,多集群

- 服務(wù)分組卧斟,大集群,單集群

架構(gòu)資料領(lǐng)取地址:895244712

****Kubernetes 組件:

Kubernetes Master控制組件憎茂,調(diào)度管理整個系統(tǒng)(集群)珍语,包含如下組件:

1.Kubernetes API Server

作為Kubernetes系統(tǒng)的入口,其封裝了核心對象的增刪改查操作竖幔,以RESTful API接口方式提供給外部客戶和內(nèi)部組件調(diào)用板乙。維護的REST對象持久化到Etcd中存儲。

2.Kubernetes Scheduler

為新建立的Pod進行節(jié)點(node)選擇(即分配機器)拳氢,負責(zé)集群的資源調(diào)度募逞。組件抽離蛋铆,可以方便替換成其他調(diào)度器。

3.Kubernetes Controller

負責(zé)執(zhí)行各種控制器放接,目前已經(jīng)提供了很多控制器來保證Kubernetes的正常運行刺啦。

4. Replication Controller

管理維護Replication Controller,關(guān)聯(lián)Replication Controller和Pod透乾,保證Replication Controller定義的副本數(shù)量與實際運行Pod數(shù)量一致洪燥。

5. Node Controller

管理維護Node,定期檢查Node的健康狀態(tài)乳乌,標(biāo)識出(失效|未失效)的Node節(jié)點捧韵。

6. Namespace Controller

管理維護Namespace,定期清理無效的Namespace汉操,包括Namesapce下的API對象再来,比如Pod、Service等磷瘤。

7. Service Controller

管理維護Service芒篷,提供負載以及服務(wù)代理。

8.EndPoints Controller

管理維護Endpoints采缚,關(guān)聯(lián)Service和Pod针炉,創(chuàng)建Endpoints為Service的后端,當(dāng)Pod發(fā)生變化時扳抽,實時更新Endpoints篡帕。

9. Service Account Controller

管理維護Service Account,為每個Namespace創(chuàng)建默認的Service Account贸呢,同時為Service Account創(chuàng)建Service Account Secret镰烧。

10. Persistent Volume Controller

管理維護Persistent Volume和Persistent Volume Claim,為新的Persistent Volume Claim分配Persistent Volume進行綁定楞陷,為釋放的Persistent Volume執(zhí)行清理回收怔鳖。

11. Daemon Set Controller

管理維護Daemon Set,負責(zé)創(chuàng)建Daemon Pod固蛾,保證指定的Node上正常的運行Daemon Pod结执。

12. Deployment Controller

管理維護Deployment,關(guān)聯(lián)Deployment和Replication Controller艾凯,保證運行指定數(shù)量的Pod昌犹。當(dāng)Deployment更新時,控制實現(xiàn)Replication Controller和 Pod的更新览芳。

13.Job Controller

管理維護Job斜姥,為Jod創(chuàng)建一次性任務(wù)Pod,保證完成Job指定完成的任務(wù)數(shù)目

14. Pod Autoscaler Controller

實現(xiàn)Pod的自動伸縮,定時獲取監(jiān)控數(shù)據(jù)铸敏,進行策略匹配缚忧,當(dāng)滿足條件時執(zhí)行Pod的伸縮動作。

** Kubernetes Node運行節(jié)點杈笔,運行管理業(yè)務(wù)容器闪水,包含如下組件:**

1.Kubelet

負責(zé)管控容器,Kubelet會從Kubernetes API Server接收Pod的創(chuàng)建請求蒙具,啟動和停止容器球榆,監(jiān)控容器運行狀態(tài)并匯報給Kubernetes API Server。

2.Kubernetes Proxy

負責(zé)為Pod創(chuàng)建代理服務(wù)禁筏,Kubernetes Proxy會從Kubernetes API Server獲取所有的Service信息持钉,并根據(jù)Service的信息創(chuàng)建代理服務(wù),實現(xiàn)Service到Pod的請求路由和轉(zhuǎn)發(fā)篱昔,從而實現(xiàn)Kubernetes層級的虛擬轉(zhuǎn)發(fā)網(wǎng)絡(luò)每强。

3.Docker

Node上需要運行容器服務(wù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市州刽,隨后出現(xiàn)的幾起案子空执,更是在濱河造成了極大的恐慌,老刑警劉巖穗椅,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辨绊,死亡現(xiàn)場離奇詭異,居然都是意外死亡匹表,警方通過查閱死者的電腦和手機门坷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來桑孩,“玉大人,你說我怎么就攤上這事框冀×鹘罚” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵明也,是天一觀的道長宣虾。 經(jīng)常有香客問我,道長温数,這世上最難降的妖魔是什么绣硝? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮撑刺,結(jié)果婚禮上鹉胖,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好甫菠,可當(dāng)我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布挠铲。 她就那樣靜靜地躺著,像睡著了一般寂诱。 火紅的嫁衣襯著肌膚如雪拂苹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天痰洒,我揣著相機與錄音瓢棒,去河邊找鬼。 笑死丘喻,一個胖子當(dāng)著我的面吹牛脯宿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播仓犬,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼嗅绰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了搀继?” 一聲冷哼從身側(cè)響起窘面,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叽躯,沒想到半個月后财边,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡点骑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年酣难,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黑滴。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡憨募,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出袁辈,到底是詐尸還是另有隱情菜谣,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布晚缩,位于F島的核電站尾膊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏荞彼。R本人自食惡果不足惜冈敛,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸣皂。 院中可真熱鬧抓谴,春花似錦暮蹂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至措拇,卻和暖如春我纪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背丐吓。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工浅悉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人券犁。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓术健,卻偏偏與公主長得像,于是被迫代替她去往敵國和親粘衬。 傳聞我的和親對象是個殘疾皇子荞估,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,925評論 2 344

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