概念 - Kubernetes 運行時類型

功能狀態:Kubernetes v1.14 beta
該部分描述 RuntimeClass 資源和運行時選擇機制。

RuntimeClass 是用於選擇容器運行時配置的功能。容器運行時配置用於運行 Pod 的容器。

動機

我們可以在不同的 Pod 之間設置不同的 RuntimeClass,以實現性能與安全性之間的平衡。例如,如果我們的部分工作負載應得到高級別的信息安全保證,則可以選擇調度這些 Pod,以便它們在使用硬件虛擬化的容器運行時中運行。然後,我們將受益於備用運行時的額外隔離,但要一些額外的開銷。

我們還可以使用 RuntimeClass 在相同的容器運行時但不同的設置來運行不同的 Pod

搭建

確保啓用了 RuntimeClass 特性門控(敬請期待~~)(默認情況下是的)。有關啓用特性門控的說明,請參見特性門控。必須在 apiserver 和 kubelet 上啓用 RuntimeClass 特性門控。

1. 節點上配置 CRI 實現

通過 RuntimeClass 可用的配置取決於容器運行時接口(CRI)實現。有關如何配置的信息,請參見 CRI 實現的響應文檔(如下(敬請期待~~))。

注意:默認情況下,RuntimeClass 假設整個集羣上的節點配置均勻(這意味着所有節點在容器運行時方面的配置方式均相同)。要支持異構節點配置,請參閱下面的調度。

這些配置具有一個相應的 handler 名稱,由 RuntimeClass 引用。句柄必須是有效的 DNS 1123 標籤(字母數字 + - 字符)。

2. 創建相應的 RuntimeClass 資源

步驟 1 中的配置設置應分別具有一個關聯的 handler 名稱,該名稱標識配置。對於每個句柄,創建一個相應的 RuntimeClass 對象。

當前,RuntimeClass 資源只有兩個重要字段:RuntimeClass 名稱(metadata.name)和句柄(handler)。對象定義如下所示:

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

RuntimeClass 對象的名稱必須是有效的 DNS 子域名(敬請期待~~)。

注意:建議將 RuntimeClass 寫入操作(創建/更新/布丁/刪除)限制爲集羣管理員。這通常是默認設置。有關更多詳細信息,請參見授權概述(敬請期待~~)。

用法

一旦爲集羣配置了 RuntimeClasses,使用它們就非常簡單。在 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 安裝(敬請期待~~)。

dockershim

Kubernetes 內置的 dockershim CRI 不支持運行時句柄。

containerd

通過 /etc/containerd/config.toml 中容器的配置來配置運行時句柄。有效的句柄配置在運行時部分下:

[plugins.cri.containerd.runtimes.${HANDLER_NAME}]

有關更多詳細信息,請參見容器的配置文檔:https://github.com/containerd/cri/blob/master/docs/config.md

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
從 Kubernetes v1.16 開始,RuntimeClass 通過其 scheduling 字段包括對異構集羣的支持。通過使用這些字段,可以確保將與該 RuntimeClass 一起運行的 Pod 調度到支持它的節點上。要使用計劃支持,我們必須啓用 RuntimeClass 准入控制器(敬請期待~~)(默認值爲 1.16)。

爲確保 Pod 落在支持特定 RuntimeClass 的節點上,該節點集羣應具有一個公共標籤,然後由 runtimeclass.scheduling.nodeSelector 字段選擇該標籤。允許時將 RuntimeClass 的 nodeSelector 與 pod 的 nodeSelector 合併,有效地獲取每個節點選擇的節點集的交集。如果有衝突,則將拒絕該 pod。

如果對受支持的節點進行了污染以防止其它 RuntimeClass 容器在該節點上運行,則可以向 RuntimeClass 添加容錯。與 nodeSelector 一樣,容錯在接納時與 pod 的容錯合併,從而有效地吸收了每個節點可容忍的節點集的並集。

要了解有關配置節點選擇器和容錯的更多信息,請參閱將 Pod 分配給節點(敬請期待~~)。

特性狀態:Kubernetes v1.18 beta
我們可以指定與運行 Pod 相關的開銷資源。聲明開銷允許集羣(包括調度)在做出有關 Pod 和資源的決策時對其進行說明。要使用 Pod 開銷,必須啓用 PodOverhead 特性門控(敬請期待~~)(默認情況下處於啓用狀態)。

Pod 的開銷是在 RuntimeClass 中通過 overhead 字段定義的。通過使用這些字段,我們可以使用該 RuntimeClass 指定運行的 Pod 的開銷,並確保在 Kubernetes 中考慮了這些開銷。

下一步怎麼做

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章