Skip to content

Commit 2527359

Browse files
authored
Merge pull request #25827 from ryicoh/ja-25826
[ja] new file: memory-constraint-namespace.md
2 parents 6d0add9 + 32e9186 commit 2527359

File tree

1 file changed

+258
-0
lines changed

1 file changed

+258
-0
lines changed
Lines changed: 258 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,258 @@
1+
---
2+
title: Namespaceに対する最小および最大メモリー制約の構成
3+
4+
content_type: task
5+
weight: 30
6+
---
7+
8+
9+
<!-- overview -->
10+
11+
このページでは、Namespaceで実行されるコンテナが使用するメモリーの最小値と最大値を設定する方法を説明します。
12+
[LimitRange](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#limitrange-v1-core) で最小値と最大値のメモリー値を指定します。
13+
PodがLimitRangeによって課される制約を満たさない場合、そのNamespaceではPodを作成できません。
14+
15+
16+
## {{% heading "prerequisites" %}}
17+
18+
19+
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
20+
21+
クラスター内の各ノードには、少なくとも1GiBのメモリーが必要です。
22+
23+
24+
<!-- steps -->
25+
26+
## Namespaceの作成
27+
28+
この演習で作成したリソースがクラスターの他の部分から分離されるように、Namespaceを作成します。
29+
30+
31+
```shell
32+
kubectl create namespace constraints-mem-example
33+
```
34+
35+
## LimitRangeとPodを作成
36+
37+
LimitRangeの設定ファイルです。
38+
39+
{{< codenew file="admin/resource/memory-constraints.yaml" >}}
40+
41+
LimitRangeを作成します。
42+
43+
```shell
44+
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints.yaml --namespace=constraints-mem-example
45+
```
46+
47+
LimitRangeの詳細情報を表示します。
48+
49+
50+
```shell
51+
kubectl get limitrange mem-min-max-demo-lr --namespace=constraints-mem-example --output=yaml
52+
```
53+
54+
出力されるのは、予想通りメモリー制約の最小値と最大値を示しています。
55+
しかし、LimitRangeの設定ファイルでデフォルト値を指定していないにもかかわらず、
56+
自動的に作成されていることに気づきます。
57+
58+
59+
```
60+
limits:
61+
- default:
62+
memory: 1Gi
63+
defaultRequest:
64+
memory: 1Gi
65+
max:
66+
memory: 1Gi
67+
min:
68+
memory: 500Mi
69+
type: Container
70+
```
71+
72+
73+
constraints-mem-exampleNamespaceにコンテナが作成されるたびに、
74+
Kubernetesは以下の手順を実行するようになっています。
75+
76+
* コンテナが独自のメモリー要求と制限を指定しない場合は、デフォルトのメモリー要求と制限をコンテナに割り当てます。
77+
78+
* コンテナに500MiB以上のメモリー要求があることを確認します。
79+
80+
* コンテナのメモリー制限が1GiB以下であることを確認します。
81+
82+
以下は、1つのコンテナを持つPodの設定ファイルです。設定ファイルのコンテナ(containers)では、600MiBのメモリー要求と800MiBのメモリー制限が指定されています。これらはLimitRangeによって課される最小と最大のメモリー制約を満たしています。
83+
84+
85+
{{< codenew file="admin/resource/memory-constraints-pod.yaml" >}}
86+
87+
Podの作成
88+
89+
```shell
90+
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod.yaml --namespace=constraints-mem-example
91+
```
92+
93+
Podのコンテナが実行されていることを確認します。
94+
95+
```shell
96+
kubectl get pod constraints-mem-demo --namespace=constraints-mem-example
97+
```
98+
99+
Podの詳細情報を見ます
100+
101+
```shell
102+
kubectl get pod constraints-mem-demo --output=yaml --namespace=constraints-mem-example
103+
```
104+
105+
出力は、コンテナが600MiBのメモリ要求と800MiBのメモリー制限になっていることを示しています。これらはLimitRangeによって課される制約を満たしています。
106+
107+
108+
```yaml
109+
resources:
110+
limits:
111+
memory: 800Mi
112+
requests:
113+
memory: 600Mi
114+
```
115+
116+
Podを消します。
117+
118+
```shell
119+
kubectl delete pod constraints-mem-demo --namespace=constraints-mem-example
120+
```
121+
122+
## 最大メモリ制約を超えるPodの作成の試み
123+
124+
これは、1つのコンテナを持つPodの設定ファイルです。コンテナは800MiBのメモリー要求と1.5GiBのメモリー制限を指定しています。
125+
126+
127+
{{< codenew file="admin/resource/memory-constraints-pod-2.yaml" >}}
128+
129+
Podを作成してみます。
130+
131+
```shell
132+
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-2.yaml --namespace=constraints-mem-example
133+
```
134+
135+
出力は、コンテナが大きすぎるメモリー制限を指定しているため、Podが作成されないことを示しています。
136+
137+
138+
```
139+
Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-2.yaml":
140+
pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container is 1Gi, but limit is 1536Mi.
141+
```
142+
143+
## 最低限のメモリ要求を満たさないPodの作成の試み
144+
145+
146+
これは、1つのコンテナを持つPodの設定ファイルです。コンテナは100MiBのメモリー要求と800MiBのメモリー制限を指定しています。
147+
148+
149+
{{< codenew file="admin/resource/memory-constraints-pod-3.yaml" >}}
150+
151+
Podを作成してみます。
152+
153+
```shell
154+
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-3.yaml --namespace=constraints-mem-example
155+
```
156+
157+
出力は、コンテナが小さすぎるメモリー要求を指定しているため、Podが作成されないことを示しています。
158+
159+
```
160+
Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-3.yaml":
161+
pods "constraints-mem-demo-3" is forbidden: minimum memory usage per Container is 500Mi, but request is 100Mi.
162+
```
163+
164+
## メモリ要求や制限を指定しないPodの作成
165+
166+
167+
これは、1つのコンテナを持つPodの設定ファイルです。コンテナはメモリー要求を指定しておらず、メモリー制限も指定していません。
168+
169+
{{< codenew file="admin/resource/memory-constraints-pod-4.yaml" >}}
170+
171+
Podを作成します。
172+
173+
```shell
174+
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-4.yaml --namespace=constraints-mem-example
175+
```
176+
177+
Podの詳細情報を見ます
178+
179+
```
180+
kubectl get pod constraints-mem-demo-4 --namespace=constraints-mem-example --output=yaml
181+
```
182+
183+
出力を見ると、Podのコンテナのメモリ要求は1GiB、メモリー制限は1GiBであることがわかります。
184+
コンテナはどのようにしてこれらの値を取得したのでしょうか?
185+
186+
187+
```
188+
resources:
189+
limits:
190+
memory: 1Gi
191+
requests:
192+
memory: 1Gi
193+
```
194+
195+
コンテナが独自のメモリー要求と制限を指定していなかったため、LimitRangeから与えられのです。
196+
コンテナが独自のメモリー要求と制限を指定していなかったため、LimitRangeから[デフォルトのメモリー要求と制限](/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)が与えられたのです。
197+
198+
この時点で、コンテナは起動しているかもしれませんし、起動していないかもしれません。このタスクの前提条件は、ノードが少なくとも1GiBのメモリーを持っていることであることを思い出してください。それぞれのノードが1GiBのメモリーしか持っていない場合、どのノードにも1GiBのメモリー要求に対応するのに十分な割り当て可能なメモリーがありません。たまたま2GiBのメモリーを持つノードを使用しているのであれば、おそらく1GiBのメモリーリクエストに対応するのに十分なスペースを持っていることになります。
199+
200+
201+
Podを削除します。
202+
203+
```
204+
kubectl delete pod constraints-mem-demo-4 --namespace=constraints-mem-example
205+
```
206+
207+
## 最小および最大メモリー制約の強制
208+
209+
LimitRangeによってNamespaceに課される最大および最小のメモリー制約は、Podが作成または更新されたときにのみ適用されます。LimitRangeを変更しても、以前に作成されたPodには影響しません。
210+
211+
212+
## 最小・最大メモリー制約の動機
213+
214+
215+
クラスター管理者としては、Podが使用できるメモリー量に制限を課したいと思うかもしれません。
216+
217+
218+
例:
219+
220+
* クラスター内の各ノードは2GBのメモリーを持っています。クラスタ内のどのノードもその要求をサポートできないため、2GB以上のメモリーを要求するPodは受け入れたくありません。
221+
222+
223+
* クラスターは運用部門と開発部門で共有されています。 本番用のワークロードでは最大8GBのメモリーを消費しますが、開発用のワークロードでは512MBに制限したいとします。本番用と開発用に別々のNamespaceを作成し、それぞれのNamespaceにメモリー制限を適用します。
224+
225+
## クリーンアップ
226+
227+
Namespaceを削除します。
228+
229+
```shell
230+
kubectl delete namespace constraints-mem-example
231+
```
232+
233+
234+
235+
## {{% heading "whatsnext" %}}
236+
237+
238+
### クラスター管理者向け
239+
240+
* [名前空間に対するデフォルトのメモリー要求と制限の構成](/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)
241+
242+
* [名前空間に対するデフォルトのCPU要求と制限の構成](/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/)
243+
244+
* [名前空間に対する最小および最大CPU制約の構成](/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace/)
245+
246+
* [名前空間に対するメモリーとCPUのクォータの構成](/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/)
247+
248+
* [名前空間に対するPodクォータの設定](/docs/tasks/administer-cluster/manage-resources/quota-pod-namespace/)
249+
250+
* [APIオブジェクトのクォータの設定](/docs/tasks/administer-cluster/quota-api-object/)
251+
252+
### アプリケーション開発者向け
253+
254+
* [コンテナとPodへのメモリーリソースの割り当て](/docs/tasks/configure-pod-container/assign-memory-resource/)
255+
256+
* [コンテナとPodへのCPUリソースの割り当て](/docs/tasks/configure-pod-container/assign-cpu-resource/)
257+
258+
* [PodのQoS(サービス品質)を設定](/docs/tasks/configure-pod-container/quality-service-pod/)

0 commit comments

Comments
 (0)