日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

k8s 基础介绍及概念

發(fā)布時(shí)間:2024/2/28 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 k8s 基础介绍及概念 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

k8s 的介紹

k8s 的介紹
容器化相對(duì)于傳統(tǒng)虛擬化優(yōu)勢(shì)
選擇docker容器部署要使用k8s的原因
k8s Master節(jié)點(diǎn)和Node節(jié)點(diǎn)各個(gè)節(jié)點(diǎn)組件間的關(guān)系
?Master節(jié)點(diǎn)組件介紹
Node節(jié)點(diǎn)組件介紹
k8s 核心概念
? ??1. Deployment :
? ??2. Service:
? ??3. Namespace:
? ??4. Label:
? ??5. Label選擇器:
? ??6. Annotation:
? ??7. Ingress:


容器化相對(duì)于傳統(tǒng)虛擬化優(yōu)勢(shì)

如果要選擇Kubernetes ,首先就需要知道為什么會(huì)選擇容器化。

? ? 傳統(tǒng)方式是將所有應(yīng)用直接部署在同一個(gè)物理機(jī)器節(jié)點(diǎn)上,這樣每個(gè)App的依賴都是完全相同的,無(wú)法做到App之間隔離,當(dāng)然,為了隔離,我們也可以通過(guò)創(chuàng)建虛擬機(jī)的方式來(lái)將App部署到其中,但這樣太過(guò)繁重,移植性太差,故比虛擬機(jī)更輕便的Docker技術(shù)出現(xiàn),現(xiàn)在我們通過(guò)部署Container容器的技術(shù)來(lái)部署應(yīng)用,全部Container運(yùn)行在容器引擎上即可。
? ? 既然嫌棄虛擬機(jī)繁重,移植性太差,想用Docker,那好,你用吧,怎么用呢?手動(dòng)一個(gè)一個(gè)創(chuàng)建?當(dāng)然不,故ks8技術(shù)便出現(xiàn)了,以Kubernetes 為代表的容器集群管理系統(tǒng),這時(shí)候就該上場(chǎng)表演了。

選擇docker容器部署要使用k8s的原因

k8s 全稱Kubernetes(以下簡(jiǎn)稱k8s,k和s之間有8個(gè)字母),是Google 開(kāi)源的容器管理系統(tǒng),可以實(shí)現(xiàn)容器集群的自動(dòng)化部署、自動(dòng)擴(kuò)縮容、維護(hù)等功能。

k8s作為容器編排調(diào)度引擎 ,能夠相比沒(méi)有這個(gè)一個(gè)平臺(tái)有如下好處:

(1) 簡(jiǎn)化應(yīng)用部署
(2)提高硬件資源利用率
(3)健康檢查和自修復(fù)
(4)自動(dòng)擴(kuò)容縮容
(5)服務(wù)發(fā)現(xiàn)和負(fù)載均衡

Kubernetes Master節(jié)點(diǎn)和Node節(jié)點(diǎn)各個(gè)節(jié)點(diǎn)組件間的關(guān)系

?

Master節(jié)點(diǎn)組件介紹

Kubernetes 中Master指的是集群控制節(jié)點(diǎn),每個(gè)Kubernetes 集群中有一個(gè)master節(jié)點(diǎn)負(fù)載整個(gè)集群的管理和和控制,基本Kubernetes 的所有控制命令都發(fā)給它,它負(fù)責(zé)具體執(zhí)行過(guò)程,我們命令都是在master節(jié)點(diǎn)上運(yùn)行的。

**api server:**負(fù)責(zé)對(duì)外提供restful的Kubernetes API服務(wù),提供了資源操作的唯一入口,并提供認(rèn)證、授權(quán)、訪問(wèn)控制、API 注冊(cè)和發(fā)現(xiàn)等機(jī)制。我們操作kubectl 和其他Master組件都通過(guò)調(diào)用api server提供的rest接口實(shí)現(xiàn)各自的功能,如controller就是通過(guò)api server來(lái)實(shí)時(shí)監(jiān)控各個(gè)資源的狀態(tài)的。

