溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

初識(shí)Kubernetes(K8s):理論基礎(chǔ)

發(fā)布時(shí)間:2020-07-16 08:19:09 來(lái)源:網(wǎng)絡(luò) 閱讀:2075 作者:xuad88 欄目:云計(jì)算

Kubernetes是什么?
Kubernetes,簡(jiǎn)稱K8s,是用8代替8個(gè)字符“ubernete”而成的縮寫。Kubernetes是Google開(kāi)源的一個(gè)容器編排引擎,同時(shí)也是一個(gè)開(kāi)源的容器集群管理系統(tǒng),可以實(shí)現(xiàn)容器應(yīng)用的自動(dòng)化部署、自動(dòng)擴(kuò)縮容、監(jiān)控和維護(hù)等功能。

一、Kubernetes架構(gòu)

Kubernetes最初源于谷歌內(nèi)部的Borg,提供了面向應(yīng)用的容器集群部署和管理系統(tǒng)。Kubernetes的目標(biāo)旨在消除編排物理/虛擬計(jì)算、網(wǎng)絡(luò)和存儲(chǔ)基礎(chǔ)設(shè)施的負(fù)擔(dān),并使應(yīng)用程序運(yùn)營(yíng)商和開(kāi)發(fā)人員完全將重點(diǎn)放在以容器為中心的原理上進(jìn)行自助運(yùn)營(yíng)。
Kubernetes具備完善的集群管理能力,包括多層次的安全防護(hù)和準(zhǔn)入機(jī)制、多租戶應(yīng)用支撐能力、透明的服務(wù)注冊(cè)和服務(wù)發(fā)現(xiàn)機(jī)制、內(nèi)建負(fù)載均衡器、故障發(fā)現(xiàn)和自我修復(fù)能力、服務(wù)滾動(dòng)升級(jí)和在線擴(kuò)容、可擴(kuò)展的資源自動(dòng)調(diào)度機(jī)制、多粒度的資源配額管理能力。
Borg是谷歌內(nèi)部的大規(guī)模集群管理系統(tǒng),負(fù)責(zé)對(duì)谷歌內(nèi)部很多核心服務(wù)的調(diào)度和管理。Borg的目的是讓用戶能夠不必操心資源管理的問(wèn)題,從而更專注于自己的核心業(yè)務(wù)。Borg甚至能做到跨多個(gè)數(shù)據(jù)中心的資源利用率最大化。
初識(shí)Kubernetes(K8s):理論基礎(chǔ)
Kubernetes屬于主從分布式架構(gòu),主要由Master和Node組成,以及包括客戶端命令行工具kubectl和其它附加項(xiàng)。

Master:作為控制節(jié)點(diǎn),對(duì)集群進(jìn)行調(diào)度管理;由kube-apiserver、kube-scheduler、kube-controller-manager和etcd組成。
Node:作為工作節(jié)點(diǎn),運(yùn)行業(yè)務(wù)應(yīng)用的容器;由kubelet、kube-proxy和docker(或者rocket)組成。

二、Kubernetes組件

Master指的是集群控制節(jié)點(diǎn),每個(gè)Kubernetes集群里需要有至少一個(gè)Master來(lái)負(fù)責(zé)集群的管理和控制。Master可以是一臺(tái)物理機(jī),也可以是一臺(tái)虛擬機(jī),Master節(jié)點(diǎn)上運(yùn)行著以下組件:
kube-apiserver:提供了HTTP Rest接口的關(guān)鍵服務(wù)進(jìn)程,是集群里所有資源的增、刪、改、查等操作的唯一入口,也是集群的控制入口。
kube-controller-manager:運(yùn)行管理控制器,是集群中處理常規(guī)任務(wù)的后臺(tái)進(jìn)程,每個(gè)Controller都負(fù)責(zé)一種具體的控制流程,而Controller Manager就是這些Controller的核心管理者。
kube-scheduler:負(fù)責(zé)資源調(diào)度(Pod調(diào)度)的進(jìn)程,為新創(chuàng)建的Pod選擇一個(gè)Node節(jié)點(diǎn)。
etcd:是kubernetes默認(rèn)的存儲(chǔ)系統(tǒng),集群里所有資源對(duì)象的數(shù)據(jù)全部保存在etcd中。

Node指的是集群的工作節(jié)點(diǎn),和Master一樣,可以是一臺(tái)物理主機(jī),也可以是一臺(tái)虛擬機(jī)。每個(gè)Node都會(huì)被Master分配一些工作負(fù)載(Docker容器),當(dāng)某個(gè)Node宕機(jī)時(shí),其上的工作負(fù)載會(huì)被Master自動(dòng)轉(zhuǎn)移到其他節(jié)點(diǎn)上去。Node上運(yùn)行的組件如下:
kubelet:負(fù)責(zé)Pod對(duì)應(yīng)的容器的創(chuàng)建、啟停等任務(wù),同時(shí)與Master節(jié)點(diǎn)密切協(xié)作,實(shí)現(xiàn)集群管理的基本功能。
kube-proxy:實(shí)現(xiàn)Kubernetes Service的通信與負(fù)載均衡機(jī)制的重要組件。
docker:容器引擎,負(fù)責(zé)本機(jī)的容器創(chuàng)建和管理工作。

