# NamespaceのメモリおよびCPUクォータを設定する

> Namespaceに対するメモリおよびCPUリソース制限の全体を定義します。

---

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>内で実行されているすべてのPodが使用できるメモリとCPUの総量に対するクォータを設定する方法を説明します。
クォータは[ResourceQuota](/docs/reference/kubernetes-api/policy-resources/resource-quota-v1/)オブジェクトで指定します。




## 始める前に


<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を作成できる権限が必要です。

クラスター内の各ノードには、少なくとも1 GiBのメモリが必要です。


<!-- steps -->

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

この演習で作成するリソースをクラスター内の他のリソースから分離するために、Namespaceを作成します。

```shell
kubectl create namespace quota-mem-cpu-example
```

## ResourceQuotaの作成 {#create-a-resourcequota}

ResourceQuotaの例として、次のマニフェストを示します:


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/ja/examples/admin/resource/quota-mem-cpu.yaml" download="admin/resource/quota-mem-cpu.yaml"><code>admin/resource/quota-mem-cpu.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('admin-resource-quota-mem-cpu-yaml')" title="admin/resource/quota-mem-cpu.yamlをクリップボードにコピー"></img></div>
    <div class="includecode" id="admin-resource-quota-mem-cpu-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">ResourceQuota</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-cpu-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">hard</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.cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;1&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">requests.memory</span><span class="p">:</span><span class="w"> </span><span class="l">1Gi</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">limits.cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;2&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">limits.memory</span><span class="p">:</span><span class="w"> </span><span class="l">2Gi</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

ResourceQuotaを作成します:

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

ResourceQuotaの詳細情報を参照します:

```shell
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
```

ResourceQuotaは、quota-mem-cpu-example Namespaceに対して次の要件を課します:

* そのNamespace内のすべてのPodについて、各コンテナはメモリ要求、メモリ制限、CPU要求、CPU制限を持っている必要があります。
* そのNamespace内のすべてのPodのメモリ要求の合計は、1 GiBを超えてはいけません。
* そのNamespace内のすべてのPodのメモリ制限の合計は、2 GiBを超えてはいけません。
* そのNamespace内のすべてのPodのCPU要求の合計は、1 CPUを超えてはいけません。
* そのNamespace内のすべてのPodのCPU制限の合計は、2 CPUを超えてはいけません。

Kubernetesにおける「1 CPU」の意味については、[CPUの意味](/docs/concepts/configuration/manage-resources-containers/#meaning-of-cpu)を参照してください。

## Podの作成 {#create-a-pod}

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/quota-mem-cpu-pod.yaml" download="admin/resource/quota-mem-cpu-pod.yaml"><code>admin/resource/quota-mem-cpu-pod.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('admin-resource-quota-mem-cpu-pod-yaml')" title="admin/resource/quota-mem-cpu-pod.yamlをクリップボードにコピー"></img></div>
    <div class="includecode" id="admin-resource-quota-mem-cpu-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">quota-mem-cpu-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">quota-mem-cpu-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><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;800Mi&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;800m&#34;</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;600Mi&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;400m&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      
</span></span></span></code></pre></div></div>
</div>

Podを作成します:

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

Podが実行中であり、その(唯一の)コンテナが正常であることを検証します:

```shell
kubectl get pod quota-mem-cpu-demo --namespace=quota-mem-cpu-example
```

再度、ResourceQuotaの詳細情報を参照します:

```shell
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example --output=yaml
```

出力には、クォータとそのクォータのうちどれだけが使用されているかが表示されます。PodのメモリとCPUの要求および制限がクォータを超えていないことがわかります。

```
status:
  hard:
    limits.cpu: "2"
    limits.memory: 2Gi
    requests.cpu: "1"
    requests.memory: 1Gi
  used:
    limits.cpu: 800m
    limits.memory: 800Mi
    requests.cpu: 400m
    requests.memory: 600Mi
```

`jq`ツールがある場合、[JSONPath](/docs/reference/kubectl/jsonpath/)を使用して`used`の値だけをクエリし、**さらに**出力を見やすく整形することもできます。
例えば:

```shell
kubectl get resourcequota mem-cpu-demo --namespace=quota-mem-cpu-example -o jsonpath='{ .status.used }' | jq .
```

## 2つ目のPodを作成する試み {#attempt-to-create-a-second-pod}

2つ目の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/quota-mem-cpu-pod-2.yaml" download="admin/resource/quota-mem-cpu-pod-2.yaml"><code>admin/resource/quota-mem-cpu-pod-2.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('admin-resource-quota-mem-cpu-pod-2-yaml')" title="admin/resource/quota-mem-cpu-pod-2.yamlをクリップボードにコピー"></img></div>
    <div class="includecode" id="admin-resource-quota-mem-cpu-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">quota-mem-cpu-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">quota-mem-cpu-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">redis</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><span class="line"><span class="cl"><span class="w">        </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;800m&#34;</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;700Mi&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">        </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;400m&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      
</span></span></span></code></pre></div></div>
</div>

このマニフェストでは、Podのメモリ要求が700 MiBであることがわかります。
使用済みのメモリ要求とこの新しいメモリ要求を合計すると、メモリ要求のクォータを超過することに注意してください: 600 MiB + 700 MiB > 1 GiB。

このPodを作成しようとします:

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

2つ目のPodは作成されません。
この出力から、2つ目のPodを作成するとメモリ要求の合計がメモリ要求クォータを超過することがわかります。

```
Error from server (Forbidden): error when creating "examples/admin/resource/quota-mem-cpu-pod-2.yaml":
pods "quota-mem-cpu-demo-2" is forbidden: exceeded quota: mem-cpu-demo,
requested: requests.memory=700Mi,used: requests.memory=600Mi, limited: requests.memory=1Gi
```

## 考察 {#discussion}

この演習で見たように、ResourceQuotaを使用してNamespace内で実行されているすべてのPodのメモリ要求の合計を制限できます。
メモリ制限、CPU要求、CPU制限の合計も制限できます。

Namespace内のリソース使用量の合計を管理する代わりに、個々のPodやそれらのPod内のコンテナを制限したい場合があります。
そのような制限を実現するには、[LimitRange](/docs/concepts/policy/limit-range/)を使用します。


<div class="alert alert-info" role="note"><h4 class="alert-heading">備考:</h4><a href="/ja/docs/tasks/configure-pod-container/resize-container-resources/">インプレースPodのリサイズ</a>を使用する際、ResourceQuotaの適用はリサイズ後の値に適用されます。
リサイズによって名前空間のクォータ制限を超過する場合、そのリサイズは拒否され、Podのリソースは変更されません。</div>


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

Namespaceを削除します:

```shell
kubectl delete namespace quota-mem-cpu-example
```



## 次の項目

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

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

* [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の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/)