**etcd:**是 Kubernetes 提供的一個(gè)高可用的鍵值數(shù)據(jù)庫(kù),用于保存集群所有的網(wǎng)絡(luò)配置和資源對(duì)象的狀態(tài)信息,也就是保存了整個(gè)集群的狀態(tài)。數(shù)據(jù)變更都是通過(guò)api server進(jìn)行的。整個(gè)kubernetes系統(tǒng)中一共有兩個(gè)服務(wù)需要用到etcd用來(lái)協(xié)同和存儲(chǔ)配置,分別是:
1)網(wǎng)絡(luò)插件flannel,其它網(wǎng)絡(luò)插件也需要用到etcd存儲(chǔ)網(wǎng)絡(luò)的配置信息;
2)kubernetes本身,包括各種資源對(duì)象的狀態(tài)和元信息配置。

**scheduler:**監(jiān)聽(tīng)新建pod副本信息,并通過(guò)調(diào)度算法為該pod選擇一個(gè)最合適的Node節(jié)點(diǎn)。會(huì)檢索到所有符合該pod要求的Node節(jié)點(diǎn),執(zhí)行pod調(diào)度邏輯。調(diào)度成功之后,會(huì)將pod信息綁定到目標(biāo)節(jié)點(diǎn)上,同時(shí)將信息寫(xiě)入到etcd中。一旦綁定,就由Node上的kubelet接手pod的接下來(lái)的生命周期管理。Kubernetes目前提供了調(diào)度算法,但是同樣也保留了接口,用戶可以根據(jù)自己的需求定義自己的調(diào)度算法。

**controller manager:**負(fù)責(zé)維護(hù)集群的狀態(tài),比如故障檢測(cè)、自動(dòng)擴(kuò)展、滾動(dòng)更新等。每個(gè)資源一般都對(duì)應(yīng)有一個(gè)控制器,這些controller通過(guò)api server實(shí)時(shí)監(jiān)控各個(gè)資源的狀態(tài),controller manager就是負(fù)責(zé)管理這些控制器的。當(dāng)有資源因?yàn)楣收蠈?dǎo)致?tīng)顟B(tài)變化,controller就會(huì)嘗試將系統(tǒng)由“現(xiàn)有狀態(tài)”恢復(fù)到“期待狀態(tài)”,保證其下每一個(gè)controller所對(duì)應(yīng)的資源始終處于期望狀態(tài)。比如我們通過(guò)api server創(chuàng)建一個(gè)pod,當(dāng)這個(gè)pod創(chuàng)建成功后,api server的任務(wù)就算完成了。其中一個(gè)pod出現(xiàn)問(wèn)題,controller會(huì)自動(dòng)恢復(fù)創(chuàng)建新的pod。

Node節(jié)點(diǎn)組件介紹

除了Master,k8s 集群中其他機(jī)器被稱為node節(jié)點(diǎn),node節(jié)點(diǎn)才是k8s集群中中工作負(fù)載節(jié)點(diǎn),每個(gè)node節(jié)點(diǎn)都會(huì)被Master節(jié)點(diǎn)分配工作負(fù)載。當(dāng)某個(gè)node宕機(jī)是,其上工作被Master分配到其他節(jié)點(diǎn)上去。

?

kubelet:?會(huì)監(jiān)視已分配給節(jié)點(diǎn)的pod,負(fù)責(zé)pod的生命周期管理,同時(shí)與Master密切協(xié)作,維護(hù)和管理該Node上面的所有容器,實(shí)現(xiàn)集群管理的基本功能。即Node節(jié)點(diǎn)通過(guò)kubelet與master組件交互,可以理解為kubelet是Master在每個(gè)Node節(jié)點(diǎn)上面的agent。本質(zhì)上,它負(fù)責(zé)使Pod的運(yùn)行狀態(tài)與期望的狀態(tài)一致。

