60道重要的Kubernetes面試題
點擊“程序員面試吧”,選擇“星標(biāo)??”
點擊文末“閱讀原文”解鎖資料
簡單:支持REST風(fēng)格的HTTP+JSON API
安全:支持HTTPS方式的訪問
快速:支持并發(fā)1k/s的寫操作
可靠:支持分布式結(jié)構(gòu),基于Raft的一致性算法,Raft是一套通過選舉主節(jié)點來實現(xiàn)分布式系統(tǒng)一致性的算法。
服務(wù)發(fā)現(xiàn)(Service Discovery):服務(wù)發(fā)現(xiàn)主要解決在同一個分布式集群中的進(jìn)程或服務(wù),要如何才能找到對方并建立連接。本質(zhì)上來說,服務(wù)發(fā)現(xiàn)就是想要了解集群中是否有進(jìn)程在監(jiān)聽UDP或TCP端口,并且通過名字就可以查找和連接。
消息發(fā)布與訂閱:在分布式系統(tǒng)中,最適用的一種組件間通信方式就是消息發(fā)布與訂閱。即構(gòu)建一個配置共享中心,數(shù)據(jù)提供者在這個配置中心發(fā)布消息,而消息使用者則訂閱他們關(guān)心的主題,一旦主題有消息發(fā)布,就會實時通知訂閱者。通過這種方式可以做到分布式系統(tǒng)配置的集中式管理與動態(tài)更新。應(yīng)用中用到的一些配置信息放到etcd上進(jìn)行集中管理。
負(fù)載均衡:在分布式系統(tǒng)中,為了保證服務(wù)的高可用以及數(shù)據(jù)的一致性,通常都會把數(shù)據(jù)和服務(wù)部署多份,以此達(dá)到對等服務(wù),即使其中的某一個服務(wù)失效了,也不影響使用。etcd本身分布式架構(gòu)存儲的信息訪問支持負(fù)載均衡。etcd集群化以后,每個etcd的核心節(jié)點都可以處理用戶的請求。所以,把數(shù)據(jù)量小但是訪問頻繁的消息數(shù)據(jù)直接存儲到etcd中也可以實現(xiàn)負(fù)載均衡的效果。
分布式通知與協(xié)調(diào):與消息發(fā)布和訂閱類似,都用到了etcd中的Watcher機(jī)制,通過注冊與異步通知機(jī)制,實現(xiàn)分布式環(huán)境下不同系統(tǒng)之間的通知與協(xié)調(diào),從而對數(shù)據(jù)變更做到實時處理。
分布式鎖:因為etcd使用Raft算法保持了數(shù)據(jù)的強(qiáng)一致性,某次操作存儲到集群中的值必然是全局一致的,所以很容易實現(xiàn)分布式鎖。鎖服務(wù)有兩種使用方式,一是保持獨占,二是控制時序。
集群監(jiān)控與Leader競選:通過etcd來進(jìn)行監(jiān)控實現(xiàn)起來非常簡單并且實時性強(qiáng)。
kubeadm,也是推薦的一種部署方式;
二進(jìn)制;
minikube,在本地輕松運行一個單節(jié)點Kubernetes群集的工具。
容器編排
輕量級
開源
彈性伸縮
負(fù)載均衡
快速部署應(yīng)用
快速擴(kuò)展應(yīng)用
無縫對接新的應(yīng)用功能
節(jié)省資源,優(yōu)化硬件資源的使用
可移植:支持公有云、私有云、混合云、多重云(multi-cloud)。
可擴(kuò)展: 模塊化,、插件化、可掛載、可組合。
自動化: 自動部署、自動重啟、自動復(fù)制、自動伸縮/擴(kuò)展。
安裝過程和配置相對困難復(fù)雜。
管理服務(wù)相對繁瑣。
運行和編譯需要很多時間。
它比其他替代品更昂貴。
對于簡單的應(yīng)用程序來說,可能不需要涉及Kubernetes即可滿足。
Master:Kubernetes集群的管理節(jié)點,負(fù)責(zé)管理集群,提供集群的資源數(shù)據(jù)訪問入口。擁有etcd存儲服務(wù)(可選),運行Api Server進(jìn)程,Controller Manager服務(wù)進(jìn)程及Scheduler服務(wù)進(jìn)程。
Node(worker):Node(worker)是Kubernetes集群架構(gòu)中運行Pod的服務(wù)節(jié)點,是Kubernetes集群操作的單元,用來承載被分配Pod的運行,是Pod運行的宿主機(jī)。運行Docker Eninge服務(wù),守護(hù)進(jìn)程kunelet及負(fù)載均衡器kube-proxy。
Pod:運行于Node節(jié)點上,若干相關(guān)容器的組合。Pod內(nèi)包含的容器運行在同一宿主機(jī)上,使用相同的網(wǎng)絡(luò)命名空間、IP地址和端口,能夠通過localhost進(jìn)行通信。Pod是Kubernetes進(jìn)行創(chuàng)建、調(diào)度和管理的最小單位,它提供了比容器更高層次的抽象,使得部署和管理更加靈活。一個Pod可以包含一個容器或者多個相關(guān)容器。
Label:Kubernetes中的Label實質(zhì)是一系列的Key/Value鍵值對,其中key與value可自定義。Label可以附加到各種資源對象上,如Node、Pod、Service、RC等。一個資源對象可以定義任意數(shù)量的Label,同一個Label也可以被添加到任意數(shù)量的資源對象上去。Kubernetes通過Label Selector(標(biāo)簽選擇器)查詢和篩選資源對象。
Replication Controller:Replication Controller用來管理Pod的副本,保證集群中存在指定數(shù)量的Pod副本。集群中副本的數(shù)量大于指定數(shù)量,則會停止指定數(shù)量之外的多余容器數(shù)量。反之,則會啟動少于指定數(shù)量個數(shù)的容器,保證數(shù)量不變。Replication Controller是實現(xiàn)彈性伸縮、動態(tài)擴(kuò)容和滾動升級的核心。
Deployment:Deployment在內(nèi)部使用了RS來實現(xiàn)目的,Deployment相當(dāng)于RC的一次升級,其最大的特色為可以隨時獲知當(dāng)前Pod的部署進(jìn)度。
HPA(Horizontal Pod Autoscaler):Pod的橫向自動擴(kuò)容,也是Kubernetes的一種資源,通過追蹤分析RC控制的所有Pod目標(biāo)的負(fù)載變化情況,來確定是否需要針對性的調(diào)整Pod副本數(shù)量。
Service:Service定義了Pod的邏輯集合和訪問該集合的策略,是真實服務(wù)的抽象。Service提供了一個統(tǒng)一的服務(wù)訪問入口以及服務(wù)代理和發(fā)現(xiàn)機(jī)制,關(guān)聯(lián)多個相同Label的Pod,用戶不需要了解后臺Pod是如何運行。
Volume:Volume是Pod中能夠被多個容器訪問的共享目錄,Kubernetes中的Volume是定義在Pod上,可以被一個或多個Pod中的容器掛載到某個目錄下。
Namespace:Namespace用于實現(xiàn)多租戶的資源隔離,可將集群內(nèi)部的資源對象分配到不同的Namespace中,形成邏輯上的不同項目、小組或用戶組,便于不同的Namespace在共享使用整個集群的資源的同時還能被分別管理。
Kubernetes API Server:作為Kubernetes系統(tǒng)的入口,其封裝了核心對象的增刪改查操作,以RESTful API接口方式提供給外部客戶和內(nèi)部組件調(diào)用,集群內(nèi)各個功能模塊之間數(shù)據(jù)交互和通信的中心樞紐。
Kubernetes Scheduler:為新建立的Pod進(jìn)行節(jié)點(Node)選擇(即分配機(jī)器),負(fù)責(zé)集群的資源調(diào)度。
Kubernetes Controller:負(fù)責(zé)執(zhí)行各種控制器,目前已經(jīng)提供了很多控制器來保證Kubernetes的正常運行。
Replication Controller:管理維護(hù)Replication Controller,關(guān)聯(lián)Replication Controller和Pod,保證Replication Controller定義的副本數(shù)量與實際運行Pod數(shù)量一致。
Node Controller:管理維護(hù)Node,定期檢查Node的健康狀態(tài),標(biāo)識出(失效|未失效)的Node節(jié)點。
Namespace Controller:管理維護(hù)Namespace,定期清理無效的Namespace,包括Namesapce下的API對象,比如Pod、Service等。
Service Controller:管理維護(hù)Service,提供負(fù)載以及服務(wù)代理。
EndPoints Controller:管理維護(hù)Endpoints,關(guān)聯(lián)Service和Pod,創(chuàng)建Endpoints為Service的后端,當(dāng)Pod發(fā)生變化時,實時更新Endpoints。
Service Account Controller:管理維護(hù)Service Account,為每個Namespace創(chuàng)建默認(rèn)的Service Account,同時為Service Account創(chuàng)建Service Account Secret。
Persistent Volume Controller:管理維護(hù)Persistent Volume和Persistent Volume Claim,為新的Persistent Volume Claim分配Persistent Volume進(jìn)行綁定,為釋放的Persistent Volume執(zhí)行清理回收。
Daemon Set Controller:管理維護(hù)Daemon Set,負(fù)責(zé)創(chuàng)建Daemon Pod,保證指定的Node上正常的運行Daemon Pod。
Deployment Controller:管理維護(hù)Deployment,關(guān)聯(lián)Deployment和Replication Controller,保證運行指定數(shù)量的Pod。當(dāng)Deployment更新時,控制實現(xiàn)Replication Controller和Pod的更新。
Job Controller:管理維護(hù)Job,為Jod創(chuàng)建一次性任務(wù)Pod,保證完成Job指定完成的任務(wù)數(shù)目
Pod Autoscaler Controller:實現(xiàn)Pod的自動伸縮,定時獲取監(jiān)控數(shù)據(jù),進(jìn)行策略匹配,當(dāng)滿足條件時執(zhí)行Pod的伸縮動作。
為大型集群提供了更好的可擴(kuò)展性和性能;
支持比iptables更復(fù)雜的復(fù)制均衡算法(最小負(fù)載、最少連接、加權(quán)等);
支持服務(wù)器健康檢查和連接重試等功能;
可以動態(tài)修改ipset的集合,即使iptables的規(guī)則正在使用這個集合。
Pending:API Server已經(jīng)創(chuàng)建該Pod,且Pod內(nèi)還有一個或多個容器的鏡像沒有創(chuàng)建,包括正在下載鏡像的過程。
Running:Pod內(nèi)所有容器均已創(chuàng)建,且至少有一個容器處于運行狀態(tài)、正在啟動狀態(tài)或正在重啟狀態(tài)。
Succeeded:Pod內(nèi)所有容器均成功執(zhí)行退出,且不會重啟。
Failed:Pod內(nèi)所有容器均已退出,但至少有一個容器退出為失敗狀態(tài)。
Unknown:由于某種原因無法獲取該Pod狀態(tài),可能由于網(wǎng)絡(luò)通信不暢導(dǎo)致。
客戶端提交Pod的配置信息(可以是yaml文件定義的信息)到kube-apiserver。
Apiserver收到指令后,通知給controller-manager創(chuàng)建一個資源對象。
Controller-manager通過api-server將Pod的配置信息存儲到etcd數(shù)據(jù)中心中。
Kube-scheduler檢測到Pod信息會開始調(diào)度預(yù)選,會先過濾掉不符合Pod資源配置要求的節(jié)點,然后開始調(diào)度調(diào)優(yōu),主要是挑選出更適合運行Pod的節(jié)點,然后將Pod的資源配置單發(fā)送到Node節(jié)點上的kubelet組件上。
Kubelet根據(jù)scheduler發(fā)來的資源配置單運行Pod,運行成功后,將Pod的運行信息返回給scheduler,scheduler將返回的Pod運行狀況的信息存儲到etcd數(shù)據(jù)中心。
Always:當(dāng)容器失效時,由kubelet自動重啟該容器;
OnFailure:當(dāng)容器終止運行且退出碼不為0時,由kubelet自動重啟該容器;
Never:不論容器運行狀態(tài)如何,kubelet都不會重啟該容器。
RC和DaemonSet:必須設(shè)置為Always,需要保證該容器持續(xù)運行;
Job:OnFailure或Never,確保容器執(zhí)行完成后不再重啟;
kubelet:在Pod失效時重啟,不論將RestartPolicy設(shè)置為何值,也不會對Pod進(jìn)行健康檢查。
LivenessProbe探針:用于判斷容器是否存活(running狀態(tài)),如果LivenessProbe探針探測到容器不健康,則kubelet將殺掉該容器,并根據(jù)容器的重啟策略做相應(yīng)處理。若一個容器不包含LivenessProbe探針,kubelet認(rèn)為該容器的LivenessProbe探針返回值用于是“Success”。
ReadineeProbe探針:用于判斷容器是否啟動完成(ready狀態(tài))。如果ReadinessProbe探針探測到失敗,則Pod的狀態(tài)將被修改。Endpoint Controller將從Service的Endpoint中刪除包含該容器所在Pod的Eenpoint。
startupProbe探針:啟動檢查機(jī)制,應(yīng)用一些啟動緩慢的業(yè)務(wù),避免業(yè)務(wù)長時間啟動而被上面兩類探針kill掉。
ExecAction:在容器內(nèi)執(zhí)行一個命令,若返回碼為0,則表明容器健康。
TCPSocketAction:通過容器的IP地址和端口號執(zhí)行TCP檢查,若能建立TCP連接,則表明容器健康。
HTTPGetAction:通過容器的IP地址、端口號及路徑調(diào)用HTTP Get方法,若響應(yīng)的狀態(tài)碼大于等于200且小于400,則表明容器健康。
Deployment或RC:該調(diào)度策略主要功能就是自動部署一個容器應(yīng)用的多份副本,以及持續(xù)監(jiān)控副本的數(shù)量,在集群內(nèi)始終維持用戶指定的副本數(shù)量。
NodeSelector:定向調(diào)度,當(dāng)需要手動指定將Pod調(diào)度到特定Node上,可以通過Node的標(biāo)簽(Label)和Pod的nodeSelector屬性相匹配。
NodeAffinity親和性調(diào)度:親和性調(diào)度機(jī)制極大的擴(kuò)展了Pod的調(diào)度能力,目前有兩種節(jié)點親和力表達(dá):
requiredDuringSchedulingIgnoredDuringExecution:硬規(guī)則,必須滿足指定的規(guī)則,調(diào)度器才可以調(diào)度Pod至Node上(類似nodeSelector,語法不同)。
preferredDuringSchedulingIgnoredDuringExecution:軟規(guī)則,優(yōu)先調(diào)度至滿足的Node的節(jié)點,但不強(qiáng)求,多個優(yōu)先級規(guī)則還可以設(shè)置權(quán)重值。
Taints和Tolerations(污點和容忍):
Taint:使Node拒絕特定Pod運行;
Toleration:為Pod的屬性,表示Pod能容忍(運行)標(biāo)注了Taint的Node。
初始創(chuàng)建Deployment時,系統(tǒng)創(chuàng)建了一個ReplicaSet,并按用戶的需求創(chuàng)建了對應(yīng)數(shù)量的Pod副本。
當(dāng)更新Deployment時,系統(tǒng)創(chuàng)建了一個新的ReplicaSet,并將其副本數(shù)量擴(kuò)展到1,然后將舊ReplicaSet縮減為2。
之后,系統(tǒng)繼續(xù)按照相同的更新策略對新舊兩個ReplicaSet進(jìn)行逐個調(diào)整。
最后,新的ReplicaSet運行了對應(yīng)個新版本Pod副本,舊的ReplicaSet副本數(shù)量則縮減為0。
Recreate:設(shè)置spec.strategy.type=Recreate,表示Deployment在更新Pod時,會先殺掉所有正在運行的Pod,然后創(chuàng)建新的Pod。
RollingUpdate:設(shè)置spec.strategy.type=RollingUpdate,表示Deployment會以滾動更新的方式來逐個更新Pod。同時,可以通過設(shè)置spec.strategy.rollingUpdate下的兩個參數(shù)(maxUnavailable和maxSurge)來控制滾動更新的過程。
在去做每個節(jié)點的日志收集工作。
監(jiān)控每個節(jié)點的的運行狀態(tài)。
ClusterIP:虛擬的服務(wù)IP地址,該地址用于Kubernetes集群內(nèi)部的Pod訪問,在Node上kube-proxy通過設(shè)置的iptables規(guī)則進(jìn)行轉(zhuǎn)發(fā);
NodePort:使用宿主機(jī)的端口,使能夠訪問各Node的外部客戶端通過Node的IP地址和端口號就能訪問服務(wù);
LoadBalancer:使用外接負(fù)載均衡器完成到服務(wù)的負(fù)載分發(fā),需要在spec.status.loadBalancer字段指定外部負(fù)載均衡器的IP地址,通常用于公有云。
RoundRobin:默認(rèn)為輪詢模式,即輪詢將請求轉(zhuǎn)發(fā)到后端的各個Pod上。
SessionAffinity:基于客戶端IP地址進(jìn)行會話保持的模式,即第1次將某個客戶端發(fā)起的請求轉(zhuǎn)發(fā)到后端的某個Pod上,之后從相同的客戶端發(fā)起的請求都將被轉(zhuǎn)發(fā)到后端相同的Pod上。
映射Pod到物理機(jī):將Pod端口號映射到宿主機(jī),即在Pod中采用hostPort方式,以使客戶端應(yīng)用能夠通過物理機(jī)訪問容器應(yīng)用。
映射Service到物理機(jī):將Service端口號映射到宿主機(jī),即在Service中采用nodePort方式,以使客戶端應(yīng)用能夠通過物理機(jī)訪問容器應(yīng)用。
映射Sercie到LoadBalancer:通過設(shè)置LoadBalancer映射到云服務(wù)商提供的LoadBalancer地址。這種用法僅用于在公有云服務(wù)提供商的云平臺上設(shè)置Service的場景。
Always:鏡像標(biāo)簽為latest時,總是從指定的倉庫中獲取鏡像。
Never:禁止從倉庫中下載鏡像,也就是說只能使用本地鏡像。
IfNotPresent:僅當(dāng)本地沒有對應(yīng)鏡像時,才從目標(biāo)倉庫中下載。默認(rèn)的鏡像下載策略是:當(dāng)鏡像標(biāo)簽是latest時,默認(rèn)策略是Always;當(dāng)鏡像標(biāo)簽是自定義時(也就是標(biāo)簽不是latest),那么默認(rèn)策略是IfNotPresent。
預(yù)選(Predicates):輸入是所有節(jié)點,輸出是滿足預(yù)選條件的節(jié)點。kube-scheduler根據(jù)預(yù)選策略過濾掉不滿足策略的Nodes。如果某節(jié)點的資源不足或者不滿足預(yù)選策略的條件則無法通過預(yù)選。如“Node的label必須與Pod的Selector一致”。
優(yōu)選(Priorities):輸入是預(yù)選階段篩選出的節(jié)點,優(yōu)選會根據(jù)優(yōu)先策略為通過預(yù)選的Nodes進(jìn)行打分排名,選擇得分最高的Node。例如,資源越富裕、負(fù)載越小的Node可能具有越高的排名。
基礎(chǔ)設(shè)施方面:保證容器與其所在宿主機(jī)的隔離;
權(quán)限方面:
最小權(quán)限原則:合理限制所有組件的權(quán)限,確保組件只執(zhí)行它被授權(quán)的行為,通過限制單個組件的能力來限制它的權(quán)限范圍。
用戶權(quán)限:劃分普通用戶和管理員的角色。
集群方面:
API Server的認(rèn)證授權(quán):Kubernetes集群中所有資源的訪問和變更都是通過Kubernetes API Server來實現(xiàn)的,因此需要建議采用更安全的HTTPS或Token來識別和認(rèn)證客戶端身份(Authentication),以及隨后訪問權(quán)限的授權(quán)(Authorization)環(huán)節(jié)。
API Server的授權(quán)管理:通過授權(quán)策略來決定一個API調(diào)用是否合法。對合法用戶進(jìn)行授權(quán)并且隨后在用戶訪問時進(jìn)行鑒權(quán),建議采用更安全的RBAC方式來提升集群安全授權(quán)。
敏感數(shù)據(jù)引入Secret機(jī)制:對于集群敏感數(shù)據(jù)建議使用Secret方式進(jìn)行保護(hù)。
AdmissionControl(準(zhǔn)入機(jī)制):對kubernetes api的請求過程中,順序為:先經(jīng)過認(rèn)證 & 授權(quán),然后執(zhí)行準(zhǔn)入操作,最后對目標(biāo)對象進(jìn)行操作。
AlwaysAdmit:允許所有請求
AlwaysDeny:禁止所有請求,多用于測試環(huán)境。
ServiceAccount:它將serviceAccounts實現(xiàn)了自動化,它會輔助serviceAccount做一些事情,比如如果pod沒有serviceAccount屬性,它會自動添加一個default,并確保pod的serviceAccount始終存在。
LimitRanger:觀察所有的請求,確保沒有違反已經(jīng)定義好的約束條件,這些條件定義在namespace中LimitRange對象中。
NamespaceExists:觀察所有的請求,如果請求嘗試創(chuàng)建一個不存在的namespace,則這個請求被拒絕。
對集群中的資源和非資源權(quán)限均有完整的覆蓋。
整個RBAC完全由幾個API對象完成, 同其他API對象一樣, 可以用kubectl或API進(jìn)行操作。
可以在運行時進(jìn)行調(diào)整,無須重新啟動API Server。
在創(chuàng)建Pod時,通過為Pod指定Service Account來自動使用該Secret。
通過掛載該Secret到Pod來使用它。
在Docker鏡像下載時使用,通過指定Pod的spc.ImagePullSecrets來引用它。
特權(quán)模式:privileged是否允許Pod以特權(quán)模式運行。
宿主機(jī)資源:控制Pod對宿主機(jī)資源的控制,如hostPID:是否允許Pod共享宿主機(jī)的進(jìn)程空間。
用戶和組:設(shè)置運行容器的用戶ID(范圍)或組(范圍)。
提升權(quán)限:AllowPrivilegeEscalation:設(shè)置容器內(nèi)的子進(jìn)程是否可以提升權(quán)限,通常在設(shè)置非root用戶(MustRunAsNonRoot)時進(jìn)行設(shè)置。
SELinux:進(jìn)行SELinux的相關(guān)配置。
容器(Container):是擁有獨立Linux網(wǎng)絡(luò)命名空間的環(huán)境,例如使用Docker或rkt創(chuàng)建的容器。容器需要擁有自己的Linux網(wǎng)絡(luò)命名空間,這是加入網(wǎng)絡(luò)的必要條件。
網(wǎng)絡(luò)(Network):表示可以互連的一組實體,這些實體擁有各自獨立、唯一的IP地址,可以是容器、物理機(jī)或者其他網(wǎng)絡(luò)設(shè)備(比如路由器)等。
它能協(xié)助Kubernetes,給每一個Node上的Docker容器都分配互相不沖突的IP地址。
它能在這些IP地址之間建立一個覆蓋網(wǎng)絡(luò)(Overlay Network),通過這個覆蓋網(wǎng)絡(luò),將數(shù)據(jù)包原封不動地傳遞到目標(biāo)容器內(nèi)。
EmptyDir(空目錄):沒有指定要掛載宿主機(jī)上的某個目錄,直接由Pod內(nèi)保部映射到宿主機(jī)上。類似于docker中的manager volume。
場景:
只需要臨時將數(shù)據(jù)保存在磁盤上,比如在合并/排序算法中;
作為兩個容器的共享存儲。
特性:
同個Pod里面的不同容器,共享同一個持久化目錄,當(dāng)Pod節(jié)點刪除時,Volume的數(shù)據(jù)也會被刪除。
EmptyDir的數(shù)據(jù)持久化的生命周期和使用的Pod一致,一般是作為臨時存儲使用。
Hostpath:將宿主機(jī)上已存在的目錄或文件掛載到容器內(nèi)部。類似于Docker中的bind mount掛載方式。
特性:增加了Pod與節(jié)點之間的耦合。
PersistentVolume(簡稱PV):如基于NFS服務(wù)的PV,也可以基于GFS的PV。它的作用是統(tǒng)一數(shù)據(jù)持久化目錄,方便管理。
Available:可用狀態(tài),還未與某個PVC綁定。
Bound:已與某個PVC綁定。
Released:綁定的PVC已經(jīng)刪除,資源已釋放,但沒有被集群回收。
Failed:自動資源回收失敗。
靜態(tài)模式:集群管理員手工創(chuàng)建許多PV,在定義PV時需要將后端存儲的特性進(jìn)行設(shè)置。
動態(tài)模式:集群管理員無須手工創(chuàng)建PV,而是通過StorageClass的設(shè)置對后端存儲進(jìn)行描述,標(biāo)記為某種類型。此時要求PVC對存儲的類型進(jìn)行聲明,系統(tǒng)將自動完成PV的創(chuàng)建及與PVC的綁定。
CSI Controller的主要功能是提供存儲服務(wù)視角對存儲資源和存儲卷進(jìn)行管理和操作。
CSI Node的主要功能是對主機(jī)(Node)上的Volume進(jìn)行管理和操作。
在該Node上安裝Docker、kubelet和kube-proxy服務(wù);
然后配置kubelet和kubeproxy的啟動參數(shù),將Master URL指定為當(dāng)前Kubernetes集群Master的地址,最后啟動這些服務(wù);
通過kubelet默認(rèn)的自動注冊機(jī)制,新的Worker將會自動加入現(xiàn)有的Kubernetes集群中;
Kubernetes Master在接受了新Worker的注冊之后,會自動將其納入當(dāng)前集群的調(diào)度范圍。
Elasticsearch:是一個搜索引擎,負(fù)責(zé)存儲日志并提供查詢接口;
Fluentd:負(fù)責(zé)從 Kubernetes 搜集日志,每個Node節(jié)點上面的Fluentd監(jiān)控并收集該節(jié)點上面的系統(tǒng)日志,并將處理過后的日志信息發(fā)送給Elasticsearch;
Kibana:提供了一個 Web GUI,用戶可以瀏覽和搜索存儲在 Elasticsearch 中的日志。
統(tǒng)一管理、配置和更新這些分散的Kubernetes的應(yīng)用資源文件;
分發(fā)和復(fù)用一套應(yīng)用模板;
將應(yīng)用的一系列資源當(dāng)做一個軟件包管理。
對于應(yīng)用發(fā)布者而言,可以通過 Helm 打包應(yīng)用、管理應(yīng)用依賴關(guān)系、管理應(yīng)用版本并發(fā)布應(yīng)用到軟件倉庫。
![]()
