From 56c476d6965b172bc7172adbe92d6d72cf3c3881 Mon Sep 17 00:00:00 2001 From: chenrui Date: Thu, 22 Nov 2018 17:38:36 +0800 Subject: [PATCH] zh-trans: add concepts/containers/runtime-class.md (#11173) --- .../docs/concepts/containers/runtime-class.md | 183 ++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 content/zh/docs/concepts/containers/runtime-class.md diff --git a/content/zh/docs/concepts/containers/runtime-class.md b/content/zh/docs/concepts/containers/runtime-class.md new file mode 100644 index 0000000000..84e7d26eff --- /dev/null +++ b/content/zh/docs/concepts/containers/runtime-class.md @@ -0,0 +1,183 @@ +--- +reviewers: +- tallclair +- dchen1107 +title: Runtime Class +content_template: templates/concept +weight: 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 功能门(feature gate) (在 apiservers 和 kubelets 上,版本号需要是 1.12+) +2. 安装 RuntimeClass CRD +3. 在节点上配置CRI实现(运行时依赖) +4. 创建相应的 RuntimeClass 资源 + + + +#### 1. 开启 RuntimeClass 功能门 + + + +参见[功能门](/docs/reference/command-line-tools-reference/feature-gates/),了解如何开启功能门。 +`RuntimeClass` 功能门必须要在 apiservers _和_ kubelets 上同时开启,才能使用。 + + +#### 2. 安装 RuntimeClass CRD + + + +RuntimeClass [CustomResourceDefinition][/docs/tasks/access-kubernetes-api/custom-resources/custom-resource-definitions/] (CRD) +可以在 Kubernetes git 仓库下的 addons 路径下找到: + +https://github.com/kubernetes/kubernetes/tree/release-1.12/cluster/addons/runtimeclass/runtimeclass_crd.yaml + + +安装 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](/docs/concepts/configuration/assign-pod-node/))。 + +{{< /note >}} + + + +所有的配置都有相应的 `RuntimeHandler` 名,被 RuntimeClass 引用。 +RuntimeHandler 的名字必须是合法的 DNS 1123 子域名 (alpha-numeric `+` `-` and `.` characters) + + +#### 4. 创建相应的 RuntimeClass 资源 + + + +步骤3中的配置设置应该有相应的 `RuntimeHandler` 名,用来标识配置。 +对应每个 RuntimeHandler (或者空 `""` handler),创建相应的 RuntimeClass 对象。 + + + +RuntimeClass 资源当前只有两个重要的域:RuntimeClass 名 (`metadata.name`) 和 RuntimeHandler (`spec.runtimeHandler`)。 +对象定义如下所示: + +```yaml +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` 即可。例如: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: mypod +spec: + runtimeClassName: myclass + # ... +``` + + + +这会告诉 Kubelet 使用命名的 RuntimeClass 来运行这个 pod。如果命名的 RuntimeClass 不存在, +或者 CRI 无法运行相应的 handler,那么 pod 将会进入 `Failed` 终端 [阶段](/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase)。 +查看相应的 [事件](/docs/tasks/debug-application-cluster/debug-application-introspection/),获取错误信息。 + + + +如果没有指明 `runtimeClassName`,将会使用默认的 RuntimeHandler,等效于 RuntimeClass 功能被禁用。 + +{{% /capture %}}