溫馨提示×

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

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

Kubernetes的工作原理是什么

發(fā)布時(shí)間:2021-07-30 17:46:36 來源:億速云 閱讀:462 作者:Leah 欄目:云計(jì)算

Kubernetes的工作原理是什么,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

1. Kubernetes 核心組件分析

1.1 核心概念:Pod

  • Pod 是 Kubernetes 中最小的可部署的計(jì)算單元

  • 這樣的一組容器被“打包”到一起組成了一個(gè)Pod 并接受 Kubernetes 的調(diào)度,編排等控制邏輯。

  • 為了讓大家更好的理解“一組容器“的概念,接下來為大家詳細(xì)剖析 Pod 的內(nèi)部架構(gòu)。

Pod 的內(nèi)部架構(gòu)

Kubernetes的工作原理是什么

藍(lán)色部分代表的是整個(gè) Pod。其中右上角的net namespace 是 Pod 級(jí)別的 namespace,它代表了 Pod 中的所有容器。

圖中有4個(gè) Container(即:PauseContainer/Container A/Container B/Container C/),他們?cè)趧?chuàng)建的時(shí)候都被加入到了 namespace 當(dāng)中。

那么,Pod 級(jí)別的 Container 是從哪里來的呢?從圖中可以看到,真正工作的 Container 我們把它標(biāo)注為 A,B,C。Pause Container 的作用相當(dāng)于一個(gè)占位符。當(dāng)我們創(chuàng)建 Pod 的時(shí)候,會(huì)首先創(chuàng)建一個(gè) Pause Container。該容器創(chuàng)建出來的namespace,就相當(dāng)于整個(gè) Pod 的 namespace。然后后面的容器再創(chuàng)建出來(比如說Container A/B/C)這些容器在創(chuàng)建出來的時(shí)候,就都會(huì)選擇加入到 Pause Container 創(chuàng)建出來的 net namespace 當(dāng)中。

當(dāng)然,也不是所有的 namespace 都是不隔離的。Container 左側(cè)是一個(gè) image,每一個(gè) container 都有一個(gè)鏡像,每一個(gè)鏡像又相當(dāng)于一個(gè)容器的 Root ffs。既然每個(gè)容器的 Root ffs 是不相同的,那么顯而易見,mnt namespace 就是隔離的。

這樣我們就可以清楚地看到,哪些 namespce 在 Pod 當(dāng)中是互相隔離的,而哪些是在  Pod 級(jí)別當(dāng)中共享的。

Pod 在 Kubernetes 中的展現(xiàn)形式

Kubernetes的工作原理是什么

通常,我們習(xí)慣用 Yaml 來描述 Kubernetes 里的資源。Yaml 中的內(nèi)容其實(shí)就是我們對(duì)資源參數(shù)的描述。

我們先看 Pod 在 Yaml 中的前四行。這四行是資源在 Yaml 中的通用字段。ApiVersion/kind 用于表示 Kubernetes 的資源類型是什么。通過 metadata 來聲明資源的源數(shù)據(jù)。Spec 字段和資源類型是強(qiáng)相關(guān)的了。不同的資源會(huì)有不同的 spec 定義。那在 Pod 資源當(dāng)中,最核心的是關(guān)于容器的定義了。

下面幾行,關(guān)于容器的定義,是一個(gè)數(shù)組類型的,這也符合我們對(duì) Pod 的定義:即它是由一組容器形成的。這些字段包含:聲明容器鏡像,啟動(dòng)容器的命令,容器鏡像的拉取方式,以及容器的名稱。


1.2 核心概念 Kubelet

Kubelet 是 Kubernetes 集群的“節(jié)點(diǎn)代理”。也可以說是 Kubernetes 部署在每個(gè)節(jié)點(diǎn)的agent。

Kubelet 啟動(dòng)后會(huì)向 Kubernetes 集群注冊(cè)自己,并上報(bào)節(jié)點(diǎn)的相關(guān)信息。此時(shí)在 Kubernetes 集群中就增加了一臺(tái)新的可用的 Node 節(jié)點(diǎn)(可能是一個(gè)物理機(jī),也可能是一個(gè)虛擬機(jī),甚至是一個(gè)容器)。