kube-proxy:?是實(shí)現(xiàn)service的通信與負(fù)載均衡機(jī)制的重要組件,將到service的請(qǐng)求轉(zhuǎn)發(fā)到后端的pod上。

docker-engine(docker):?是負(fù)責(zé)容器的創(chuàng)建和管理工作。

Pod:?最小部署單元,一個(gè)Pod 有一個(gè)或多個(gè)容器組成,容器中共享存儲(chǔ)和網(wǎng)絡(luò),在同一臺(tái)docker主機(jī)上運(yùn)行。

之所以采用pod作為k8s的最小部署單元是:

原因一:在一組容器相互關(guān)聯(lián)的情況下,我們難以對(duì)整體進(jìn)行檢點(diǎn)判斷及恢復(fù)等操作。比如一個(gè)容器死亡了,不知道是否影響整體的運(yùn)行。如果引入pod引入業(yè)務(wù)無(wú)關(guān)的Pause容器作為pod的根容器,以他的狀態(tài)代表容器組的狀態(tài)。

原因二:pod里面多個(gè)容器共享pause的容器IP,共享容器掛接的volume,簡(jiǎn)化了管理密切業(yè)務(wù)容器直接的通信和文件共享問(wèn)題。

K8S 核心概念

1. Deployment :

定義:
? ? ? Deployment 的主要功能是保證Pod的數(shù)量、健康,彈性收縮等、回滾功能(當(dāng)升級(jí) pod 鏡像或者相關(guān)參數(shù)的時(shí)候,如果有錯(cuò)誤,可以回滾到上一個(gè)穩(wěn)定版本),版本記錄(每一次對(duì) Deployment 的操作都能保存下來(lái))。暫停和啟動(dòng)(升級(jí)的時(shí)候,能隨時(shí)暫停和啟動(dòng))。
場(chǎng)景:

  • 使用Deployment來(lái)創(chuàng)建ReplicaSet。ReplicaSet在后臺(tái)創(chuàng)建pod。檢查啟動(dòng)狀態(tài),看它是成功還是失敗。
  • 然后,通過(guò)更新Deployment的PodTemplateSpec字段來(lái)聲明Pod的新?tīng)顟B(tài)。這會(huì)創(chuàng)建一個(gè)新的ReplicaSet,Deployment會(huì)按照控制的速率將pod從舊的ReplicaSet移動(dòng)到新的ReplicaSet中。
  • 如果當(dāng)前狀態(tài)不穩(wěn)定,回滾到之前的Deployment revision。每次回滾都會(huì)更新Deployment的revision。
  • 擴(kuò)容Deployment以滿足更高的負(fù)載。
  • 暫停Deployment來(lái)應(yīng)用PodTemplateSpec的多個(gè)修復(fù),然后恢復(fù)上線。
  • 根據(jù)Deployment 的狀態(tài)判斷上線是否hang住了。
  • 清除舊的不必要的 ReplicaSet。

2. Service:

定義:
? ? ? Pod存在生命周期,有銷(xiāo)毀,有重建,無(wú)法提供一個(gè)固定的訪問(wèn)接口給客戶端,存在生命周期,屬于不可再生類組件。而在動(dòng)態(tài)和彈性的管理模式下,Service為該類Pod對(duì)象提供了一個(gè)固定、統(tǒng)一的訪問(wèn)接口和負(fù)載均衡能力。

3. Namespace:

定義:
? ? ??Kubernetes可以使用Namespaces(命名空間)創(chuàng)建多個(gè)虛擬集群。
說(shuō)明:
? ? ?用于實(shí)現(xiàn)多租戶的資源隔離。Namespace通過(guò)集群內(nèi)部的資源對(duì)象“分配”到不同的Namespace中,形成邏輯上分組不同的項(xiàng)目、小組或用戶組,從而使不同的分組在共享整個(gè)集群的資源,同時(shí)還能被k8s分別管理。
場(chǎng)景:
? ? ? 當(dāng)團(tuán)隊(duì)或項(xiàng)目中具有許多用戶時(shí),可以考慮使用Namespace來(lái)區(qū)分,a如果是少量用戶集群,可以不需要考慮使用Namespace,如果需要它們提供特殊性質(zhì)時(shí),可以開(kāi)始使用Namespace。

