Kubernates基礎(chǔ)筆記

0.前言

首先要說(shuō)的一點(diǎn):這篇文章不是什么教程呵恢,單純是自己學(xué)習(xí)的筆記,如果有錯(cuò)誤望各位大佬指正。

1. Kubernetes

1.1 什么是Kubernetes

Kubernetes是一個(gè)開(kāi)源容器協(xié)調(diào)器逃魄,由Google開(kāi)發(fā)携茂,用于管理在容器環(huán)境中運(yùn)行的應(yīng)用程序坦辟。

1.2 為什么要使用容器

我們?cè)谶x擇的時(shí)候主要是在虛擬機(jī)和容器之間選擇鳄橘,這兩者具體的區(qū)別很多声离,但他們都有著類似的使命:對(duì)應(yīng)用程序及其關(guān)聯(lián)性進(jìn)行隔離,從而構(gòu)建起一套能夠隨處運(yùn)行的自容納單元瘫怜。
??主要區(qū)別术徊,在于:虛擬機(jī)多了一層Guest OS,虛擬機(jī)的Hypervisor會(huì)對(duì)硬件資源也進(jìn)行虛擬化鲸湃,而Container會(huì)直接使用宿主機(jī)的硬件資源赠涮。
??如下圖的左圖的虛擬機(jī)架構(gòu)中,我們的主機(jī)虛擬化了3個(gè)VM暗挑,每個(gè)VM又有自己的Guest OS笋除,這個(gè)就意味著需要模擬3個(gè)操作系統(tǒng)。對(duì)比右圖的容器架構(gòu)中炸裆,我們的3個(gè)容器都在一個(gè)操作系統(tǒng)上運(yùn)行垃它,并不需要模擬任何操作系統(tǒng)。所以相對(duì)左圖我們會(huì)消耗更少的資源烹看,并達(dá)到跟虛擬機(jī)架構(gòu)中等同的效果国拇。

image.png

簡(jiǎn)而言之,容器小巧惯殊,靈活且可移植酱吝,因此它們可以幫助您快速部署和管理應(yīng)用程序,并根據(jù)需求進(jìn)行擴(kuò)展或縮小靠胜。在容器部署模型中掉瞳,應(yīng)用程序不依賴于特定的主機(jī),因此可以以更有效的方式跨可用資源分布它們浪漠。這種環(huán)境非常適合部署微服務(wù)陕习。

1.3 什么是微服務(wù)

微服務(wù)是一種架構(gòu)風(fēng)格,它將應(yīng)用程序分解為一組松散耦合的服務(wù)址愿,這些服務(wù)可以是細(xì)粒度和輕量級(jí)的该镣。這種風(fēng)格促進(jìn)了模塊化,并行開(kāi)發(fā)响谓,持續(xù)交付以及許多其他好處损合。

1.4 微服務(wù)與kubernates的關(guān)系

擁有許多在容器上運(yùn)行的微服務(wù)可能會(huì)變得難以管理,因此這就是Kubernetes的用武之地:Kubernetes自動(dòng)化應(yīng)用程序容器的部署娘纷,擴(kuò)展和操作嫁审。并提供工具和API來(lái)管理容器上的生產(chǎn)工作負(fù)載。它還支持多個(gè)云和裸機(jī)環(huán)境赖晶,并且是為可擴(kuò)展性而設(shè)計(jì)的律适,因此有一個(gè)豐富的插件生態(tài)系統(tǒng)可以擴(kuò)展其功能辐烂。有用于調(diào)度,存儲(chǔ)捂贿,網(wǎng)絡(luò)等的插件纠修。

2. Kubernetes集群架構(gòu)

image.png

從上圖可以看出Kubernetes架構(gòu)基于Cluster的概念。集群由一個(gè)或多個(gè)稱為Node的虛擬機(jī)組成厂僧。每個(gè)Node代表一個(gè)計(jì)算主機(jī)扣草,我們可以在其中部署,運(yùn)行和管理容器化應(yīng)用程序颜屠。

2.1 Master節(jié)點(diǎn)

