管理巨頁(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"

節點將自動探索並回報所有巨頁資源作為可排程資源。

當您描述節點時,您應該在 CapacityAllocatable 區段中看到類似以下內容

Capacity:
  cpu:                ...
  ephemeral-storage:  ...
  hugepages-1Gi:      2Gi
  hugepages-2Mi:      1Gi
  memory:             ...
  pods:               ...
Allocatable:
  cpu:                ...
  ephemeral-storage:  ...
  hugepages-1Gi:      2Gi
  hugepages-2Mi:      1Gi
  memory:             ...
  pods:               ...

API

巨頁可以透過容器層級資源需求使用資源名稱 hugepages-<size> 來消耗,其中 <size> 是在特定節點上支援的使用整數值最精簡的二進位表示法。例如,如果節點支援 2048KiB 和 1048576KiB 頁面大小,它將公開可排程資源 hugepages-2Mihugepages-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 進行控制,這與其他運算資源 (例如 cpumemory) 類似,使用 hugepages-<size> 令牌 (token)。
上次修改時間:2024 年 6 月 6 日 凌晨 12:21 PST:修正功能狀態 (53da5f74ab)