7.8 KiB
reviewers, title, content_template, weight
| reviewers | title | content_template | weight | ||
|---|---|---|---|---|---|
|
Runtime Class | templates/concept | 20 |
{{% capture overview %}}
{{< feature-state for_k8s_version="v1.12" state="alpha" >}}
本页面讨论的是 RuntimeClass 资源和运行时选择的机制问题。
{{% /capture %}}
{{< toc >}}
{{% capture body %}}
RuntimeClass
RuntimeClass 是一个 alpha 功能,用来选择容器运行时,运行 pod 的容器。
设置
作为一个 alpha 功能,必须要完成以下设置步骤才能使用 RuntimeClass 功能:
- 开启 RuntimeClass 功能门(feature gate) (在 apiservers 和 kubelets 上,需要版本号 1.12 以上)
- 安装 RuntimeClass CRD
- 在节点上配置 CRI 实现(运行时依赖)
- 创建相应的 RuntimeClass 资源
1. 开启 RuntimeClass 功能门
参见功能门,了解如何开启功能门。
RuntimeClass 功能门必须要在 apiservers 和 kubelets 上同时开启,才能使用。
2. 安装 RuntimeClass CRD
RuntimeClass [CustomResourceDefinition][/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/] (CRD) 可以在 Kubernetes git 仓库下的 addons 路径下找到:
安装 CRD 只需要 kubectl apply -f runtimeclass_crd.yaml 一条命令。
[CustomResourceDefinition][/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/]
3. 在节点上配置 CRI 实现
和 RuntimeClass 的相关配置都和 CRI 的实现有关。参见 CRI 实现的相关文档,了解如何进行配置。 由于这是 alpha 功能,并不是所有的 CRI 都能支持多个 RuntimeClass。
{{< note >}}
注意: RuntimeClass 当前假设的是集群中的节点配置是同构的(换言之,所有的节点在容器运行时方面的配置是相同的)。 任何异构(不同的配置)必须要通过调度功能,在 RuntimeClass 之外单独管理 (参见 在节点上分配 Pods)。
{{< /note >}}
所有的配置都有相应的 RuntimeHandler 名,被 RuntimeClass 引用。
RuntimeHandler 的名字必须是合法的 DNS 1123 子域名 (alpha-numeric + - and . characters)
4. 创建相应的 RuntimeClass 资源
步骤3中的配置设置应该有相应的 RuntimeHandler 名,用来标识配置。
对应每个 RuntimeHandler (或者空 "" handler),创建相应的 RuntimeClass 对象。
RuntimeClass 资源当前只有两个重要的域:RuntimeClass 名 (metadata.name) 和 RuntimeHandler (spec.runtimeHandler)。
对象定义如下所示:
apiVersion: node.k8s.io/v1alpha1 # 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
spec:
runtimeHandler: myconfiguration # The name of the correpsonding CRI configuration
{{< note >}}
注意::通常推荐的是 RuntimeClass 写操作 (create/update/patch/delete)应仅限于集群管理员使用。 这也是默认配置。更多细节,参见 [授权概览](https://kubernetes.io/docs/reference/access-authn-authz/authorization/)。
{{< /note >}}
使用
一旦完成集群中 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 功能被禁用。
{{% /capture %}}