執行時類

特性狀態: Kubernetes v1.20 [stable]

此頁面描述了 RuntimeClass 資源和執行時選擇機制。

RuntimeClass 是一個用於選擇容器執行時配置的特性。容器執行時配置用於執行 Pod 的容器。

動機

你可以在不同的 Pod 之間設定不同的 RuntimeClass,以在效能和安全性之間取得平衡。例如,如果你的工作負載的一部分需要高水平的資訊安全保證,你可以選擇排程這些 Pod,使其在使用硬體虛擬化的容器執行時中執行。這樣,你將受益於替代執行時的額外隔離,但會付出一些額外的開銷。

你還可以使用 RuntimeClass 以相同的容器執行時但不同的設定來執行不同的 Pod。

設定

  1. 在節點上配置 CRI 實現(依賴於執行時)
  2. 建立相應的 RuntimeClass 資源

1. 在節點上配置 CRI 實現

透過 RuntimeClass 可用的配置是容器執行時介面 (CRI) 實現相關的。請參閱你的 CRI 實現的相應文件(如下)以瞭解如何配置。

配置具有一個相應的 handler 名稱,由 RuntimeClass 引用。該處理程式必須是有效的 DNS 標籤名稱

2. 建立相應的 RuntimeClass 資源

步驟 1 中設定的每個配置都應該有一個關聯的 handler 名稱,用於標識配置。對於每個處理程式,建立一個相應的 RuntimeClass 物件。

RuntimeClass 資源目前只有兩個重要欄位:RuntimeClass 名稱(metadata.name)和處理程式(handler)。物件定義如下:

# RuntimeClass is defined in the node.k8s.io API group
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
  # The name the RuntimeClass will be referenced by.
  # RuntimeClass is a non-namespaced resource.
  name: myclass 
# The name of the corresponding CRI configuration
handler: myconfiguration 

RuntimeClass 物件的名稱必須是有效的 DNS 子域名

用途

一旦為叢集配置了 RuntimeClass,你可以在 Pod 規約中指定 runtimeClassName 來使用它。例如:

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  runtimeClassName: myclass
  # ...

這將指示 kubelet 使用指定的 RuntimeClass 來執行此 Pod。如果指定的 RuntimeClass 不存在,或者 CRI 無法執行相應的處理程式,Pod 將進入 Failed 終止階段。請查詢相應的事件以獲取錯誤訊息。

如果未指定 runtimeClassName,則將使用預設的 RuntimeHandler,這與停用 RuntimeClass 特性時的行為等效。

CRI 配置

有關設定 CRI 執行時的更多詳細資訊,請參閱 CRI 安裝

containerd

執行時處理程式透過 containerd 的配置檔案 /etc/containerd/config.toml 進行配置。有效的處理程式在 runtimes 部分下配置:

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.${HANDLER_NAME}]

有關詳細資訊,請參閱 containerd 的配置文件

CRI-O

執行時處理程式透過 CRI-O 的配置檔案 /etc/crio/crio.conf 進行配置。有效的處理程式在 crio.runtime 表下配置

[crio.runtime.runtimes.${HANDLER_NAME}]
  runtime_path = "${PATH_TO_BINARY}"

有關詳細資訊,請參閱 CRI-O 的配置文件

排程

特性狀態: Kubernetes v1.16 [beta]

透過為 RuntimeClass 指定 scheduling 欄位,你可以設定約束以確保使用此 RuntimeClass 執行的 Pod 排程到支援它的節點。如果未設定 scheduling,則假定所有節點都支援此 RuntimeClass。

為了確保 Pod 落在支援特定 RuntimeClass 的節點上,這組節點應該有一個共同的標籤,然後由 runtimeclass.scheduling.nodeSelector 欄位進行選擇。RuntimeClass 的 nodeSelector 與 Pod 的 nodeSelector 在准入階段合併,有效地取兩者所選節點集的交集。如果存在衝突,Pod 將被拒絕。

如果支援的節點被汙染以防止其他 RuntimeClass Pod 在節點上執行,你可以向 RuntimeClass 新增 tolerations。與 nodeSelector 一樣,容忍度在准入階段與 Pod 的容忍度合併,有效地取兩者所容忍節點集的並集。

要了解有關配置節點選擇器和容忍度的更多資訊,請參閱將 Pod 分配給節點

Pod 開銷

特性狀態: Kubernetes v1.24 [stable]

你可以指定與執行 Pod 相關的**開銷**資源。宣告開銷允許叢集(包括排程器)在對 Pod 和資源做出決策時將其考慮在內。

Pod 開銷透過 RuntimeClass 的 overhead 欄位定義。透過使用此欄位,你可以指定利用此 RuntimeClass 執行 Pod 的開銷,並確保這些開銷在 Kubernetes 中得到考慮。

下一步

上次修改時間:2022 年 10 月 29 日下午 6:14 (PST):重做容器概念索引 (ddfcad4fe8)