Kubernetes教程

Kubernetes容器运行时类

Kubernetes(常简称为K8s)是一个用于容器编排和管理的开源平台。在Kubernetes中,容器运行时类是指容器运行时的实现或接口,用于在Kubernetes集群中管理和执行容器的各项操作。RuntimeClass是一个用于选择容器运行时配置的特性,容器运行时配置用于运行Pod中的容器。本文描述了RuntimeClass资源和运行时的选择机制。

一、动机

Kubernetes可以为不同的Pod设置不同的RuntimeClass,以在性能和安全性之间取得平衡。举例来说,如果某些工作负载需要更高级别的信息安全保证,可以决定将这些Pod尽可能调度到使用硬件虚拟化容器运行时的环境中运行。从而获得来自不同运行时的额外隔离效果,但是会带来一些额外开销。还可以使用RuntimeClass来运行具有相同容器运行时但具有不同配置的Pod。

二、设置

1、节点配置CRI实现

RuntimeClass的配置依赖于运行时接口(CRI)的实现。RuntimeClass假设集群中的节点配置是同构的(所有的节点在容器运行时方面的配置是相同的)。

所有这些配置都具有相应的 handler 名,并被 RuntimeClass 引用。 handler 必须是有效的 DNS 标签名。

2. 创建RuntimeClass资源

在上面节点配置CRI实现中,每个配置都需要有一个用于标识配置的handler。 针对每个 handler 需要创建一个 RuntimeClass 对象。RuntimeClass 资源当前只有两个重要的字段:RuntimeClass 名 (metadata.name) 和 handler (handler)。 对象定义如下所示:

# RuntimeClass 定义于 node.k8s.io API 组
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
# 用来引用 RuntimeClass 的名字
# RuntimeClass 是一个集群层面的资源
name: myclass
# 对应的 CRI 配置的名称
handler: myconfiguration

RuntimeClass 对象的名称必须是有效的 DNS子域名。

建议将 RuntimeClass 写操作(create、update、patch 和 delete)限定于集群管理员使用。 通常这是默认配置。

三、使用说明

一旦完成集群中 RuntimeClasses 的配置, 可以在 Pod spec 中指定 runtimeClassName 来使用它。例如:

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

这一设置会告诉 kubelet 使用所指的 RuntimeClass 来运行该 Pod。 如果所指的 RuntimeClass 不存在或者 CRI 无法运行相应的 handler, 那么 Pod 将会进入 Failed 终止阶段。 可以查看相应的事件, 获取执行过程中的错误信息。如果未指定 runtimeClassName,则将使用默认的 RuntimeHandler,相当于禁用 RuntimeClass 功能特性。

1、CRI配置

containerd:

通过 containerd 的 /etc/containerd/config.toml 配置文件来配置运行时 handler。 handler 需要配置在 runtimes 块中:

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

CRI-O:

通过 CRI-O 的 /etc/crio/crio.conf 配置文件来配置运行时 handler。 handler 需要配置在 crio.runtime 表之下:

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

四、调度

特性状态: Kubernetes v1.16 [beta]

通过为 RuntimeClass 指定 scheduling 字段, 可以通过设置约束,确保运行该 RuntimeClass 的 Pod 被调度到支持该 RuntimeClass 的节点上。 如果未设置 scheduling,则假定所有节点均支持此 RuntimeClass。

为了确保 pod 会被调度到支持指定运行时的 node 上,每个 node 需要设置一个通用的 label 用于被 runtimeclass.scheduling.nodeSelector 挑选。在 admission 阶段,RuntimeClass 的 nodeSelector 将会与 Pod 的 nodeSelector 合并,取二者的交集。如果有冲突,Pod 将会被拒绝。如果 node 需要阻止某些需要特定 RuntimeClass 的 Pod,可以在 tolerations 中指定。 与 nodeSelector 一样,tolerations 也在 admission 阶段与 Pod 的 tolerations 合并,取二者的并集。

1、Pod 开销

特性状态: Kubernetes v1.24 [stable]

可以指定与运行 Pod 相关的开销资源。声明开销即允许集群(包括调度器)在决策 Pod 和资源时将其考虑在内。Pod 开销通过 RuntimeClass 的 overhead 字段定义。 通过使用这个字段,可以指定使用该 RuntimeClass 运行 Pod 时的开销并确保 Kubernetes 将这些开销计算在内。

广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录