Node節(jié)點(diǎn)由Kubernetes的Master節(jié)點(diǎn)管理辰妙,Master節(jié)點(diǎn)控制和監(jiān)視集群中的所有Kubernetes資源。 kube-scheduler服務(wù)決定部署應(yīng)用程序的位置汽纤,同時(shí)考慮集群中的部署要求和可用容量上岗。Kubernetes主要由以下幾個(gè)核心組件組成:

  • etcd:
    用于 Kubernetes 的后端存儲(chǔ)。所有集群數(shù)據(jù)都存儲(chǔ)在此處蕴坪,始終為 Kubernetes 集群的 etcd 數(shù)據(jù)提供備份計(jì)劃;
  • apiserver:
    提供了資源操作的唯一入口敬锐,并提供認(rèn)證背传、授權(quán)、訪問(wèn)控制台夺、API注冊(cè)和發(fā)現(xiàn)等機(jī)制径玖;
  • controller manager:
    負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測(cè)颤介、自動(dòng)擴(kuò)展梳星、滾動(dòng)更新等;
  • scheduler:
    監(jiān)視沒(méi)有分配節(jié)點(diǎn)的新創(chuàng)建的 Pod滚朵,選擇一個(gè)節(jié)點(diǎn)供他們運(yùn)行冤灾。

2.2 Node節(jié)點(diǎn)

Node節(jié)點(diǎn)在 Kubernetes 主節(jié)點(diǎn)的控制下執(zhí)行被分配的任務(wù)。Kubernetes的node節(jié)點(diǎn)主要由以下幾個(gè)核心組件組成:

  • kubelet:
    是一個(gè)代理辕近,它在集群中的每個(gè)節(jié)點(diǎn)上運(yùn)行韵吨,與主服務(wù)器通信,并管理節(jié)點(diǎn)上的活動(dòng)和資源移宅,例如通過(guò)Docker運(yùn)行Pod容器归粉。它負(fù)責(zé)維護(hù)容器的生命周期,同時(shí)也負(fù)責(zé)Volume(CVI)和網(wǎng)絡(luò)(CNI)的管理漏峰;
  • kube-proxy:
    負(fù)責(zé)為Service提供cluster內(nèi)部的服務(wù)發(fā)現(xiàn)和負(fù)載均衡糠悼;
  • Pod:
    Kubernetes創(chuàng)建一個(gè)Pod來(lái)托管應(yīng)用程序?qū)嵗?Pod可以包括一個(gè)或多個(gè)應(yīng)用程序Container和一些共享資源,例如存儲(chǔ)浅乔,網(wǎng)絡(luò)信息等倔喂。 Pod中的Container共享IP地址和端口空間,始終位于同一位置并共同調(diào)度,并在同一節(jié)點(diǎn)上的共享上下文中運(yùn)行滴劲。

由于可以在向上或向下擴(kuò)展或進(jìn)行滾動(dòng)更新的過(guò)程中動(dòng)態(tài)創(chuàng)建和銷毀Pod攻晒,因此Pod IP地址可能會(huì)隨著時(shí)間的推移而發(fā)生變化。如果某些Pod為其他Pod提供功能班挖,并且地址發(fā)生變化鲁捏,他們?nèi)绾蜗嗷ジ櫍?/p>

答案是Service

2.3 Service

Service是一種策略萧芙,它將一組Pod定義為端點(diǎn)给梅,以及用于訪問(wèn)它們。當(dāng)Service中的Pod集發(fā)生變化時(shí)双揪,Kubernetes可以更新端點(diǎn)动羽。

與部署一樣,我們可以在YAML文件中定義服務(wù)渔期。 Kubernetes為服務(wù)分配“集群IP地址”运吓,kube-proxy使用此地址來(lái)適當(dāng)?shù)芈酚烧?qǐng)求。

具體的在下一節(jié)介紹疯趟。

3. Kubernetes資源

Kubernetes資源之間的關(guān)系:

  • 用戶通過(guò) kubectl 創(chuàng)建 Deployment拘哨。
  • Deployment 創(chuàng)建 ReplicaSet。
  • ReplicaSet 創(chuàng)建 Pod信峻。
image.png

3.1 Deployments

