|
| 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