共計(jì) 3335 個(gè)字符,預(yù)計(jì)需要花費(fèi) 9 分鐘才能閱讀完成。
這篇文章主要講解了“Kubernetes 容器調(diào)度怎么使用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著丸趣 TV 小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Kubernetes 容器調(diào)度怎么使用”吧!
節(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)造,如下所示。通過使用標(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)绾问褂?Kubernetes 在 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)過本文的學(xué)習(xí)后,相信大家對(duì) Kubernetes 容器調(diào)度怎么使用這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!