diff --git a/content/zh/docs/tasks/manage-hugepages/scheduling-hugepages.md b/content/zh/docs/tasks/manage-hugepages/scheduling-hugepages.md index 9bb6292242..c6f6e5747e 100644 --- a/content/zh/docs/tasks/manage-hugepages/scheduling-hugepages.md +++ b/content/zh/docs/tasks/manage-hugepages/scheduling-hugepages.md @@ -18,10 +18,9 @@ content_type: task -作为 **GA** 特性,Kubernetes 支持在 Pod 应用中使用预先分配的巨页。本文描述了用户如何使用巨页,以及当前的限制。 +Kubernetes 支持在 Pod 应用中使用预先分配的巨页。本文描述了用户如何使用巨页,以及当前的限制。 @@ -48,29 +47,70 @@ schedulable resource. -用户可以通过在容器级别的资源需求中使用资源名称 `hugepages-` 来使用巨页,其中的 size 是特定节点上支持的以整数值表示的最小二进制单位。 例如,如果节点支持 2048KiB 的页面规格, 它将暴露可供调度的资源 `hugepages-2Mi`。 与 CPU 或内存不同,巨页不支持过量使用(overcommit)。 -注意,在请求巨页资源时,还必须请求内存或 CPU 资源。 +用户可以通过在容器级别的资源需求中使用资源名称 `hugepages-` 来使用巨页,其中的 size 是特定节点上支持的以整数值表示的最小二进制单位。 例如,如果一个节点支持 2048KiB 和 1048576KiB 页面大小,它将公开可调度的资源 `hugepages-2Mi` 和 `hugepages-1Gi`。与 CPU 或内存不同,巨页不支持过量使用(overcommit)。注意,在请求巨页资源时,还必须请求内存或 CPU 资源。 + +同一 Pod 的 spec 中可能会消耗不同尺寸的巨页。在这种情况下,它必须对所有挂载卷使用 `medium: HugePages-` 标识。 ```yaml apiVersion: v1 kind: Pod metadata: - generateName: hugepages-volume- + name: huge-pages-example spec: containers: - - image: fedora:latest + - name: example + image: fedora:latest + command: + - sleep + - inf + volumeMounts: + - mountPath: /hugepages-2Mi + name: hugepage-2mi + - mountPath: /hugepages-1Gi + name: hugepage-1gi + resources: + limits: + hugepages-2Mi: 100Mi + hugepages-1Gi: 2Gi + memory: 100Mi + requests: + memory: 100Mi + volumes: + - name: hugepage-2mi + emptyDir: + medium: HugePages-2Mi + - name: hugepage-1gi + emptyDir: + medium: HugePages-1Gi +``` + +Pod 只有在请求同一大小的巨页时才使用 `medium:HugePages`。 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: huge-pages-example +spec: + containers: + - name: example + image: fedora:latest command: - sleep - inf - name: example volumeMounts: - mountPath: /hugepages name: hugepage @@ -89,8 +129,7 @@ spec: - 巨页的资源请求值必须等于其限制值。该条件在指定了资源限制,而没有指定请求的情况下默认成立。 -- 巨页是被隔离在 pod 作用域的,计划在将来的迭代中实现容器级别的隔离。 +- 巨页是被隔离在 pod 作用域的,因此每个容器在 spec 中都对 cgroup 沙盒有自己的限制。 - 巨页可用于 EmptyDir 卷,不过 EmptyDir 卷所使用的巨页数量不能够超出 Pod 请求的巨页数量。 - 通过带有 `SHM_HUGETLB` 的 `shmget()` 使用巨页的应用,必须运行在一个与 `proc/sys/vm/hugetlb_shm_group` 匹配的补充组下。 - 通过 ResourceQuota 资源,可以使用 `hugepages-` 标记控制每个命名空间下的巨页使用量, 类似于使用 `cpu` 或 `memory` 来控制其他计算资源。 - - - -## 待实现的特性 - -- 在 pod 级别隔离的基础上,支持巨页在容器级别的隔离。 -- 作为服务质量特性,保证巨页的 NUMA 局部性。 -- 支持 LimitRange 。 - +- 多种尺寸的巨页的支持需要特性门控配置。它可以通过 `HugePageStorageMediumSize` [特性门控](/zh/docs/reference/command-line-tools-reference/feature-gates/)在 {{< +glossary_tooltip text="kubelet" term_id="kubelet" >}} 和 {{< +glossary_tooltip text="kube-apiserver" +term_id="kube-apiserver" >}} 中开启(`--feature-gates=HugePageStorageMediumSize=true`)。