Deployments是kubernetes中的一種控制器倦青,是比ReplicaSet更高級(jí)的概念,它最重的特性是支持對(duì)pod與ReplicaSet的聲明式升級(jí)盹舞,聲明式升級(jí)比其它方式的升級(jí)更安全可靠产镐。需要注意的是用戶不應(yīng)該手動(dòng)管理被Deployments創(chuàng)建的ReplicaSet。

以下是幾種典型的Deployments使用案例:

  • Create a Deployment to rollout a ReplicaSet. The ReplicaSet creates Pods in the background. Check the status of the rollout to see if it succeeds or not.
  • Declare the new state of the Pods by updating the PodTemplateSpec of the Deployment. A new ReplicaSet is created and the Deployment manages moving the Pods from the old + **ReplicaSet to the new one at a controlled rate. Each new ReplicaSet updates the revision of the Deployment.
  • Rollback to an earlier Deployment revision if the current state of the Deployment is not stable. Each rollback updates the revision of the Deployment.
  • Scale up the Deployment to facilitate more load.
  • Pause the Deployment to apply multiple fixes to its PodTemplateSpec and then resume it to start a new rollout.
  • Use the status of the Deployment as an indicator that a rollout has stuck.
  • Clean up older ReplicaSets that you don’t need anymore.

3.2 ReplicaSets

用戶創(chuàng)建指定數(shù)量的pod副本數(shù)量踢步,確保pod副本數(shù)量符合預(yù)期狀態(tài)癣亚,并且支持滾動(dòng)式自動(dòng)擴(kuò)容和縮容功能。

ReplicaSet主要三個(gè)組件組成:

  • 用戶期望的pod副本數(shù)量
  • 標(biāo)簽選擇器贾虽,判斷哪個(gè)pod歸自己管理
  • 當(dāng)現(xiàn)存的pod數(shù)量不足逃糟,會(huì)根據(jù)pod資源模板進(jìn)行新建

幫助用戶管理無(wú)狀態(tài)的pod資源,精確反應(yīng)用戶定義的目標(biāo)數(shù)量蓬豁,但是RelicaSet不是直接使用的控制器绰咽,而是使用Deployment。

3.3 Pods

Pod是Kubernetes最基本的操作單元地粪,包含一個(gè)或多個(gè)緊密相關(guān)的容器取募,一個(gè)Pod可以被一個(gè)容器化的環(huán)境看作應(yīng)用層的“邏輯宿主機(jī)”;一個(gè)Pod中的多個(gè)容器應(yīng)用通常是緊密耦合的蟆技,Pod在Node上被創(chuàng)建玩敏、啟動(dòng)或者銷毀斗忌;每個(gè)Pod里運(yùn)行著一個(gè)特殊的被稱之為Pause的容器,其他容器則為業(yè)務(wù)容器旺聚,這些業(yè)務(wù)容器共享Pause容器的網(wǎng)絡(luò)棧和Volume掛載卷织阳,因此他們之間通信和數(shù)據(jù)交換更為高效,在設(shè)計(jì)時(shí)我們可以充分利用這一特性將一組密切相關(guān)的服務(wù)進(jìn)程放入同一個(gè)Pod中砰粹。

同一個(gè)Pod里的容器之間僅需通過(guò)localhost就能互相通信唧躲。

image.png

Pod的生命周期通過(guò)Replication Controller來(lái)管理;通過(guò)模板進(jìn)行定義碱璃,然后分配到一個(gè)Node上運(yùn)行弄痹,在Pod所包含容器運(yùn)行結(jié)束后,Pod結(jié)束嵌器。

&Kubernetes為Pod設(shè)計(jì)了一套獨(dú)特的網(wǎng)絡(luò)配置肛真,包括:為每個(gè)Pod分配一個(gè)IP地址,使用Pod名作為容器間通信的主機(jī)名等爽航。

3.4 Services

如前所述蚓让,Service是一種對(duì)象抽象,它定義了訪問(wèn)Pod或Pod集的策略岳掐。 Kubernetes Services支持協(xié)議的TCP和UDP凭疮。默認(rèn)值為T(mén)CP。

