W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
FEATURE STATE: Kubernetes v1.20 [stable]
本頁(yè)面描述了 RuntimeClass 資源和運(yùn)行時(shí)的選擇機(jī)制。
RuntimeClass 是一個(gè)用于選擇容器運(yùn)行時(shí)配置的特性,容器運(yùn)行時(shí)配置用于運(yùn)行 Pod 中的容器。
你可以在不同的 Pod 設(shè)置不同的 RuntimeClass,以提供性能與安全性之間的平衡。 例如,如果你的部分工作負(fù)載需要高級(jí)別的信息安全保證,你可以決定在調(diào)度這些 Pod 時(shí)盡量使它們?cè)谑褂糜布摂M化的容器運(yùn)行時(shí)中運(yùn)行。 這樣,你將從這些不同運(yùn)行時(shí)所提供的額外隔離中獲益,代價(jià)是一些額外的開銷。
你還可以使用 RuntimeClass 運(yùn)行具有相同容器運(yùn)行時(shí)但具有不同設(shè)置的 Pod。
RuntimeClass 的配置依賴于 運(yùn)行時(shí)接口(CRI)的實(shí)現(xiàn)。 根據(jù)你使用的 CRI 實(shí)現(xiàn),查閱相關(guān)的文檔(下方)來(lái)了解如何配置。
RuntimeClass 假設(shè)集群中的節(jié)點(diǎn)配置是同構(gòu)的(換言之,所有的節(jié)點(diǎn)在容器運(yùn)行時(shí)方面的配置是相同的)。 如果需要支持異構(gòu)節(jié)點(diǎn),配置方法請(qǐng)參閱下面的 調(diào)度。
所有這些配置都具有相應(yīng)的 ?handler
?名,并被 RuntimeClass 引用。 handler 必須是有效的 DNS 標(biāo)簽名。
在上面步驟 1 中,每個(gè)配置都需要有一個(gè)用于標(biāo)識(shí)配置的 ?handler
?。 針對(duì)每個(gè) handler 需要?jiǎng)?chuàng)建一個(gè) RuntimeClass 對(duì)象。
RuntimeClass 資源當(dāng)前只有兩個(gè)重要的字段:RuntimeClass 名 (?metadata.name
?) 和 handler (?handler
?)。 對(duì)象定義如下所示:
apiVersion: node.k8s.io/v1 # RuntimeClass 定義于 node.k8s.io API 組
kind: RuntimeClass
metadata:
name: myclass # 用來(lái)引用 RuntimeClass 的名字
# RuntimeClass 是一個(gè)集群層面的資源
handler: myconfiguration # 對(duì)應(yīng)的 CRI 配置的名稱
建議將 RuntimeClass 寫操作(create、update、patch 和 delete)限定于集群管理員使用。 通常這是默認(rèn)配置。
一旦完成集群中 RuntimeClasses 的配置,使用起來(lái)非常方便。 在 Pod spec 中指定 ?runtimeClassName
?即可。例如:
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
runtimeClassName: myclass
# ...
這一設(shè)置會(huì)告訴 kubelet 使用所指的 RuntimeClass 來(lái)運(yùn)行該 pod。 如果所指的 RuntimeClass 不存在或者 CRI 無(wú)法運(yùn)行相應(yīng)的 handler, 那么 pod 將會(huì)進(jìn)入 ?Failed
?終止階段。 你可以查看相應(yīng)的事件, 獲取執(zhí)行過(guò)程中的錯(cuò)誤信息。
如果未指定 ?runtimeClassName
?,則將使用默認(rèn)的 RuntimeHandler,相當(dāng)于禁用 RuntimeClass 功能特性。
Dockershim 自 Kubernetes v1.20 起已棄用,并將在 v1.24 中刪除。
為 dockershim 設(shè)置 RuntimeClass 時(shí),必須將運(yùn)行時(shí)處理程序設(shè)置為 ?docker
?。 Dockershim 不支持自定義的可配置的運(yùn)行時(shí)處理程序。
通過(guò) containerd 的 ?/etc/containerd/config.toml
? 配置文件來(lái)配置運(yùn)行時(shí) handler。 handler 需要配置在 runtimes 塊中:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.${HANDLER_NAME}]
更詳細(xì)信息,請(qǐng)查閱 containerd CRI 插件配置指南
通過(guò) cri-o 的 ?/etc/crio/crio.conf
? 配置文件來(lái)配置運(yùn)行時(shí) handler。 handler 需要配置在 crio.runtime 表 下面:
[crio.runtime.runtimes.${HANDLER_NAME}]
runtime_path = "${PATH_TO_BINARY}"
更詳細(xì)信息,請(qǐng)查閱 CRI-O 配置文檔。
FEATURE STATE: Kubernetes v1.16 [beta]
通過(guò)為 RuntimeClass 指定 ?scheduling
?字段, 你可以通過(guò)設(shè)置約束,確保運(yùn)行該 RuntimeClass 的 Pod 被調(diào)度到支持該 RuntimeClass 的節(jié)點(diǎn)上。 如果未設(shè)置 ?scheduling
?,則假定所有節(jié)點(diǎn)均支持此 RuntimeClass 。
為了確保 pod 會(huì)被調(diào)度到支持指定運(yùn)行時(shí)的 node 上,每個(gè) node 需要設(shè)置一個(gè)通用的 label 用于被 ?runtimeclass.scheduling.nodeSelector
? 挑選。在 admission 階段,RuntimeClass 的 nodeSelector 將會(huì)與 pod 的 nodeSelector 合并,取二者的交集。如果有沖突,pod 將會(huì)被拒絕。
如果 node 需要阻止某些需要特定 RuntimeClass 的 pod,可以在 ?tolerations
?中指定。 與 ?nodeSelector
?一樣,tolerations 也在 admission 階段與 pod 的 tolerations 合并,取二者的并集。
FEATURE STATE: Kubernetes v1.18 [beta]
你可以指定與運(yùn)行 Pod 相關(guān)的 開銷 資源。聲明開銷即允許集群(包括調(diào)度器)在決策 Pod 和資源時(shí)將其考慮在內(nèi)。 若要使用 Pod 開銷特性,你必須確保 PodOverhead 特性門控 處于啟用狀態(tài)(默認(rèn)為啟用狀態(tài))。
Pod 開銷通過(guò) RuntimeClass 的 ?overhead
?字段定義。 通過(guò)使用這些字段,你可以指定使用該 RuntimeClass 運(yùn)行 Pod 時(shí)的開銷并確保 Kubernetes 將這些開銷計(jì)算在內(nèi)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: