管理巨页(HugePages)

    FEATURE STATE:

    1. 为了使节点能够上报巨页容量,Kubernetes 节点必须预先分配巨页。每个节点只能预先分配一种特定规格的巨页。

    节点会自动发现全部巨页资源,并作为可供调度的资源进行上报。

    API

    同一 Pod 的 spec 中可能会消耗不同尺寸的巨页。在这种情况下,它必须对所有挂载卷使用 medium: HugePages-<hugepagesize> 标识。

    1. apiVersion: v1
    2. kind: Pod
    3. metadata:
    4. name: huge-pages-example
    5. spec:
    6. containers:
    7. command:
    8. - sleep
    9. - inf
    10. volumeMounts:
    11. - mountPath: /hugepages
    12. name: hugepage
    13. resources:
    14. limits:
    15. hugepages-2Mi: 100Mi
    16. memory: 100Mi
    17. memory: 100Mi
    18. volumes:
    19. - name: hugepage
    20. emptyDir:
    21. medium: HugePages
    • 巨页的资源请求值必须等于其限制值。该条件在指定了资源限制,而没有指定请求的情况下默认成立。
    • 巨页是被隔离在 pod 作用域的,因此每个容器在 spec 中都对 cgroup 沙盒有自己的限制。
    • 巨页可用于 EmptyDir 卷,不过 EmptyDir 卷所使用的巨页数量不能够超出 Pod 请求的巨页数量。
    • 通过带有 SHM_HUGETLBshmget() 使用巨页的应用,必须运行在一个与 proc/sys/vm/hugetlb_shm_group 匹配的补充组下。
    • 通过 ResourceQuota 资源,可以使用 hugepages-<size> 标记控制每个命名空间下的巨页使用量, 类似于使用 cpumemory 来控制其他计算资源。