在Kubernetes中串述,Kubernetes有4種外部訪問(wèn)方式,Service types確定服務(wù)的部署方式及其行為方式:

  • ClusterIP
    將服務(wù)內(nèi)部暴露給Cluster IP地址上寞肖。此類型是默認(rèn)類型纲酗。
  • NodePort:在NodePort指定的端口上的每個(gè)集群節(jié)點(diǎn)的IP地址上公開(kāi)服務(wù)。將自動(dòng)創(chuàng)建關(guān)聯(lián)的ClusterIP服務(wù)新蟆。
    該服務(wù)可通過(guò)<任何節(jié)點(diǎn)IP>:<NodePort>訪問(wèn)觅赊,也可通過(guò)ClusterIP在內(nèi)部訪問(wèn),并可指定或自動(dòng)分配琼稻。
  • LoadBalancer
    使用云提供商的負(fù)載均衡器在外部公開(kāi)服務(wù)吮螺。創(chuàng)建關(guān)聯(lián)的NodePort和ClusterIP服務(wù)。
  • ExternalName
    通過(guò)返回帶有值的CNAME記錄將服務(wù)映射到externalName字段帕翻。沒(méi)有配置任何類型的代理鸠补。

集群外部訪問(wèn)Pod或Service的方法?

大多數(shù)組織不希望將敏感數(shù)據(jù)直接暴露給Internet嘀掸,通常紫岩,可以為前端(BFF)或API網(wǎng)關(guān)構(gòu)建后端,以控制對(duì)后端資源的訪問(wèn)睬塌。然后泉蝌,請(qǐng)求通過(guò)Kubernetes內(nèi)部網(wǎng)絡(luò)歇万,可由LoadBalancer,Ingress或NodePort處理勋陪。NodePort不適用生產(chǎn)環(huán)境贪磺,所以只有LoadBalancer,Ingress可供選擇诅愚,他們兩個(gè)的優(yōu)缺點(diǎn)如下所示:

image.png

3.5 Volumn

Volumn是具有生命周期寒锚,并且可以比容器更長(zhǎng),從而在容器重啟之間保留數(shù)據(jù)呻粹。 Kubernetes Volumn是可由Pod中的容器訪問(wèn)的目錄壕曼。

  • **emptyDir:
    **將Pod分配給節(jié)點(diǎn)時(shí)創(chuàng)建emptyDir實(shí)例。 Pod在該節(jié)點(diǎn)上運(yùn)行時(shí)存在emptyDir等浊。如其名稱所示腮郊,它最初是空的。當(dāng)出于任何原因從節(jié)點(diǎn)中刪除Pod時(shí)筹燕,將永久刪除emptyDir中的數(shù)據(jù)轧飞。

  • **NFS:
    **允許將NFS(網(wǎng)絡(luò)文件系統(tǒng))共享安裝到Pod中的volumn。與刪除Pod時(shí)刪除的emptyDir不同撒踪,NFSvolumn的內(nèi)容將被保留过咬,并且將卸載Volume。 NFS volumn可以預(yù)先填充數(shù)據(jù)制妄,并且可以在Pod之間移動(dòng)數(shù)據(jù)掸绞。 NFS可以由多個(gè)編寫(xiě)器同時(shí)安裝。

如下圖所示耕捞,Kubernetes Volumn主要解決了以下問(wèn)題:

  • Pods(容器)是短暫的衔掸。如果容器崩潰,數(shù)據(jù)將丟失俺抽。
  • Pod中運(yùn)行多個(gè)容器敞映,這些容器可能需要共享數(shù)據(jù)。
  • Docker也有Volume的概念磷斧,但它只是磁盤(pán)或容器中的目錄振愿。
image.png

