現在表示しているのは、次のバージョン向けのドキュメントです。Kubernetesバージョン: v1.32

Kubernetes v1.32 のドキュメントは積極的にメンテナンスされていません。現在表示されているバージョンはスナップショットです。最新のドキュメントはこちらです: 最新バージョン

huge pageを管理する

クラスター内のスケジュール可能なリソースとしてhuge pageの設定と管理を行います。
FEATURE STATE: Kubernetes v1.32 [stable]

Kubernetesでは、事前割り当てされたhuge pageをPod内のアプリケーションに割り当てたり利用したりすることをサポートしています。このページでは、ユーザーがhuge pageを利用できるようにする方法について説明します。

始める前に

  1. Kubernetesのノードがhuge pageのキャパシティを報告するためには、ノード上でhuge pageを事前割り当てしておく必要があります。1つのノードでは複数のサイズのhuge pageが事前割り当てできます。

ノードは、すべてのhuge pageリソースを、スケジュール可能なリソースとして自動的に探索・報告してくれます。

API

huge pageはコンテナレベルのリソース要求でhugepages-<size>という名前のリソースを指定することで利用できます。ここで、<size>は、特定のノード上でサポートされている整数値を使った最も小さなバイナリ表記です。たとえば、ノードが2048KiBと1048576KiBのページサイズをサポートしている場合、ノードはスケジュール可能なリソースとして、hugepages-2Mihugepages-1Giの2つのリソースを公開します。CPUやメモリとは違い、huge pageはオーバーコミットをサポートしません。huge pageリソースをリクエストするときには、メモリやCPUリソースを同時にリクエストしなければならないことに注意してください。

1つのPodのspec内に書くことで、Podから複数のサイズのhuge pageを利用することもできます。その場合、すべてのボリュームマウントで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で1種類のサイズのhuge pageをリクエストするときだけは、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 pageのrequestsはlimitsと等しくなければなりません。limitsを指定した場合にはこれがデフォルトですが、requestsを指定しなかった場合にはデフォルトではありません。
  • huge pageはコンテナのスコープで隔離されるため、各コンテナにはそれぞれのcgroupサンドボックスの中でcontainer specでリクエストされた通りのlimitが設定されます。
  • huge pageベースのEmptyDirボリュームは、Podがリクエストしたよりも大きなサイズのページメモリーを使用できません。
  • shmget()SHM_HUGETLBを指定して取得したhuge pageを使用するアプリケーションは、/proc/sys/vm/hugetlb_shm_groupに一致する補助グループ(supplemental group)を使用して実行する必要があります。
  • namespace内のhuge pageの使用量は、ResourceQuotaに対してcpumemoryのような他の計算リソースと同じようにhugepages-<size>というトークンを使用することで制御できます。
  • 複数のサイズのhuge pageのサポートはフィーチャーゲートによる設定が必要です。kubeletkube-apiserver上で、HugePageStorageMediumSizeフィーチャーゲートを使用すると有効にできます(--feature-gates=HugePageStorageMediumSize=true)。
最終更新 July 25, 2020 at 5:27 PM PST: Use consistent word "huge page". (3594dce7ef)