Kubernetes · 1 min read · Dec 09, 2025

Kubernetesにおけるリソース制限

ノードに十分なリソースがある場合、コンテナがより多くのリソースを使用することが可能です。コンテナが必要とする各リソースの量を指定できます。指定する一般的なリソースはCPUとメモリです。Pod内のコンテナに対してリソースリクエストを指定すると、スケジューラはPodを配置するノードを決定します。コンテナに対してリソース制限を指定すると、kubeletが制限を管理し、実行中のコンテナが設定した制限を超えて使用することを許可しません。

例えば、コンテナに対して100 MiBのメモリリクエストを設定した場合、コンテナはより多くのRAMを使用しようとすることができます。しかし、コンテナに対して4GiBのメモリ制限を設定すると、ランタイムはコンテナが設定されたリソース制限を超えて使用することを防ぎます。

CPUとメモリは計算リソースと呼ばれます。

Podの各コンテナは、以下の1つまたは複数を指定できます:

  • cpuの制限
  • メモリの制限
  • hugepages-の制限
  • cpuのリクエスト
  • メモリのリクエスト
  • hugepages-のリクエスト

Kubernetesのリソースについて詳しく知りたい場合は、こちらをクリックしてKubernetesの公式ドキュメントを訪れてください。

この記事では、CPUとメモリのリソース制限とリクエストの例を見ていきます。また、Metric Serverも使用します。Metrics Serverは、クラスター内のリソース使用データの集約器であり、デフォルトではクラスターにデプロイされていません。このMetric Serverを使用して、ポッドによるリソース消費を確認します。

前提条件

  1. 1つ以上のワーカーノードを持つKubernetesクラスター。 Kubernetesクラスターの作成方法を学びたい場合は、こちらをクリックしてください。このガイドでは、AWS Ubuntu 18.04 EC2インスタンス上に1つのマスターと2つのノードを持つKubernetesクラスターを作成する手助けをします。

何をしますか?

  1. リソース制限

リソース制限

リソース要件が指定されたポッドを作成する前に、Metric Serverをインストールしましょう。

以下のコマンドを使用してMetric ServerのGithubリポジトリをクローンし、インストールします。

git clone https://github.com/kodekloudhub/kubernetes-metrics-server.git
cd kubernetes-metrics-server/

オブジェクトファイルを使用してMetric Serverを作成します。

kubectl create -f .

install-metric-server

Metric Serverが初期化されるまでしばらく待ちます。しばらくすると、以下のコマンドを実行してクラスターのノードを監視できます。

kubectl top node

次に、メモリリクエストと制限を含む以下の内容のポッド定義ファイルを作成します。

vim my-pod-with-memory.yml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-memory-demo
spec:
  containers:
  - name: my-container-memory-demo
    image: polinux/stress
    resources:
      limits:
        memory: "50Mi"
      requests:
        memory: "20Mi"
    command: ["stress"]
    args: ["--vm", "1", "--vm-bytes", "30M", "--vm-hang", "1"]

my-pod-memory-demo

ここで、メモリ制限を50Mi、メモリリクエストを20Miとして指定した「resources」プロパティを見つけることができます。

デフォルトの名前空間で既存のポッドを確認します。

kubectl get pods #デフォルトの名前空間からポッドを取得

上記のステップで作成したポッド定義を使用してポッドを作成します。

kubectl create -f my-pod-with-memory.yml #ポッドを作成
kubectl get pods

create-a-pod-with-memory-request-and-limit

ポッドの詳細を取得すると、ポッドが20Miのメモリをリクエストし、50Miのメモリ制限を持っていることがわかります。

kubectl get pods
kubectl describe pod my-pod-memory-demo #ポッドの詳細を表示

describe-the-pod-and-check-memory

ポッドの使用状況は以下のコマンドで確認できます。

kubectl top pods #ポッドによるリソース消費を確認

check-memory-consumption

次に、CPUリクエストと制限を持つポッド定義を作成します。

vim my-pod-with-cpu.yml
apiVersion: v1
kind: Pod
metadata:
  name: my-pod-cpu-demo
spec:
  containers:
  - name: my-container-cpu-demo    image: vish/stress
    resources:
      limits:        cpu: "1"
      requests:
        cpu: "0.5"
    args:
    - -cpus
    - "2"

my-pod-cpu-demo

上記のファイルでは、定義に「resource」プロパティがあり、CPUリクエストが0.5、制限が1であることがわかります。また、要求として2つのCPUを渡していることに注意してください。これは制限を超えています。

次に、以下のコマンドを使用してCPUリクエストと制限を持つポッドを作成します。

kubectl apply -f my-pod-with-cpu.yml #ポッドを作成
kubectl get pods

create-a-pod-with-cpu-request-and-limit

作成したポッドの詳細を取得します。

kubectl get pods
kubectl describe pod my-pod-cpu-demo

describe-the-pod-and-check-cpu

ポッドが0.5または500mのCPUをリクエストし、1 CPUの制限を持っていることがわかります。

CPU使用量を確認するには、以下のコマンドを使用します。

kubectl top pod #ポッドによるリソース消費を確認

check-cpu-consumption

上記のスクリーンショットでは、ポッド定義で2つのCPUを引数として渡しても、制限である1 CPUを超えて消費できないことがわかります。ここで、ポッド「my-pod-cpu-demo」は999mのCPUを消費でき、これは1 CPUに相当し、消費を増やすことはできませんでした。

結論

この記事では、Metric Serverを使用してクラスターでの監視を有効にする手順を見ました。ポッドがCPUとメモリをリクエストし、指定された制限を超えてリソースを消費しない方法を確認しました。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。