Kubelet 發(fā)現(xiàn)有屬于自己節(jié)點(diǎn)的 Pod 符合創(chuàng)建條件后,會(huì)按照Pod聲明的配置去啟動(dòng)容器。

1.3 Kubernetes 控制面的相關(guān)組件

Kubernetes的工作原理是什么

上面這張圖分為3個(gè)部分作介紹:

1. 下半部分:也就是之前介紹過的Kubelet/Pod。

2. 左上角:Kubectl。也就是Kubernetes 的命令行工具??梢酝ㄟ^Kubectl來提交資源的Yaml 給Kubernetes 集群。也可以進(jìn)行一系列的運(yùn)維操作。

3. 右面:Master 節(jié)點(diǎn)。也就是Kubernetes 控制面的相關(guān)組件了。其中,API Sever是Kubernetes 中所有源數(shù)據(jù)的集成入口。也是整個(gè)Kubernetes 集群的中樞組件。其他組件(包括Controller, Scheduler等)在獲取數(shù)據(jù)都需要和API Sever 打交道。API Sever 也會(huì)接受這些組件的協(xié)入請(qǐng)求,并最終將數(shù)據(jù)寫入ETCD 當(dāng)中。同時(shí),API Sever 也會(huì)緩存所有的源數(shù)據(jù)。當(dāng)其他組件發(fā)起“讀”請(qǐng)求時(shí),就會(huì)將數(shù)據(jù)直接從內(nèi)存中發(fā)給對(duì)方。盡量避免ETCD 成為系統(tǒng)的瓶頸。除了源數(shù)據(jù)存儲(chǔ)功能,API Server 還提供了一個(gè)Watch 機(jī)制。能夠主動(dòng)推送某種資源的變化。而Scheduler會(huì)向API Sever 注冊(cè)并且監(jiān)聽Pod 的資源變更事件。Scheduler 整體的調(diào)度邏輯可以簡(jiǎn)化并概括為兩個(gè):過濾、打分。

每次對(duì)Pod進(jìn)行調(diào)度的時(shí)候,首先將不符合條件的Node(如:機(jī)器上已經(jīng)沒有資源了,不符合某些標(biāo)簽,選擇器的要求等)過濾掉。過濾完成后我們得到一個(gè)符合要求的Node列表,Scheduler  會(huì)通過打分算法,來計(jì)算每一個(gè)Node 的分?jǐn)?shù)。最終選擇一個(gè)得分最高的節(jié)點(diǎn)做為Pod 需要綁定的節(jié)點(diǎn)。最終Scheduler 會(huì)將結(jié)果回寫到API Sever 當(dāng)中。

編排組件:Controller。Controller 通過幾種固定的workload。通過控制器的方式,來完成運(yùn)行時(shí)服務(wù)器的編排工作。

2. 快速搭建 Kubernetes 集群

2.1 搭建工具:Kubeadm 簡(jiǎn)介

Kubeadm 是 Kubernetes 官方提供的用于快速安裝 Kubernetes 集群的工具。

下圖是 Kubeadm 的配置文件

Kubernetes的工作原理是什么

在配置文件當(dāng)中,我們指定了 dns 的類型,ETCD 存儲(chǔ)目錄以及要?jiǎng)?chuàng)建的 Kubernetes 的版本以及相關(guān)的參數(shù)。

2.2 搭建環(huán)境

初始 Master 節(jié)點(diǎn)

Kubeadm init—config kubeadm.conf

Kubernetes的工作原理是什么


安裝 flannel cni

https://raw.githusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Kubernetes的工作原理是什么

3. Demo:演示如何操作一個(gè) Pod

創(chuàng)建一個(gè) Namespace

Kubectl create namespace demo

創(chuàng)建 Pod

Kubectl apply –f pod.yaml

查看 Pod 運(yùn)行狀態(tài)

Kubectl describe pods demo-pod–n demo

查看 Pod 輸出日志

Kubectl logs demo-pod –n demo

查看 Pods 列表

Kubectl get pods-n demo

刪除 Pod

Kubectl delete-f pod.yaml

 MoreCommand

Basic Commands: create,expose, run, setBasic Commands: explain, get,edit,deleteDeploy Commands: rollout,scale,autoscale

看完上述內(nèi)容,你們掌握Kubernetes的工作原理是什么的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(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