# Namespaceのデフォルトのメモリ要求と制限を設定する

> Namespaceのデフォルトのメモリリソース制限を定義して、そのNamespace内のすべての新しいPodにメモリリソース制限が設定されるようにします。

---

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

このページでは、<a class='glossary-tooltip' title='同一の物理クラスター上で複数の仮想クラスターをサポートするために使われる抽象概念です。' data-bs-toggle='tooltip' data-bs-placement='top' href='/ja/docs/concepts/overview/working-with-objects/namespaces' target='_blank' aria-label='Namespace'>Namespace</a>のデフォルトのメモリ要求と制限を設定する方法を説明します。

KubernetesクラスターはNamespaceに分割することができます。
デフォルトのメモリ[制限](/docs/concepts/configuration/manage-resources-containers/#requests-and-limits)を持つNamespaceがあり、独自のメモリ制限を指定しないコンテナでPodを作成しようとすると、<a class='glossary-tooltip' title='コンテナのライフサイクルを定義、展開、管理するためのAPIとインターフェースを公開するコンテナオーケストレーションレイヤーです。' data-bs-toggle='tooltip' data-bs-placement='top' href='/ja/docs/reference/glossary/?all=true#term-control-plane' target='_blank' aria-label='コントロールプレーン'>コントロールプレーン</a>はそのコンテナにデフォルトのメモリ制限を割り当てます。

Kubernetesは特定の条件下でデフォルトのメモリ要求を割り当てます。
その条件については、このトピックの後半で説明します。



## 始める前に


<p>Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。
このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。
まだクラスターがない場合、<a href="https://minikube.sigs.k8s.io/docs/tutorials/multi_node/">minikube</a>を使って作成するか、
以下のいずれかのKubernetesプレイグラウンドも使用できます:</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>


クラスターにNamespaceを作成するには、アクセス権が必要です。

クラスターの各ノードには、最低でも2GiBのメモリが必要です。



<!-- steps -->

## Namespaceの作成 {#create-a-namespace}

この演習で作成したリソースがクラスターの他の部分から分離されるように、Namespaceを作成します。

```shell
kubectl create namespace default-mem-example
```

## LimitRangeとPodの作成 {#create-a-limitrange-and-a-pod}

以下は、<a class='glossary-tooltip' title='各Namespace内のコンテナまたはPodごとのリソース消費量を制限するための制約を提供します。' data-bs-toggle='tooltip' data-bs-placement='top' href='/ja/docs/concepts/policy/limit-range/' target='_blank' aria-label='LimitRange'>LimitRange</a>のマニフェストの例です。
このマニフェストでは、デフォルトのメモリ要求とデフォルトのメモリ制限を指定しています。


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/ja/examples/admin/resource/memory-defaults.yaml" download="admin/resource/memory-defaults.yaml"><code>admin/resource/memory-defaults.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('admin-resource-memory-defaults-yaml')" title="admin/resource/memory-defaults.yamlをクリップボードにコピー"></img></div>
    <div class="includecode" id="admin-resource-memory-defaults-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">LimitRange</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">mem-limit-range</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">limits</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">default</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">512Mi</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">defaultRequest</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">256Mi</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">Container</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

default-mem-example NamespaceにLimitRangeを作成します:

```shell
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults.yaml --namespace=default-mem-example
```

default-mem-example NamespaceでPodを作成し、そのPod内のコンテナがメモリ要求とメモリ制限の値を独自に指定しない場合、<a class='glossary-tooltip' title='コンテナのライフサイクルを定義、展開、管理するためのAPIとインターフェースを公開するコンテナオーケストレーションレイヤーです。' data-bs-toggle='tooltip' data-bs-placement='top' href='/ja/docs/reference/glossary/?all=true#term-control-plane' target='_blank' aria-label='コントロールプレーン'>コントロールプレーン</a>はデフォルト値のメモリ要求256MiBとメモリ制限512MiBを適用します。

以下は、コンテナを1つ持つPodのマニフェストの例です。
コンテナは、メモリ要求とメモリ制限を指定していません。


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/ja/examples/admin/resource/memory-defaults-pod.yaml" download="admin/resource/memory-defaults-pod.yaml"><code>admin/resource/memory-defaults-pod.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('admin-resource-memory-defaults-pod-yaml')" title="admin/resource/memory-defaults-pod.yamlをクリップボードにコピー"></img></div>
    <div class="includecode" id="admin-resource-memory-defaults-pod-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Pod</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default-mem-demo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">containers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default-mem-demo-ctr</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">nginx</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

Podを作成します:

```shell
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod.yaml --namespace=default-mem-example
```

Podの詳細情報を表示します:

```shell
kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
```

この出力は、Podのコンテナのメモリ要求が256MiBで、メモリ制限が512MiBであることを示しています。
これらはLimitRangeで指定されたデフォルト値です。

```shell
containers:
- image: nginx
  imagePullPolicy: Always
  name: default-mem-demo-ctr
  resources:
    limits:
      memory: 512Mi
    requests:
      memory: 256Mi
```

Podを削除します:

```shell
kubectl delete pod default-mem-demo --namespace=default-mem-example
```

## コンテナの制限を指定し、要求を指定しない場合 {#what-if-you-specify-a-containers-limit-but-not-its-request}

以下は1つのコンテナを持つPodのマニフェストです。
コンテナはメモリ制限を指定しますが、メモリ要求は指定しません。


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/ja/examples/admin/resource/memory-defaults-pod-2.yaml" download="admin/resource/memory-defaults-pod-2.yaml"><code>admin/resource/memory-defaults-pod-2.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('admin-resource-memory-defaults-pod-2-yaml')" title="admin/resource/memory-defaults-pod-2.yamlをクリップボードにコピー"></img></div>
    <div class="includecode" id="admin-resource-memory-defaults-pod-2-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Pod</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default-mem-demo-2</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">containers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default-mem-demo-2-ctr</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">nginx</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">limits</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;1Gi&#34;</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

Podを作成します:


```shell
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod-2.yaml --namespace=default-mem-example
```

Podの詳細情報を表示します:

```shell
kubectl get pod default-mem-demo-2 --output=yaml --namespace=default-mem-example
```

この出力は、コンテナのメモリ要求がそのメモリ制限に一致するように設定されていることを示しています。
コンテナにはデフォルトのメモリ要求値である256Miが割り当てられていないことに注意してください。

```
resources:
  limits:
    memory: 1Gi
  requests:
    memory: 1Gi
```

## コンテナの要求を指定し、制限を指定しない場合 {#what-if-you-specify-a-containers-request-but-not-its-limit}

1つのコンテナを持つPodのマニフェストです。
コンテナはメモリ要求を指定しますが、メモリ制限は指定しません。


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/ja/examples/admin/resource/memory-defaults-pod-3.yaml" download="admin/resource/memory-defaults-pod-3.yaml"><code>admin/resource/memory-defaults-pod-3.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('admin-resource-memory-defaults-pod-3-yaml')" title="admin/resource/memory-defaults-pod-3.yamlをクリップボードにコピー"></img></div>
    <div class="includecode" id="admin-resource-memory-defaults-pod-3-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Pod</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default-mem-demo-3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">containers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default-mem-demo-3-ctr</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">nginx</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">resources</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">requests</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;128Mi&#34;</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

Podを作成します:

```shell
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod-3.yaml --namespace=default-mem-example
```

Podの詳細情報を表示します:

```shell
kubectl get pod default-mem-demo-3 --output=yaml --namespace=default-mem-example
```

この出力は、コンテナのメモリ要求が、コンテナのマニフェストで指定された値に設定されていることを示しています。
コンテナは512MiB以下のメモリを使用するように制限されていて、これはNamespaceのデフォルトのメモリ制限と一致します。

```
resources:
  limits:
    memory: 512Mi
  requests:
    memory: 128Mi
```


<div class="alert alert-info" role="note"><h4 class="alert-heading">備考:</h4><code>LimitRange</code>は、適用するデフォルト値の一貫性をチェック<strong>しません</strong>。
これは、<code>LimitRange</code>によって設定された <em>制限</em> のデフォルト値が、クライアントがAPIサーバーに送信するspecでコンテナに指定された <em>要求</em> 値よりも小さい可能性があることを意味します。
その場合、最終的なPodはスケジュール可能になりません。
詳細については、<a href="/ja/docs/concepts/policy/limit-range/#constraints-on-resource-limits-and-requests">リソース制限と要求の制約</a>を参照してください。</div>


## デフォルトのメモリ制限と要求を設定する動機 {#motivation-for-default-memory-limits-and-requests}

Namespaceにメモリ<a class='glossary-tooltip' title='Provides constraints that limit aggregate resource consumption per namespace.' data-bs-toggle='tooltip' data-bs-placement='top' href='/ja/docs/concepts/policy/resource-quotas/' target='_blank' aria-label='リソースクォータ'>リソースクォータ</a>が設定されている場合、メモリ制限のデフォルト値を設定しておくと便利です。
以下はリソースクォータがNamespaceに課す制限のうちの3つです。

* Namespaceで実行されるすべてのPodについて、Podとその各コンテナにメモリ制限を設ける必要があります(Pod内のすべてのコンテナに対してメモリ制限を指定すると、Kubernetesはそのコンテナの制限を合計することでPodレベルのメモリ制限を推測することができます)。
* メモリ制限は、当該Podがスケジュールされているノードのリソース予約を適用します。
  Namespace内のすべてのPodに対して予約されるメモリの総量は、指定された制限を超えてはなりません。
* また、Namespace内のすべてのPodが実際に使用するメモリの総量も、指定された制限を超えてはなりません。

LimitRangeの追加時:

コンテナを含む、そのNamespace内のいずれかのPodが独自のメモリ制限を指定していない場合、コントロールプレーンはそのコンテナにデフォルトのメモリ制限を適用し、メモリのResourceQuotaによって制限されているNamespace内でPodを実行できるようにします。

## クリーンアップ {#clean-up}

Namespaceを削除します:

```shell
kubectl delete namespace default-mem-example
```



## 次の項目


### クラスター管理者向け {#for-cluster-administrators}

* [NamespaceのデフォルトのCPU要求と制限を設定する](/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/)

* [Namespaceの最小および最大メモリ制約を設定する](/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace/)

* [Namespaceの最小および最大CPU制約を設定する](/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace/)

* [NamespaceのメモリおよびCPUクォータを設定する](/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/)

* [NamespaceのPodクォータを設定する](/docs/tasks/administer-cluster/manage-resources/quota-pod-namespace/)

* [APIオブジェクトのクォータを設定する](/docs/tasks/administer-cluster/quota-api-object/)

### アプリケーション開発者向け {#for-app-developers}

* [コンテナおよびPodへのメモリリソースの割り当て](/docs/tasks/configure-pod-container/assign-memory-resource/)

* [コンテナおよびPodへのCPUリソースの割り当て](/docs/tasks/configure-pod-container/assign-cpu-resource/)

* [PodレベルのCPUおよびメモリリソースの割り当て](/docs/tasks/configure-pod-container/assign-pod-level-resources/)

* [PodにQuality of Serviceを設定する](/docs/tasks/configure-pod-container/quality-service-pod/)