名詞解釋:

  • PV(PersistentVolume):
    集群中已由管理員配置的一段網(wǎng)絡(luò)存儲(chǔ)。 集群中的資源就像一個(gè)節(jié)點(diǎn)是一個(gè)集群資源弛饭。 PV是諸如卷之類的卷插件冕末,但是具有獨(dú)立于使用PV的任何單個(gè)pod的生命周期。 該API對(duì)象捕獲存儲(chǔ)的實(shí)現(xiàn)細(xì)節(jié)孩哑,即NFS栓霜,iSCSI或云提供商特定的存儲(chǔ)系統(tǒng)。

  • PVC(PersistentVolumeClaim):
    是用戶存儲(chǔ)的請(qǐng)求横蜒。 它類似于pod胳蛮。Pod消耗節(jié)點(diǎn)資源销凑,PVC消耗存儲(chǔ)資源。 pod可以請(qǐng)求特定級(jí)別的資源(CPU和內(nèi)存)仅炊。 權(quán)限要求可以請(qǐng)求特定的大小和訪問(wèn)模式斗幼。

  • StorageClass:
    雖然PersistentVolumeClaims允許用戶使用抽象存儲(chǔ)資源,但是用戶需要具有不同屬性(如性能)的PersistentVolumes抚垄,用于不同的問(wèn)題蜕窿。 群集管理員需要能夠提供多種不同于PersistentVolumes的PersistentVolumes,而不僅僅是大小和訪問(wèn)模式呆馁,而不會(huì)使用戶了解這些卷的實(shí)現(xiàn)細(xì)節(jié)桐经。 對(duì)于這些需求,存在StorageClass資源浙滤。
    ??StorageClass為管理員提供了一種描述他們提供的存儲(chǔ)的“類”的方法阴挣。 不同的類可能映射到服務(wù)質(zhì)量級(jí)別,或備份策略纺腊,或者由群集管理員確定的任意策略畔咧。 Kubernetes本身對(duì)于什么類別代表是不言而喻的。 這個(gè)概念有時(shí)在其他存儲(chǔ)系統(tǒng)中稱為“配置文件”

PV是集群中的資源揖膜。 PVC是對(duì)這些資源的請(qǐng)求誓沸,也是對(duì)資源的索賠檢查。 PV和PVC之間的相互作用遵循這個(gè)生命周期:

Provisioning ——-> Binding ——–>Using——>Releasing——>Recycling

Provisioning
這里有兩種PV的提供方式: 靜態(tài)或者動(dòng)態(tài)

靜態(tài):集群管理員創(chuàng)建多個(gè)PV壹粟。它們包含真實(shí)存儲(chǔ)的詳細(xì)信息拜隧,可供用戶使用。它們存在于Kubernetes API中趁仙,可供使用虹蓄。
動(dòng)態(tài):當(dāng)管理員創(chuàng)建的靜態(tài)PV都不匹配用戶的PVC時(shí),集群可能會(huì)嘗試為PVC動(dòng)態(tài)配置volumn幸撕。此配置基于StorageClasses。要進(jìn)行動(dòng)態(tài)配置外臂,管理員必須創(chuàng)建和配置存儲(chǔ)類坐儿,并且PVC必須請(qǐng)求該存儲(chǔ)類。

就先寫(xiě)這么多宋光,to be continue...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末貌矿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子罪佳,更是在濱河造成了極大的恐慌逛漫,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赘艳,死亡現(xiàn)場(chǎng)離奇詭異酌毡,居然都是意外死亡克握,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)枷踏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)菩暗,“玉大人,你說(shuō)我怎么就攤上這事旭蠕⊥M牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵掏熬,是天一觀的道長(zhǎng)佑稠。 經(jīng)常有香客問(wèn)我,道長(zhǎng)旗芬,這世上最難降的妖魔是什么舌胶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮岗屏,結(jié)果婚禮上辆琅,老公的妹妹穿的比我還像新娘。我一直安慰自己这刷,他們只是感情好婉烟,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著暇屋,像睡著了一般似袁。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咐刨,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天昙衅,我揣著相機(jī)與錄音,去河邊找鬼定鸟。 笑死而涉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的联予。 我是一名探鬼主播啼县,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沸久!你這毒婦竟也來(lái)了季眷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤卷胯,失蹤者是張志新(化名)和其女友劉穎子刮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體窑睁,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挺峡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年葵孤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沙郭。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佛呻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出病线,到底是詐尸還是另有隱情吓著,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布送挑,位于F島的核電站绑莺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏惕耕。R本人自食惡果不足惜纺裁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望司澎。 院中可真熱鬧欺缘,春花似錦、人聲如沸挤安。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛤铜。三九已至嫩絮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間围肥,已是汗流浹背剿干。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留穆刻,地道東北人置尔。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像氢伟,于是被迫代替她去往敵國(guó)和親撰洗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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