管理巨頁(HugePages)
在叢集中設定與管理巨頁(huge pages)作為可排程資源。
功能狀態:
Kubernetes v1.14 [穩定]
(預設啟用:true)Kubernetes 支援在 Pod 中由應用程式配置與消耗預先配置的巨頁。本頁說明使用者如何消耗巨頁。
開始之前
Kubernetes 節點必須預先配置巨頁,節點才能回報其巨頁容量。
節點可以預先配置多種大小的巨頁,例如,/etc/default/grub
中的以下行配置 2*1GiB
的 1 GiB 和 512*2 MiB
的 2 MiB 頁面
GRUB_CMDLINE_LINUX="hugepagesz=1G hugepages=2 hugepagesz=2M hugepages=512"
節點將自動探索並回報所有巨頁資源作為可排程資源。
當您描述節點時,您應該在 Capacity
和 Allocatable
區段中看到類似以下內容
Capacity:
cpu: ...
ephemeral-storage: ...
hugepages-1Gi: 2Gi
hugepages-2Mi: 1Gi
memory: ...
pods: ...
Allocatable:
cpu: ...
ephemeral-storage: ...
hugepages-1Gi: 2Gi
hugepages-2Mi: 1Gi
memory: ...
pods: ...
注意
對於動態配置的頁面(啟動後),需要重新啟動 Kubelet 才能反映新的配置。API
巨頁可以透過容器層級資源需求使用資源名稱 hugepages-<size>
來消耗,其中 <size>
是在特定節點上支援的使用整數值最精簡的二進位表示法。例如,如果節點支援 2048KiB 和 1048576KiB 頁面大小,它將公開可排程資源 hugepages-2Mi
和 hugepages-1Gi
。與 CPU 或記憶體不同,巨頁不支援過度配置。請注意,當請求巨頁資源時,也必須請求記憶體或 CPU 資源。
一個 Pod 可以在單一 Pod 規格中消耗多個巨頁大小。在這種情況下,它必須對所有磁碟區掛載使用 medium: HugePages-<hugepagesize>
表示法。
apiVersion: v1
kind: Pod
metadata:
name: huge-pages-example
spec:
containers:
- 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 請求一種大小的巨頁時,Pod 才能使用 medium: HugePages
。
apiVersion: v1
kind: Pod
metadata:
name: huge-pages-example
spec:
containers:
- name: example
image: fedora:latest
command:
- sleep
- inf
volumeMounts:
- mountPath: /hugepages
name: hugepage
resources:
limits:
hugepages-2Mi: 100Mi
memory: 100Mi
requests:
memory: 100Mi
volumes:
- name: hugepage
emptyDir:
medium: HugePages
- 巨頁請求必須等於限制。如果指定了限制但未指定請求,則這是預設值。
- 巨頁 (Huge pages) 會在容器的範疇內隔離,因此每個容器都依照容器規格中的請求,對其 cgroup 沙箱設有自己的限制。
- 由巨頁支援的 EmptyDir 卷冊所消耗的巨頁記憶體,不得超過 Pod 的請求量。
- 透過帶有
SHM_HUGETLB
參數的shmget()
來消耗巨頁的應用程式,必須以符合proc/sys/vm/hugetlb_shm_group
的補充群組 (supplemental group) 執行。 - 命名空間中巨頁的使用量,可透過 ResourceQuota 進行控制,這與其他運算資源 (例如
cpu
或memory
) 類似,使用hugepages-<size>
令牌 (token)。
上次修改時間:2024 年 6 月 6 日 凌晨 12:21 PST:修正功能狀態 (53da5f74ab)