這篇文章主要講解了“Kubernetes容器調(diào)度怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Kubernetes容器調(diào)度怎么使用”吧!
我們提供的服務(wù)有:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、棗莊ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的棗莊網(wǎng)站制作公司
節(jié)點(diǎn)調(diào)度
根據(jù)原生的Kubernetes行為,默認(rèn)情況下,Rancher 2.0工作負(fù)載中的pod將分布在可調(diào)度且具有足夠可用容量的節(jié)點(diǎn)(主機(jī))上。但就像1.6版本一樣,Rancher 2.0也有助于:
在特定節(jié)點(diǎn)上運(yùn)行所有pod
使用標(biāo)簽進(jìn)行節(jié)點(diǎn)調(diào)度
以下是1.6 UI中的調(diào)度方式。Rancher允許您在特定主機(jī)上運(yùn)行所有容器,指定硬/軟主機(jī)標(biāo)簽,或在部署服務(wù)時(shí)使用親和性/反親和性規(guī)則。
以下是Rancher 2.0中對(duì)應(yīng)的節(jié)點(diǎn)調(diào)度UI,它在部署工作負(fù)載時(shí)提供相同的功能。
Rancher使用底層的原生Kubernetes構(gòu)造來(lái)指定節(jié)點(diǎn)的親和性/反親和性。
下面的示例中我們將來(lái)看看如何使用節(jié)點(diǎn)調(diào)度選項(xiàng)來(lái)調(diào)度工作負(fù)載pod,然后看看Kubernetes YAML規(guī)范和Rancher 1.6 Docker Compose配置的對(duì)比。
示例:在特定節(jié)點(diǎn)上運(yùn)行所有Pod
在部署工作負(fù)載(導(dǎo)航到Cluster> Project> Workloads)時(shí),可以將工作負(fù)載中的所有pod調(diào)度到特定節(jié)點(diǎn)。
在這里,我使用特定節(jié)點(diǎn)上的nginx鏡像部署scale = 2的工作負(fù)載。
如果某節(jié)點(diǎn)有足夠的計(jì)算資源可用,Rancher將選擇該節(jié)點(diǎn);如果使用hostPort,則不會(huì)發(fā)生端口沖突。如果該工作負(fù)載使用與另一個(gè)工作負(fù)載沖突的nodePort來(lái)對(duì)外暴露,那么部署是可以成功創(chuàng)建的,但它不會(huì)創(chuàng)建nodePort服務(wù)。如此一來(lái),工作負(fù)載則完全不會(huì)暴露了。
在“工作負(fù)載/Workload”選項(xiàng)卡上,您可以按節(jié)點(diǎn)列出工作負(fù)載。在此,我可以看到我的Nginx工作負(fù)載的兩個(gè)pod都安排在指定的節(jié)點(diǎn)上了:
Kubernetes pod規(guī)范中的調(diào)度規(guī)則如下所示:
示例:主機(jī)標(biāo)簽的親和性/反親和性**
我在Rancher 2.0集群中向node1添加了標(biāo)簽foo = bar,以測(cè)試基于標(biāo)簽的節(jié)點(diǎn)調(diào)度規(guī)則。
主機(jī)標(biāo)簽親和性:硬
下圖展示了如何在Rancher 2.0 UI中指定主機(jī)標(biāo)簽的親和性規(guī)則。硬親和性規(guī)則意味著所選主機(jī)必須滿足所有調(diào)度規(guī)則。如果找不到此類主機(jī),則工作負(fù)載將無(wú)法部署。
在PodSpec YAML中,此規(guī)則將轉(zhuǎn)換為字段nodeAffinity。另外請(qǐng)注意,我已經(jīng)包含了Rancher 1.6 docker-compose.yml以使用標(biāo)簽實(shí)現(xiàn)相同的調(diào)度行為。
主機(jī)標(biāo)簽親和性:軟
如果您是Rancher 1.6用戶,那么您一定知道軟親和性規(guī)則意味著調(diào)度程序會(huì)嘗試按規(guī)則部署應(yīng)用程序,但即使有主機(jī)不滿足規(guī)則也可以成功部署。以下是如何在Rancher 2.0 UI中指定此規(guī)則:
pod的相應(yīng)YAML規(guī)范如下所示:
主機(jī)標(biāo)簽反親和性
除了key = value主機(jī)標(biāo)簽匹配規(guī)則外,Kubernetes調(diào)度結(jié)構(gòu)還支持以下運(yùn)算符:
因此,要實(shí)現(xiàn)反親和性,可以使用運(yùn)算符NotIn和DoesNotExist作為節(jié)點(diǎn)標(biāo)簽。
使用容器標(biāo)簽進(jìn)行調(diào)度
Rancher 1.6中的這一功能允許您將容器調(diào)度到具有特定標(biāo)簽的容器的主機(jī)。要在Rancher 2.0上執(zhí)行此操作,請(qǐng)使用Kubernetes inter-pod親和和反親和功能:
Kubernetes允許您根據(jù)pod標(biāo)簽而不是節(jié)點(diǎn)標(biāo)簽來(lái)約束pod可以被調(diào)度到哪些節(jié)點(diǎn)。
Rancher 1.6中最常用的調(diào)度功能之一是使用容器上的標(biāo)簽對(duì)服務(wù)本身進(jìn)行反親和。要在Rancher 2.0中復(fù)制此行為,我們可以在Kubernetes YAML規(guī)范中使用pod反親和構(gòu)造。例如,可以考慮使用Nginx Web工作負(fù)載。要確保此工作負(fù)載中的pod不在同一主機(jī)上,您可以使用podAntiAffinity構(gòu)造,如下所示。通過(guò)使用標(biāo)簽指定podAntiAffinity,我們可以確保每個(gè)Nginx副本不在單個(gè)節(jié)點(diǎn)上共存。
使用Rancher CLI,可以將此工作負(fù)載部署到Kubernetes集群上。請(qǐng)注意,上面的部署指定了三個(gè)副本,并且我在Kubernetes集群中有三個(gè)可調(diào)度節(jié)點(diǎn)。
由于指定了podAntiAffinity,因此三個(gè)pod最終位于不同的節(jié)點(diǎn)上。為了進(jìn)一步檢查podAntiAffinity的應(yīng)用方式,我可以將部署擴(kuò)展到四個(gè)pod。請(qǐng)注意,由于調(diào)度程序無(wú)法找到滿足podAntiAffinityrule的另一個(gè)節(jié)點(diǎn),因此無(wú)法調(diào)度第四個(gè)pod。
基于資源的調(diào)度
在Rancher 1.6中創(chuàng)建服務(wù)時(shí),可以在UI的“安全/主機(jī)”選項(xiàng)卡中指定內(nèi)存預(yù)留和mCPU預(yù)留。Cattle會(huì)將服務(wù)的容器安排到具有足夠可用計(jì)算資源的主機(jī)上。
在Rancher 2.0中,您可以使用pod容器規(guī)范下的resources.requests.memory和resources.requests.cpu指定工作負(fù)載pod所需的內(nèi)存和CPU資源。
指定這些資源請(qǐng)求時(shí),Kubernetes調(diào)度程序會(huì)將pod分配給具有足夠容量的節(jié)點(diǎn)。
僅給主機(jī)調(diào)度特定服務(wù)
Rancher 1.6能夠在主機(jī)上指定容器標(biāo)簽,從而只將特定容器調(diào)度給它。
要在Rancher 2.0中實(shí)現(xiàn)此目的,可以在pod規(guī)范中使用相應(yīng)的Kubernetes的“添加節(jié)點(diǎn)taints(如主機(jī)標(biāo)簽)并使用容差”的功能:
全局服務(wù)
在Rancher 1.6中,全局服務(wù)是指在環(huán)境中的每個(gè)主機(jī)上部署容器的服務(wù):
如果服務(wù)的標(biāo)簽為io.rancher.scheduler.global:'true',則Rancher 1.6調(diào)度程序?qū)⒃诃h(huán)境中的每個(gè)主機(jī)上調(diào)度服務(wù)容器。如文檔中所述,如果將新主機(jī)添加到環(huán)境中,并且主機(jī)滿足全局服務(wù)的主機(jī)要求,則Rancher將自動(dòng)啟動(dòng)該服務(wù)。
下面的示例是Rancher 1.6中的全局服務(wù)示例。請(qǐng)注意,只需放置所需標(biāo)簽就足以使服務(wù)全局化。
我們?nèi)绾问褂肒ubernetes在Rancher 2.0中部署全局服務(wù)?
為此,Rancher為用戶的工作負(fù)載部署了Kubernetes DaemonSet對(duì)象。DaemonSet的功能與Rancher 1.6全局服務(wù)完全相同。Kubernetes調(diào)度程序?qū)⒃诩旱拿總€(gè)節(jié)點(diǎn)上部署一個(gè)pod,并且隨著新節(jié)點(diǎn)的添加,調(diào)度程序?qū)⒃谒鼈兩蠁?dòng)新的pod,前提是它們與工作負(fù)載的調(diào)度要求相匹配。
此外,在2.0中,您還可以將DaemonSet限制為部署到具有特定標(biāo)簽的節(jié)點(diǎn)
使用Rancher 2.0 UI部署DaemonSet
如果您是Rancher 1.6用戶,要使用UI將全局服務(wù)遷移到Rancher 2.0,請(qǐng)導(dǎo)航到Cluster> Project> Workloads視圖。部署工作負(fù)載時(shí),您可以選擇以下工作負(fù)載類型:
這就是上面的DaemonSetworkload相應(yīng)的Kubernetes YAML規(guī)范:
從Docker Compose到Kubernetes YAML
要使用Compose配置將Rancher 1.6全局服務(wù)遷移到Rancher 2.0,請(qǐng)按照下列步驟操作。
您可以使用Kompose工具將docker-compose.yml文件從Rancher 1.6轉(zhuǎn)換為Kubernetes YAML,然后使用Kubernetes集群中的Kubectl客戶端工具或Rancher CLI部署應(yīng)用程序。
回頭想想上面提到的docker-compose.yml規(guī)范,其中的Nginx服務(wù)就是全局服務(wù)。如下是使用Kompose將其轉(zhuǎn)換為Kubernetes YAML的方法:
下面開始針對(duì)您的Kubernetes集群配置Rancher CLI,并部署生成的* -daemonset.yaml文件。
如上所示,我的Kubernetes集群有兩個(gè)可以調(diào)度工作負(fù)載的工作節(jié)點(diǎn),并且部署global-daemonset.yaml為Daemonset啟動(dòng)了兩個(gè)pod,每個(gè)節(jié)點(diǎn)上有一個(gè)pod。
感謝各位的閱讀,以上就是“Kubernetes容器調(diào)度怎么使用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Kubernetes容器調(diào)度怎么使用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!