File tree Expand file tree Collapse file tree 1 file changed +93
-0
lines changed
content/ja/docs/tasks/manage-hugepages Expand file tree Collapse file tree 1 file changed +93
-0
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ title : huge pageを管理する
3
+ content_type : task
4
+ description : クラスター内のスケジュール可能なリソースとしてhuge pageの設定と管理を行います。
5
+ ---
6
+
7
+ <!-- overview -->
8
+ {{< feature-state state="stable" >}}
9
+
10
+ Kubernetesでは、事前割り当てされたhuge pageをPod内のアプリケーションに割り当てたり利用したりすることをサポートしています。このページでは、ユーザーがhuge pageを利用できるようにする方法について説明します。
11
+
12
+ ## {{% heading "prerequisites" %}}
13
+
14
+ 1 . Kubernetesのノードがhuge pageのキャパシティを報告するためには、ノード上でhuge pageを事前割り当てしておく必要があります。1つのノードでは複数のサイズのhuge pageが事前割り当てできます。
15
+
16
+ ノードは、すべてのhuge pageリソースを、スケジュール可能なリソースとして自動的に探索・報告してくれます。
17
+
18
+ <!-- steps -->
19
+
20
+ ## API
21
+
22
+ huge pageはコンテナレベルのリソース要求で` hugepages-<size> ` という名前のリソースを指定することで利用できます。ここで、` <size> ` は、特定のノード上でサポートされている整数値を使った最も小さなバイナリ表記です。たとえば、ノードが2048KiBと1048576KiBのページサイズをサポートしている場合、ノードはスケジュール可能なリソースとして、` hugepages-2Mi ` と` hugepages-1Gi ` の2つのリソースを公開します。CPUやメモリとは違い、huge pageはオーバーコミットをサポートしません。huge pageリソースをリクエストするときには、メモリやCPUリソースを同時にリクエストしなければならないことに注意してください。
23
+
24
+ 1つのPodのspec内に書くことで、Podから複数のサイズのhuge pageを利用することもできます。その場合、すべてのボリュームマウントで` medium: HugePages-<hugepagesize> ` という表記を使う必要があります。
25
+
26
+ ``` yaml
27
+ apiVersion : v1
28
+ kind : Pod
29
+ metadata :
30
+ name : huge-pages-example
31
+ spec :
32
+ containers :
33
+ - name : example
34
+ image : fedora:latest
35
+ command :
36
+ - sleep
37
+ - inf
38
+ volumeMounts :
39
+ - mountPath : /hugepages-2Mi
40
+ name : hugepage-2mi
41
+ - mountPath : /hugepages-1Gi
42
+ name : hugepage-1gi
43
+ resources :
44
+ limits :
45
+ hugepages-2Mi : 100Mi
46
+ hugepages-1Gi : 2Gi
47
+ memory : 100Mi
48
+ requests :
49
+ memory : 100Mi
50
+ volumes :
51
+ - name : hugepage-2mi
52
+ emptyDir :
53
+ medium : HugePages-2Mi
54
+ - name : hugepage-1gi
55
+ emptyDir :
56
+ medium : HugePages-1Gi
57
+ ` ` `
58
+
59
+ Podで1種類のサイズのhuge pageをリクエストするときだけは、` medium: HugePages`という表記を使うこともできます。
60
+
61
+ ` ` ` yaml
62
+ apiVersion: v1
63
+ kind: Pod
64
+ metadata:
65
+ name: huge-pages-example
66
+ spec:
67
+ containers:
68
+ - name: example
69
+ image: fedora:latest
70
+ command:
71
+ - sleep
72
+ - inf
73
+ volumeMounts:
74
+ - mountPath: /hugepages
75
+ name: hugepage
76
+ resources:
77
+ limits:
78
+ hugepages-2Mi: 100Mi
79
+ memory: 100Mi
80
+ requests:
81
+ memory: 100Mi
82
+ volumes:
83
+ - name: hugepage
84
+ emptyDir:
85
+ medium: HugePages
86
+ ` ` `
87
+
88
+ - huge pageのrequestsはlimitsと等しくなければなりません。limitsを指定した場合にはこれがデフォルトですが、requestsを指定しなかった場合にはデフォルトではありません。
89
+ - huge pageはコンテナのスコープで隔離されるため、各コンテナにはそれぞれのcgroupサンドボックスの中でcontainer specでリクエストされた通りのlimitが設定されます。
90
+ - huge pageベースのEmptyDirボリュームは、Podがリクエストしたよりも大きなサイズのページメモリーを使用できません。
91
+ - ` shmget()` に`SHM_HUGETLB`を指定して取得したhuge pageを使用するアプリケーションは、`/proc/sys/vm/hugetlb_shm_group`に一致する補助グループ(supplemental group)を使用して実行する必要があります。
92
+ - namespace内のhuge pageの使用量は、ResourceQuotaに対して`cpu`や`memory`のような他の計算リソースと同じように`hugepages-<size>`というトークンを使用することで制御できます。
93
+ - 複数のサイズのhuge pageのサポートはフィーチャーゲートによる設定が必要です。{{< glossary_tooltip text="kubelet" term_id="kubelet" >}}と{{< glossary_tooltip text="kube-apiserver" term_id="kube-apiserver" >}}上で、`HugePageStorageMediumSize`[フィーチャーゲート](/ja/docs/reference/command-line-tools-reference/feature-gates/)を使用すると有効にできます(`--feature-gates=HugePageStorageMediumSize=true`)。
You can’t perform that action at this time.
0 commit comments