三、Kubernetes對(duì)象

  • Pod
    Pod是Kubernetes集群創(chuàng)建或部署的最基本、最小的單位,每個(gè)Pod里運(yùn)行著一個(gè)或多個(gè)容器,每個(gè)Pod里都有一個(gè)特殊的被稱為Pause的容器,其他容器則為業(yè)務(wù)容器,這些業(yè)務(wù)容器共享Pause容器的網(wǎng)絡(luò)棧和Volume(存儲(chǔ)卷)。Kubernetes為每個(gè)Pod都分配了唯一的IP地址,稱為Pod IP,一個(gè)Pod里的所有容器共享這一個(gè)Pod IP。
  • Service
    Service定義了這樣一種抽象:一個(gè)Pod的邏輯分組,一種可以訪問(wèn)它們的策略。Service通常被稱為微服務(wù),定義了一個(gè)服務(wù)的訪問(wèn)入口地址,前端的應(yīng)用(Pod)通過(guò)這個(gè)入口訪問(wèn)其背后的一組由Pod副本組成的集群實(shí)例,Service與其后端Pod副本集群之間通過(guò)Label Selector來(lái)實(shí)現(xiàn)通信。
  • Label
    標(biāo)簽,一個(gè)Label就是一個(gè)key=value的鍵值對(duì),由用戶自己指定。Label可以附加到各種資源對(duì)象上,例如Pod、Service等,一個(gè)資源對(duì)象可以定義任意數(shù)量的Label,同一個(gè)Label也可以被添加到任意數(shù)量的資源對(duì)象上去。Label通常在資源對(duì)象定義時(shí)確定,也可以在對(duì)象創(chuàng)建后動(dòng)態(tài)添加或者刪除。
  • Volume
    存儲(chǔ)卷,與Docker的Volume比較類似,不同的是,Kubernetes中的Volume定義在Pod上,這個(gè)Pod里的所有容器都可以將其掛載到具體的文件目錄下,實(shí)現(xiàn)容器間的資源共享。
  • Persistent Volume
    網(wǎng)絡(luò)存儲(chǔ)卷,與Volume不同的是,它是在Node之間共享資源,每個(gè)Node都可以掛載使用。Pod可通過(guò)定義一個(gè)PersistentVolumeClaim(PVC)對(duì)象,來(lái)使用Persistent Volume資源。
  • Name
    Kubernetes REST API中的所有對(duì)象都用Name和UID來(lái)明確地標(biāo)識(shí)。Name在一個(gè)對(duì)象中同一時(shí)間只能擁有一個(gè)Name,如果對(duì)象被刪除,也可以使用相同的Name創(chuàng)建新的對(duì)象,Name用于在資源引用URL中的對(duì)象。
  • Namespace
    命名空間,很多情況下用于實(shí)現(xiàn)多租戶的資源隔離。Namespace通過(guò)將集群內(nèi)部的資源對(duì)象“分配”到不同的Namespace中,形成邏輯上分組的不同項(xiàng)目、小組或用戶組,便于不同的分組在共享使用整個(gè)集群的資源的同時(shí)還能被分別管理。
  • Horizontal Pod Autoscaling
    簡(jiǎn)稱HPA,是Kubernetes中實(shí)現(xiàn)Pod水平自動(dòng)伸縮的功能。對(duì)于Pod集群來(lái)說(shuō),HPA可以實(shí)現(xiàn)很多自動(dòng)化功能,當(dāng)Pod中業(yè)務(wù)負(fù)載上升的時(shí)候,可以創(chuàng)建新的Pod來(lái)保證業(yè)務(wù)系統(tǒng)穩(wěn)定運(yùn)行;當(dāng)Pod中業(yè)務(wù)負(fù)載下降的時(shí)候,可以銷毀Pod來(lái)提高資源利用率。
  • Annotation
    注解,與Label類似,使用key/value鍵值對(duì)的形式進(jìn)行定義。Annotation是用戶任意定義的“附加”信息,以便于外部工具進(jìn)行查找。很多時(shí)候,Kubernetes的模塊自身會(huì)通過(guò)Annotation的方式標(biāo)記資源對(duì)象的一些特殊信息。
  • ReplicaSet
    ReplicaSet(RS)是Replication Controller(RC)的升級(jí)版本,確保運(yùn)行指定數(shù)量的Pod。RC與RS的唯一區(qū)別就是對(duì)Lable Selector的支持不同,RS支持新的基于集合的標(biāo)簽,RC僅支持基于等式的標(biāo)簽。
    當(dāng)我們定義了一個(gè)RS并提交到Kubernetes集群中,Master節(jié)點(diǎn)上的Controller Manager組件就得到通知,定期巡檢系統(tǒng)中當(dāng)前存活的目標(biāo)Pod,并確保目標(biāo)Pod實(shí)例的數(shù)量剛好等于此RS的期望值,如果有過(guò)多的Pod副本在運(yùn)行,系統(tǒng)就會(huì)停掉多余的Pod;如果小于RS的期望值,系統(tǒng)就會(huì)自動(dòng)創(chuàng)建一些新的Pod,使其目標(biāo)Pod實(shí)例的數(shù)量等于RS的期望值。
  • Deployment
    Deployment為Pod和ReplicaSet提供聲明式更新,通過(guò)它來(lái)管理Pod和ReplicaSet。當(dāng)我們要部署一個(gè)Pod時(shí),需要?jiǎng)?chuàng)建、調(diào)度、綁定節(jié)點(diǎn)和啟動(dòng)容器這一完整過(guò)程,而Deployment就是負(fù)責(zé)這一整個(gè)部署過(guò)程的。
    Deployment的典型使用場(chǎng)景有以下幾個(gè):
    創(chuàng)建一個(gè)Deployment對(duì)象來(lái)生成對(duì)應(yīng)的ReplicaSet,并完成Pod副本的創(chuàng)建過(guò)程。
    檢查Deployment的狀態(tài)來(lái)查看部署工作是否完成(Pod副本的數(shù)量是否達(dá)到預(yù)期的值)。
    更新Deployment以創(chuàng)建新的Pod(比如鏡像升級(jí))。
    如果當(dāng)前Deployment不穩(wěn)定,則回滾到一個(gè)早先的Deployment版本。
    掛起或者恢復(fù)一個(gè)Deployment。
  • StatefulSet
    StatefulSet為Pod提供唯一標(biāo)識(shí),實(shí)現(xiàn)有序的部署、刪除和擴(kuò)展。Deployment用于部署無(wú)狀態(tài)服務(wù),StatefulSet用來(lái)部署有狀態(tài)服務(wù)。
    StatefulSet的使用場(chǎng)景如下:
    穩(wěn)定性,唯一的網(wǎng)絡(luò)標(biāo)識(shí)。
    穩(wěn)定性,持久化存儲(chǔ)。
    有序的部署和擴(kuò)展。
    有序的刪除和終止。
    有序的自動(dòng)滾動(dòng)更新。
  • DaemonSet
    DaemonSet能夠讓所有(或者特定)的Node節(jié)點(diǎn)運(yùn)行同一個(gè)Pod。當(dāng)節(jié)點(diǎn)加入到Kubernetes集群中,Pod會(huì)被DaemonSet調(diào)度到該節(jié)點(diǎn)上運(yùn)行,當(dāng)節(jié)點(diǎn)從集群中移除時(shí),被DaemonSet調(diào)度到該節(jié)點(diǎn)上的Pod也會(huì)被移除。如果刪除DaemonSet,與DaemonSet相關(guān)的Pod都會(huì)被刪除。
  • Job
    僅執(zhí)行一次的任務(wù),任務(wù)執(zhí)行完成后Pod銷毀,可批量處理一次性任務(wù)。還可以讓任務(wù)定時(shí)運(yùn)行。

    四、總結(jié)

    上述這些組件都是Kubernetes系統(tǒng)的核心組件,它們共同構(gòu)成了Kubernetes系統(tǒng)的框架和計(jì)算模型。通過(guò)對(duì)它們進(jìn)行靈活組合,用戶就可以快速、方便地對(duì)容器集群進(jìn)行配置、創(chuàng)建和管理。除了本文所介紹的核心組件,Kubernetes中還有許多輔助配置的資源對(duì)象,例如LimitRange、ResourceQuota等。另外,還有一些系統(tǒng)內(nèi)部使用的對(duì)象,例如Binding、Event等可參考官方API文檔。
    說(shuō)在最后
    本人也是剛接觸Kubernetes(K8s),本文內(nèi)容是摘自相關(guān)書籍和網(wǎng)上的相關(guān)資料,并結(jié)合自己的理解所寫的,如有理解錯(cuò)誤的地方還請(qǐng)大家不吝指出,共同進(jìn)步。
    由于國(guó)內(nèi)關(guān)于Kubernetes的學(xué)習(xí)資料很少,51cto上倒是有相關(guān)的訂閱專欄,但都是要錢的,對(duì)于這個(gè)我不做評(píng)論。這里向跟我一樣的初學(xué)者推薦一本書《Kubernetes權(quán)威指南(第2版)》,網(wǎng)上可以下載到PDF版本,雖然這本書講的Kubernetes的版本是1.3的,版本比較老,但對(duì)于初學(xué)者可以學(xué)習(xí)它的理論知識(shí),并結(jié)合網(wǎng)上新版本的相關(guān)資料自行理解,也是一種非常不錯(cuò)的學(xué)習(xí)方法。
    對(duì)Kubernetes(K8s)有興趣的朋友,可以關(guān)注我的博客,后面我會(huì)繼續(xù)發(fā)表學(xué)習(xí)Kubernetes的博文,歡迎各位朋友和我一起踏上Kubernetes(K8s)的旅程。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI