管理巨页(HugePages)
特性状态:
- 为了使节点能够上报巨页容量,Kubernetes 节点必须预先分配巨页。每个节点能够预先分配多种规格的巨页。
节点会自动发现全部巨页资源,并作为可供调度的资源进行上报。
API
同一 Pod 的 spec 中可能会消耗不同尺寸的巨页。在这种情况下,它必须对所有挂载卷使用 medium: HugePages-<hugepagesize>
标识。
apiVersion: v1
kind: Pod
metadata:
name: huge-pages-example
spec:
containers:
command:
- sleep
- inf
volumeMounts:
- mountPath: /hugepages
name: hugepage
resources:
limits:
hugepages-2Mi: 100Mi
memory: 100Mi
memory: 100Mi
volumes:
- name: hugepage
emptyDir:
medium: HugePages
- 巨页的资源请求值必须等于其限制值。该条件在指定了资源限制,而没有指定请求的情况下默认成立。
- 巨页是被隔离在 pod 作用域的,因此每个容器在 spec 中都对 cgroup 沙盒有自己的限制。
- 巨页可用于 EmptyDir 卷,不过 EmptyDir 卷所使用的巨页数量不能够超出 Pod 请求的巨页数量。
- 通过带有
SHM_HUGETLB
的shmget()
使用巨页的应用,必须运行在一个与proc/sys/vm/hugetlb_shm_group
匹配的补充组下。 - 通过 ResourceQuota 资源,可以使用
hugepages-<size>
标记控制每个命名空间下的巨页使用量, 类似于使用cpu
或memory
来控制其他计算资源。