4. Label:

定義:
? ? ?Labels其實(shí)就一對(duì) key/value ,被關(guān)聯(lián)到對(duì)象上,標(biāo)簽的使用我們傾向于能夠標(biāo)示對(duì)象的特殊特點(diǎn),并且對(duì)用戶而言是有意義的(就是一眼就看出了這個(gè)Pod是尼瑪數(shù)據(jù)庫(kù)),但是標(biāo)簽對(duì)內(nèi)核系統(tǒng)是沒(méi)有直接意義的。標(biāo)簽可以用來(lái)劃分特定組的對(duì)象(比如,所有女的),標(biāo)簽可以在創(chuàng)建一個(gè)對(duì)象的時(shí)候直接給與,也可以在后期隨時(shí)修改,每一個(gè)對(duì)象可以擁有多個(gè)標(biāo)簽,但是,key值必須是唯一的
說(shuō)明:
? ? ??通過(guò)Label進(jìn)行對(duì)象弱關(guān)聯(lián),靈活地分類和選擇不同服務(wù)或業(yè)務(wù),讓用戶根據(jù)自己特定的組織結(jié)構(gòu)以松耦合方式進(jìn)行服務(wù)部署。Label是一對(duì)KV,對(duì)用戶而言非常有意義的,但對(duì)K8S本身而言沒(méi)有直接意義的。Label可以在創(chuàng)建對(duì)象時(shí)指定,也可以在后期修改,每個(gè)對(duì)象可以擁有多個(gè)標(biāo)簽,但key值必須是唯一的。

5. Label選擇器:

定義:

? ? ? 與Name和UID?不同,標(biāo)簽不需要有唯一性。一般來(lái)說(shuō),我們期望許多對(duì)象具有相同的標(biāo)簽。

通過(guò)標(biāo)簽選擇器(Labels Selectors),客戶端/用戶 能方便辨識(shí)出一組對(duì)象。標(biāo)簽選擇器是kubernetes中核心的組成部分。

6. Annotation:

定義:

? ? ? 可以使用Kubernetes Annotations將任何非標(biāo)識(shí)metadata附加到對(duì)象。客戶端(如工具和庫(kù))可以檢索此metadata。

說(shuō)明:
? ? ? Annotation與Label類似,也使用key/value鍵值對(duì)的形式進(jìn)行定義。

? ? ?Label具有嚴(yán)格的命名規(guī)則,它定義的是Kubernetes對(duì)象的元數(shù)據(jù)(Metadata),并且用于Label Selector。

? ? ? Annotation 則是用戶任意定義的“附加”信息,以便于外部工具進(jìn)行查找。

? ? ? 可以使用Labels或Annotations將元數(shù)據(jù)附加到Kubernetes對(duì)象。Labels 可用于選擇對(duì)象并查找滿足某些條件的對(duì)象集合。相比之下,Annotations不用于標(biāo)識(shí)和選擇對(duì)象。

場(chǎng)景:

? ? ? 日志庫(kù)、監(jiān)控庫(kù)、分析庫(kù)等資源庫(kù)的地址信息;

? ? ? 程序調(diào)試工具信息,例如工具名稱、版本號(hào)等;

? ? ? 團(tuán)隊(duì)的聯(lián)系信息,例如電話號(hào)碼、負(fù)責(zé)人名稱、網(wǎng)址等。

7. Ingress:

? ? 可以給Ingress配置提供外部可訪問(wèn)的URL、負(fù)載均衡、SSL、基于名稱的虛擬主機(jī)等。用戶通過(guò)POST Ingress資源到API server的方式來(lái)請(qǐng)求ingress

總結(jié)

以上是生活随笔為你收集整理的k8s 基础介绍及概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。