Kubernetes中文文檔:https://kubernetes.io/zh-cn/docs/home/
Kubernetes源碼地址:https://github.com/kubernetes/kubernetes
一:Kubernetes是什么
首先要了解應(yīng)用程序部署經(jīng)歷了以下幾個(gè)時(shí)代:
- 傳統(tǒng)部署時(shí)代:在物理服務(wù)器上運(yùn)行應(yīng)用程序。
- 虛擬化部署時(shí)代:虛擬化技術(shù)允許你在單個(gè)物理服務(wù)器的 CPU 上運(yùn)行多臺(tái)虛擬機(jī)(VM)。 虛擬化能使應(yīng)用程序在不同 VM 之間被彼此隔離,且能提供一定程度的安全性, 因?yàn)橐粋€(gè)應(yīng)用程序的信息不能被另一應(yīng)用程序隨意訪問(wèn)。
-
容器部署時(shí)代:容器類似于 VM,但是更寬松的隔離特性,使容器之間可以共享操作系統(tǒng)(OS)。每個(gè)容器之間互相隔離,具有自己的文件系統(tǒng)、CPU、內(nèi)存、進(jìn)程空間等,容器之間進(jìn)程不會(huì)相互影響,能區(qū)分計(jì)算資源。相對(duì)于虛擬機(jī),容器能快速部署,由于容器與底層設(shè)施、機(jī)器文件系統(tǒng)解耦的,所以它能在不同云、不同版本操作系統(tǒng)間進(jìn)行遷移。
容器因具有許多優(yōu)勢(shì)而變得流行起來(lái),例如:- 敏捷應(yīng)用程序的創(chuàng)建和部署:與使用 VM 鏡像相比,提高了容器鏡像創(chuàng)建的簡(jiǎn)便性和效率。
- 持續(xù)開(kāi)發(fā)、集成和部署:通過(guò)快速簡(jiǎn)單的回滾(由于鏡像不可變性), 提供可靠且頻繁的容器鏡像構(gòu)建和部署。
- 關(guān)注開(kāi)發(fā)與運(yùn)維的分離:在構(gòu)建、發(fā)布時(shí)創(chuàng)建應(yīng)用程序容器鏡像,而不是在部署時(shí), 從而將應(yīng)用程序與基礎(chǔ)架構(gòu)分離。
- 可觀察性:不僅可以顯示 OS 級(jí)別的信息和指標(biāo),還可以顯示應(yīng)用程序的運(yùn)行狀況和其他指標(biāo)信號(hào)。
- 跨開(kāi)發(fā)、測(cè)試和生產(chǎn)的環(huán)境一致性:在筆記本計(jì)算機(jī)上也可以和在云中運(yùn)行一樣的應(yīng)用程序。
- 跨云和操作系統(tǒng)發(fā)行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方運(yùn)行。
- 以應(yīng)用程序?yàn)橹行牡墓芾?/strong>:提高抽象級(jí)別,從在虛擬硬件上運(yùn)行 OS 到使用邏輯資源在 OS 上運(yùn)行應(yīng)用程序。
- 松散耦合、分布式、彈性、解放的微服務(wù):應(yīng)用程序被分解成較小的獨(dú)立部分, 并且可以動(dòng)態(tài)部署和管理 - 而不是在一臺(tái)大型單機(jī)上整體運(yùn)行。
- 資源隔離:可預(yù)測(cè)的應(yīng)用程序性能。
- 資源利用:高效率和高密度。
而Kubernetes就是一個(gè)開(kāi)源容器集群管理系統(tǒng),可以在物理或虛擬機(jī)的Kubernetes集群上運(yùn)行容器化應(yīng)用,提供一個(gè)以“容器為中心的基礎(chǔ)架構(gòu)”,實(shí)現(xiàn)容器集群的自動(dòng)化部署、自動(dòng)擴(kuò)縮容、維護(hù)等功能。
在生產(chǎn)環(huán)境中, 需要管理運(yùn)行著應(yīng)用程序的容器,并確保服務(wù)不會(huì)下線。 例如,如果一個(gè)容器發(fā)生故障,則你需要啟動(dòng)另一個(gè)容器。 這就可以交給Kubernetes ,它提供了一個(gè)可彈性運(yùn)行分布式系統(tǒng)的框架。Kubernetes 可以通過(guò)一個(gè)命令為你提供集中式的管理集群機(jī)器和應(yīng)用,加機(jī)器、版本升級(jí)、版本回滾,不停機(jī)的灰度更新,確保高可用、高性能、高擴(kuò)展。
- 服務(wù)發(fā)現(xiàn)和負(fù)載均衡
- 存儲(chǔ)編排
- 自動(dòng)部署和回滾
- 自動(dòng)完成裝箱計(jì)算
- 自我修復(fù)
- 配置和存儲(chǔ)管理
二:Kubernetes架構(gòu)
Kubernetes部署完成后一定是一個(gè)集群集群 。k8s 總體架構(gòu)采用了經(jīng)典的 master slave 架構(gòu)模式,分 master 節(jié)點(diǎn)和 worker 節(jié)點(diǎn),節(jié)點(diǎn)可以是虛擬機(jī)也可以是物理機(jī)。
三:Kubernetes功能模塊
- 用戶側(cè):不論是CLI命令行還是UI界面,會(huì)與控制面板的APIserver進(jìn)行交互,APIserver再與其他組件交互,最終執(zhí)行相應(yīng)的操作命令;
- 控制平面(Master節(jié)點(diǎn)):以前也稱為Master,核心組件包括APIserver、controller、scheduler、etcd,主要用來(lái)調(diào)度整個(gè)集群,以及做出全局決策;
- Node工作節(jié)點(diǎn):通過(guò)將容器放入在節(jié)點(diǎn)上運(yùn)行的Pod中來(lái)執(zhí)行工作負(fù)載,簡(jiǎn)單的理解工作負(fù)載就是各種應(yīng)用程序等,節(jié)點(diǎn)上的核心組件包括Pod、kubelet、Container-Runtime、kube-proxy等;
控制平面(Master節(jié)點(diǎn))——Control Plane控制平面四個(gè)邏輯組件組成:API Server、Scheduler、Controller、etcd,它們被稱為是程序組件,每個(gè)組件之間都必須運(yùn)行一個(gè)守護(hù)進(jìn)程,API Server、Scheduler、Controller是k8s提供的,而etcd不是k8s提供的。
- API server:對(duì)外提供操作和獲取 k8s 集群資源的的 API,是唯一操作 etcd 的組件,其他的組件包括管理員操作都是通過(guò) API server 進(jìn)行交互的,開(kāi)放K8S的API,組件之間通過(guò)API交互,相當(dāng)于控制面的前端。
- etcd:一種的分布式存儲(chǔ)機(jī)制,底層采用 Raft 協(xié)議,k8s 集群的狀態(tài)數(shù)據(jù)包括配置、節(jié)點(diǎn)等都存儲(chǔ)于 etcd 中,它保存了整個(gè)集群的狀態(tài)。
- Scheduler:在 k8s 集群中做調(diào)動(dòng)決策,負(fù)責(zé)資源的調(diào)度,按照預(yù)定的調(diào)度策略將 Pod 調(diào)度到相應(yīng)的機(jī)器上。
- Controller Manager:相當(dāng)于集群狀態(tài)的協(xié)調(diào)者,觀察著集群的實(shí)際狀態(tài),與 etcd 中的預(yù)期狀態(tài)進(jìn)行對(duì)比,如果不一致則對(duì)資源進(jìn)行協(xié)調(diào)操作讓實(shí)際狀態(tài)和預(yù)期狀態(tài)達(dá)到最終的一致,維護(hù)集群的狀態(tài),比如故障檢測(cè)、自動(dòng)擴(kuò)展、滾動(dòng)更新等。
worker 節(jié)點(diǎn)由以下組件組成:
- Controller Runtime:下載鏡像和運(yùn)行容器的組件,負(fù)責(zé)鏡像管理以及 Pod 和容器的真正運(yùn)行(CRI)。
- Pod:K8S 調(diào)度、管理的最小單位,一個(gè) Pod 可以包含一個(gè)或多個(gè)容器,每個(gè) Pod 有自己的虛擬IP。一個(gè)工作節(jié)點(diǎn)可以有多個(gè) pod,主節(jié)點(diǎn)會(huì)考量負(fù)載自動(dòng)調(diào)度 pod 到哪個(gè)節(jié)點(diǎn)運(yùn)行。
- kubelet:負(fù)責(zé)管理 worker 節(jié)點(diǎn)上的組件,與 master 節(jié)點(diǎn)上的 API server 節(jié)點(diǎn)進(jìn)行交互,接受指令執(zhí)行操作,保證容器都運(yùn)行在Pod中。
-
kube-proxy:負(fù)責(zé)對(duì) Pod 進(jìn)行尋址和負(fù)載均衡,每個(gè)節(jié)點(diǎn)上運(yùn)行的網(wǎng)絡(luò)代理, 維護(hù)節(jié)點(diǎn)上的網(wǎng)絡(luò)規(guī)則
四、Kubernetes組件
1.Master節(jié)點(diǎn)——控制平面(Control Plane)組件
1.1 kubectl
kubectl是Kubernetes命令行工具(command-line tool),用于管理Kubernetes集群和應(yīng)用程序。kubectl可以通過(guò)命令行方式與Kubernetes API服務(wù)器進(jìn)行通信,實(shí)現(xiàn)對(duì)集群的部署、維護(hù)和監(jiān)控等操作。
kubectl官方介紹:https://kubernetes.io/zh-cn/docs/reference/kubectl/
1.2 kube-apiserver
APIServer提供了K8S各類資源對(duì)象的操作,是集群內(nèi)各個(gè)功能模塊之間數(shù)據(jù)交互和通信的中心樞紐,是整個(gè)系統(tǒng)的數(shù)據(jù)總線和數(shù)據(jù)中心。通常我們通過(guò)kubectl與APIServer進(jìn)行交互。API服務(wù)提供Kubernetes API 的服務(wù),試圖通過(guò)把所有或者大部分的業(yè)務(wù)邏輯放到不兩只的部件中從而使其具有CRUD特性。它主要處理REST操作,在etcd中驗(yàn)證更新這些對(duì)象(并最終存儲(chǔ))。
API Server是整個(gè)K8S上唯一接收客戶端請(qǐng)求的入口,負(fù)責(zé)檢查用戶創(chuàng)建提交的命令是否合乎語(yǔ)法規(guī)范,如果合乎語(yǔ)法規(guī)范接下來(lái)他就把它保存到etcd當(dāng)中。API Server是一個(gè)數(shù)據(jù)庫(kù),它負(fù)責(zé)用戶通過(guò)任何一個(gè)接口完成對(duì)容器的增刪改查,這個(gè)時(shí)候容器并沒(méi)有跑起來(lái),它只是存下來(lái)用戶提交了一個(gè)創(chuàng)建容器得請(qǐng)求,這個(gè)容器有沒(méi)有跑起來(lái)由Controller來(lái)負(fù)責(zé),API Server會(huì)通知Controller,Controller會(huì)watch到 API server上得變動(dòng),比如創(chuàng)建刪除操作,一旦有了變動(dòng),Controller會(huì)立即獲得變動(dòng)相關(guān)狀態(tài),然后Controller對(duì)用戶下達(dá)指令進(jìn)行操作。
kube-apiserver文檔介紹:https://kubernetes.io/zh-cn/docs/concepts/overview/kubernetes-api/
Kubernetes 聲明式API 文檔介紹:https://www.topgoer.cn/docs/kubernetes_foundation/kubernetes_foundation-1drs2m9urd6a8
1.3 kube-Scheduler組件
kube-Scheduler即調(diào)度器,負(fù)責(zé)監(jiān)視新創(chuàng)建的、未指定運(yùn)行節(jié)點(diǎn)(node)的 Pods, 并選擇節(jié)點(diǎn)來(lái)讓 Pod 在上面運(yùn)行。
通過(guò)API、UI、CLI向master提起要?jiǎng)?chuàng)建一個(gè)容器,這個(gè)容器到底要運(yùn)行在node節(jié)點(diǎn)中的哪一個(gè)呢,需要調(diào)度器去評(píng)估一下哪一個(gè)node是最佳目標(biāo)節(jié)點(diǎn),如果多個(gè)node節(jié)點(diǎn)都是最佳的那就從中隨機(jī)選擇一個(gè),例如用戶新建一個(gè)容器,Scheduler會(huì)watch到api server,Scheduler會(huì)把它調(diào)度到某一個(gè)節(jié)點(diǎn)上創(chuàng)建出來(lái),創(chuàng)建出來(lái)健康與否,Controller去負(fù)責(zé)監(jiān)控它。
通過(guò)調(diào)度算法,為待調(diào)度Pod列表的每個(gè)Pod,從Node列表中選擇一個(gè)最合適的Node。然后,目標(biāo)節(jié)點(diǎn)上的kubelet通過(guò)API Server監(jiān)聽(tīng)到Kubernetes Scheduler產(chǎn)生的Pod綁定事件,獲取對(duì)應(yīng)的Pod清單,下載Image鏡像,并啟動(dòng)容器。
Scheduler官方介紹:https://kubernetes.io/zh-cn/docs/concepts/scheduling-eviction/kube-scheduler/
1.4 etcd
etcd:是一個(gè)k/v存儲(chǔ)系統(tǒng),可以定義容器是通過(guò)不同的k/v來(lái)描述一個(gè)容器的多個(gè)狀態(tài)信息,如一個(gè)容器里面有容器名,有鏡像,監(jiān)聽(tīng)端口,為了能夠確保用戶能夠合理合法的描述k8s所支持的資源的屬性,API server對(duì)etcd進(jìn)行了包裝和抽象,使得用戶只能按照api server中定的結(jié)構(gòu)來(lái)定義數(shù)據(jù)。
etcd官網(wǎng):https://etcd.io/docs/
1.5 kube-controller-manager
在應(yīng)用程序當(dāng)中有兩種api范式,一種叫陳述式,一種叫聲明式,k8s的api提供的是一種聲明式api,若某一個(gè)客戶端想運(yùn)行容器,通過(guò)API、UI、CLI來(lái)告訴maste運(yùn)行一個(gè)容器,運(yùn)行一個(gè)nginx容器,運(yùn)行這個(gè)容器的鏡像占多少內(nèi)存,鏡像從哪里來(lái),是否能跑起來(lái)你都不用管,只需要告訴master給我運(yùn)行一個(gè)nginx容器,Controller知道到哪去找鏡像,拿過(guò)來(lái)以后通過(guò)Scheduler調(diào)度以后,Controller知道nginx容器運(yùn)行健康與否,有沒(méi)有正常監(jiān)聽(tīng)用戶所指定的端口,如果沒(méi)有,Controller會(huì)試圖把它干掉在重新啟動(dòng),這叫自動(dòng)創(chuàng)建,這個(gè)所有功能都是Controller來(lái)實(shí)現(xiàn)的。Controller是整個(gè)master當(dāng)中的大腦,因?yàn)橛脩糁噶钕聛?lái)以后,真正能負(fù)責(zé)執(zhí)行并監(jiān)控它、能符合用戶所指定的期望都由Controller負(fù)責(zé)。
在k8s之上一個(gè)資源有兩種狀態(tài),一種是用戶期望狀態(tài)。用戶請(qǐng)求并保存在etcd當(dāng)中用戶期望,第二種狀態(tài)是當(dāng)前實(shí)際狀態(tài)。Controller把指令從etcd中取出來(lái)并確保在節(jié)點(diǎn)上可以運(yùn)行起來(lái),這個(gè)是真正運(yùn)行它的容器,這個(gè)真正運(yùn)行它的容器的狀態(tài)和用戶期望保存在etcd的狀態(tài)有可能是不一致的,比如用戶運(yùn)行的狀態(tài)etcd監(jiān)聽(tīng)80端口,而Controller監(jiān)聽(tīng)的是8080端口,就會(huì)不符合用戶期望,Controller會(huì)對(duì)比etcd的狀態(tài)和Controller上的狀態(tài)是否一樣,如果不一致,Controller就負(fù)責(zé)確保真正運(yùn)行的狀態(tài)和etcd的狀態(tài)是否一致,不一致就Controller重啟或者重建確保他們一致。
kube-controller-manager 集群控制器負(fù)責(zé)運(yùn)行控制器進(jìn)程。 從邏輯上講, 每個(gè)控制器都是一個(gè)單獨(dú)的進(jìn)程, 但是為了降低復(fù)雜性,它們都被編譯到同一個(gè)可執(zhí)行文件,并在同一個(gè)進(jìn)程中運(yùn)行。這些控制器包括:
- 節(jié)點(diǎn)控制器(Node Controller):負(fù)責(zé)在節(jié)點(diǎn)出現(xiàn)故障時(shí)進(jìn)行通知和響應(yīng)
- 任務(wù)控制器(Job Controller):監(jiān)測(cè)代表一次性任務(wù)的 Job 對(duì)象,然后創(chuàng)建 Pods 來(lái)運(yùn)行這些任務(wù)直至完成
- 端點(diǎn)分片控制器(EndpointSlice controller):填充端點(diǎn)分片(EndpointSlice)對(duì)象(以提供 Service 和 Pod 之間的鏈接)。
- 服務(wù)賬號(hào)控制器(ServiceAccount controller):為新的命名空間創(chuàng)建默認(rèn)的服務(wù)賬號(hào)(ServiceAccount)。
controller-manager官方介紹:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-controller-manager/
controller官方介紹:https://kubernetes.io/zh-cn/docs/concepts/architecture/controller/
2.Node節(jié)點(diǎn)組件
節(jié)點(diǎn)組件會(huì)在每個(gè)節(jié)點(diǎn)上運(yùn)行,負(fù)責(zé)維護(hù)運(yùn)行的 Pod 并提供 Kubernetes 運(yùn)行環(huán)境。
2.1 Pod
Kubernetes 不是直接調(diào)度容器的,而是將其封裝成了一個(gè)個(gè) Pod ,Pod 才是 k8s 的基本調(diào)度單位。Pod 是可以在 Kubernetes 中創(chuàng)建和管理的、最小的可部署的計(jì)算單元。
Pod是一組(一個(gè)或多個(gè)) 容器; 這些容器共享存儲(chǔ)、網(wǎng)絡(luò)、以及怎樣運(yùn)行這些容器的聲明。 Pod 中的內(nèi)容總是并置的并且一同調(diào)度,在共享的上下文中運(yùn)行。 Pod 所建模的是特定于應(yīng)用的 “邏輯主機(jī)”,其中包含一個(gè)或多個(gè)應(yīng)用容器, 這些容器相對(duì)緊密地耦合在一起。
Pod官方介紹:https://kubernetes.io/zh-cn/docs/concepts/workloads/pods/
2.2 kubelet
kubelet 會(huì)在集群中每個(gè)節(jié)點(diǎn)(node)上運(yùn)行,用于管理pod和container,每個(gè)kubelet會(huì)向apiserver注冊(cè)本節(jié)點(diǎn)的信息,并向master節(jié)點(diǎn)上報(bào)本節(jié)點(diǎn)資源使用的情況 它保證容器(containers)都運(yùn)行在 Pod 中。
kubelet 是在每個(gè)工作節(jié)點(diǎn)上運(yùn)行的代理,負(fù)責(zé)管理該節(jié)點(diǎn)上的容器。它與主節(jié)點(diǎn)通信,并接收有關(guān)運(yùn)行哪些容器并管理其生命周期的指令。kubelet 負(fù)責(zé)以下任務(wù)
- 從鏡像倉(cāng)庫(kù)拉取容器映像
- 啟動(dòng)和停止容器
- 監(jiān)視容器的運(yùn)行狀況并在必要時(shí)重新啟動(dòng)它們
- 將卷裝載到容器
- 日志記錄容器輸出
kubelet 與容器運(yùn)行時(shí)密切合作,以確保容器正常運(yùn)行。它還與其他 Kubernetes 組件配合使用,以管理網(wǎng)絡(luò)連接和存儲(chǔ)資源。
kubelet官方介紹:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kubelet/
2.3 kube-proxy
kube-proxy 是在每個(gè)工作節(jié)點(diǎn)上運(yùn)行的網(wǎng)絡(luò)代理,實(shí)現(xiàn) Kubernetes 服務(wù)(Service) 概念的一部分,負(fù)責(zé)管理與在該節(jié)點(diǎn)上運(yùn)行的容器的網(wǎng)絡(luò)連接。它維護(hù)網(wǎng)絡(luò)規(guī)則并管理每個(gè)容器的網(wǎng)絡(luò)接口。kube 代理負(fù)責(zé)以下任務(wù):
- 將流量路由到相應(yīng)的容器
- 為服務(wù)實(shí)現(xiàn)負(fù)載平衡
- 管理網(wǎng)絡(luò)策略
kube-proxy 與 kubelet 和其他 Kubernetes 組件密切合作,以確保保持網(wǎng)絡(luò)連接并正確路由流量。
kube-proxy官方介紹:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-proxy/
2.4 容器運(yùn)行時(shí)(Container Runtime)
容器運(yùn)行環(huán)境是負(fù)責(zé)運(yùn)行容器的軟件。Kubernetes 支持許多容器運(yùn)行環(huán)境,例如 containerd、 CRI-O 以及 Kubernetes CRI (容器運(yùn)行環(huán)境接口) 的其他任何實(shí)現(xiàn)。容器運(yùn)行時(shí)負(fù)責(zé)以下任務(wù):
- 從倉(cāng)庫(kù)拉取容器映像
- 啟動(dòng)和停止容器
- 管理容器資源,例如 CPU 和內(nèi)存
- 管理容器網(wǎng)絡(luò)
官方介紹文檔:https://kubernetes.io/zh-cn/docs/setup/production-environment/container-runtimes/
3.插件(Add-ons)
3.1 DNS
DNS組件為Pod提供了服務(wù)發(fā)現(xiàn)、域名解析功能,使得Pod可以通過(guò)名稱而非IP地址來(lái)相互通信。
Kubernetes使用名為kube-dns的開(kāi)源DNS解決方案作為其集群內(nèi)部DNS服務(wù)器。kube-dns具有高可用性和水平擴(kuò)展能力,以適應(yīng)大規(guī)模部署的需求。它為每個(gè)Service分配一個(gè)固定的DNS名稱,并在需要時(shí)將它們映射到相關(guān)的Pod的IP地址。這種方式簡(jiǎn)化 了服務(wù)發(fā)現(xiàn)的過(guò)程,使得服務(wù)之間的通信更加靈活和可靠。
3.2 Dashboard
Kubernetes Dashboard是一個(gè)基于Web的UI工具,提供了一種直觀的方法來(lái)管理和監(jiān)控Kubernetes集群。
Dashboard支持查看和編輯應(yīng)用程序、管理Pod和容器、檢查系統(tǒng)日志和監(jiān)視集群資源等操作。Dashboard具有用戶友好的界面和易于導(dǎo)航的菜單,可幫助用戶更好地理解和掌握整個(gè)Kubernetes集群的運(yùn)行狀況。除此之外,Dashboard還允許管理員配置和管理用戶訪問(wèn)權(quán)限,并與其他Kubernetes API組件集成以提供更全面的集群管理體驗(yàn)。
3.3 容器資源監(jiān)控
容器資源監(jiān)控 將關(guān)于容器的一些常見(jiàn)的時(shí)間序列度量值保存到一個(gè)集中的數(shù)據(jù)庫(kù)中, 并提供瀏覽這些數(shù)據(jù)的界面。
3.4 集群層面日志
集群層面日志機(jī)制負(fù)責(zé)將容器的日志數(shù)據(jù)保存到一個(gè)集中的日志存儲(chǔ)中, 這種集中日志存儲(chǔ)提供搜索和瀏覽接口
五、pod部署流程
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-448335.html
- CLI命令行和UI界面,都是通過(guò)APIserver接口,與集群內(nèi)部組件交互,比如上述的Pod部署操作;
- 在APIserver收到請(qǐng)求之后,會(huì)將序列化狀態(tài)的對(duì)象寫(xiě)入到etcd中完成存儲(chǔ)操作;
- Scheduler調(diào)度器通過(guò)監(jiān)測(cè)(Watch)機(jī)制來(lái)發(fā)現(xiàn)集群中新創(chuàng)建且尚未被調(diào)度到節(jié)點(diǎn)上的Pod;
- 在集群中找到一個(gè)Pod的所有可調(diào)度節(jié)點(diǎn),對(duì)這些可調(diào)度節(jié)點(diǎn)打分,選出其中得分最高的節(jié)點(diǎn)來(lái)運(yùn)行Pod,然后調(diào)度器將這個(gè)調(diào)度決定通知給APIserver;
- APIserver完成信息存儲(chǔ)后,然后通知相應(yīng)節(jié)點(diǎn)的Kubelet;
- Kubelet是基于PodSpec來(lái)工作的,確保這些PodSpec中描述的容器處于運(yùn)行狀態(tài)且運(yùn)行狀況良好,每個(gè)PodSpec是一個(gè)描述Pod的YAML或JSON對(duì)象;
- Pod是可以在Kubernetes中創(chuàng)建和管理的、最小的可部署的計(jì)算單元,包括一個(gè)或多個(gè)容器及容器運(yùn)行時(shí);
容器的創(chuàng)建過(guò)程涉及到多個(gè)組件協(xié)同工作。用戶創(chuàng)建一個(gè)容器時(shí),首先向API server發(fā)請(qǐng)求,Scheduler watch到api server創(chuàng)建容器的請(qǐng)求開(kāi)始調(diào)度,從當(dāng)前集群中的node節(jié)點(diǎn)中選一個(gè)作為真正運(yùn)行這個(gè)容器的節(jié)點(diǎn),之后Scheduler把調(diào)度的結(jié)果保存到etcd當(dāng)中,node組件中的kubelet組件監(jiān)視 API server上的資源變動(dòng),如果說(shuō)Scheduler調(diào)度某個(gè)容器給Node節(jié)點(diǎn)以后,這個(gè)節(jié)點(diǎn)可以通過(guò) api server得到消息,kubelet會(huì)創(chuàng)建執(zhí)行容器的任務(wù),kubelet會(huì)調(diào)用容器、下載鏡像、啟動(dòng)容器。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-448335.html
到了這里,關(guān)于K8s(Kubernetes)學(xué)習(xí)(一):k8s概念及組件的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!