Files
website/content/zh/docs/concepts/containers/runtime-class.md
T
zhangx501 6369aa44fb zh-trans website/content/zh/docs/concepts/containers/runtime-class.md (#11744)
* zh-trans website/content/zh/docs/concepts/containers/runtime-class.md

根据更新后的英文重新进行了翻译,同时修改了部分译文让阅读更流畅

* zh-trans website/content/zh/docs/concepts/containers/runtime-class.md

重新修改了部分格式,并根据英文补充的原文进行翻译,让中文阅读更为流畅

* Update runtime-class.md
2018-12-16 20:40:35 +08:00

7.5 KiB
Raw Blame History

reviewers, title, content_template, weight
reviewers title content_template weight
tallclair
dchen1107
RuntimeClass 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 功能:

  1. 开启 RuntimeClass 特性门控(在 apiservers kubelets 上,需要 1.12 及以上版本)
  2. 安装 RuntimeClass CRD
  3. 在节点上配置 CRI 的实现(取决于所选的运行时)
  4. 创建相应的 RuntimeClass 资源

1. 开启 RuntimeClass 特性门控

参见特性门控文档了解如何开启特定的特性门控。 RuntimeClass 特性门控必须在 apiservers kubelets 上同时开启,才能使用。

2. 安装 RuntimeClass CRD

可以在 Kubernetes git 仓库的 addons 目录中找到 RuntimeClass CustomResourceDefinition (CRD) 的定义:

https://github.com/kubernetes/kubernetes/tree/release-1.12/cluster/addons/runtimeclass/runtimeclass_crd.yaml

使用 kubectl apply -f runtimeclass_crd.yaml 命令安装 CRD。

3. 在节点上配置 CRI 实现

各 RuntimeClass 所支持的配置选项取决于 CRI 的实现本身。 请参阅 CRI 实现的相应文档了解具体如何配置。 由于这是一个 alpha 特性功能,并非所有 CRI 都支持多个 RuntimeClass。

{{< note >}} RuntimeClass 当前假设的是集群中的节点配置是同构的(换言之,所有的节点在容器运行时方面的配置是相同的)。 任何异构性(不同的配置)必须通过调度功能在 RuntimeClass 之外单独管理(请参阅在节点上分配 Pods)。 {{< /note >}}

所有这些配置都具有相应的 RuntimeHandler 名,并被 RuntimeClass 引用。 RuntimeHandler 必须是有效的 DNS-1123 子域(字母数字字符、-.)。

4. 创建相应的 RuntimeClass 资源

步骤 3 中的配置设置应该有相应的 RuntimeHandler 名,用于标识配置。 对应每个 RuntimeHandler(以及 "" 所代表的空处理程序),都创建相应的 RuntimeClass 对象。

RuntimeClass 资源当前只有两个重要的字段:RuntimeClass 名 (metadata.name) 和 RuntimeHandler (spec.runtimeHandler)。 对象定义如下所示:

apiVersion: node.k8s.io/v1alpha1  # 在 node.k8s.io API 中对 RuntimeClass 进行定义
kind: RuntimeClass
metadata:
  name: myclass  # 引用 RuntimeClass
  # RuntimeClass 是不属于任何名字空间的资源
spec:
  runtimeHandler: myconfiguration  # 给出 CRI 配置的名称

{{< note >}} 建议将 RuntimeClass 写操作(create、update、patch 和 delete)限定于集群管理员使用。 通常这是默认配置。参阅授权概述了解更多信息。 {{< /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 %}}