0Pricing
Kubernetes Basics · レッスン

リソースのRequestsとLimits

PodのCPUとメモリのRequestsおよびLimitsを定義し、効率的なリソース配分とリソース枯渇の防止を実現します。

「リソースのRequestsとLimits」はCoddyKit上の無料Kubernetes Basicsレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKubernetes Basics学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kubernetes Basicsコースには全4レッスンが含まれています。

Kubernetesにおけるリソース要件

どのアプリケーションでも、Podの実行にはリソースが必要です。Kubernetesでは、Resource RequestsとResource Limitsを使って、これらのリソースを効率的に管理できます。

これらの設定によって、Podに必要なCPUとメモリの量、および使用を許可する上限をKubernetesに伝え、公平なリソース配分を実現します。

CPU Requests: CPUを保証する

CPU Requestは、Podが安定して実行するために必要なCPUの最小量をKubernetesに伝えます。これは保証値です。

  • KubernetesはRequestを使って、十分な空きリソースがあるノードにPodをスケジュールします。
  • ノードにRequestを満たすCPUがなければ、そのノードにはPodをスケジュールしません。
  • これにより、重要なアプリケーションのリソース不足を防げます。

CPUの単位とRequestの例

CPUは「コア」または「ミリコア」(m)で測定します。1000mはCPU 1コアに相当するため、500mは0.5コアです。

Podの定義でCPU 0.5コアを要求する方法は次のとおりです。

apiVersion: v1
kind: Pod
metadata:
  name: cpu-request-pod
spec:
  containers:
  - name: my-container
    image: nginx
    resources:
      requests:
        cpu: "500m"

CPU Limits: 過剰使用を防ぐ

CPU Limitは、Podが使用できるCPUの最大量を設定します。いわば上限値です。

  • PodがLimitを超えるCPUを使おうとすると、Kubernetesは使用量をスロットリングします。
  • つまりPodのCPU使用量が制限され、同じノード上の他のPodのリソースを独占するのを防ぎます。

CPU Limitの動作例

CPU Limitを設定する例を見てみましょう。このPodがCPU 1コアを超えて使用しようとすると、スロットリングされ、パフォーマンスが制限されます。

apiVersion: v1
kind: Pod
metadata:
  name: cpu-limit-pod
spec:
  containers:
  - name: my-container
    image: nginx
    resources:
      limits:
        cpu: "1"

Memory Requests: RAMを保証する

CPUと同様に、Memory RequestはPodの実行に必要なRAMの最小量を指定します。

  • Kubernetesはこの値を使って、Podに十分な空きメモリがあるノードを探します。
  • ノードのメモリが不足すると、Requestを設定していないPodが空きを確保するために最初に終了(エビクト)されることがよくあります。

メモリの単位とRequestの例

メモリはバイト単位で測定します。一般的な単位には、Mi(メビバイト)とGi(ギビバイト)があります。

100Miは100メビバイトを意味します。メモリを256 MiB要求する方法は次のとおりです。

apiVersion: v1
kind: Pod
metadata:
  name: mem-request-pod
spec:
  containers:
  - name: my-container
    image: nginx
    resources:
      requests:
        memory: "256Mi"

メモリ制限:OOMを回避する

メモリ制限は、Podが使用できるメモリの最大量を定義します。

  • Podがメモリ制限を超えると、オペレーティングシステムによって「Out Of Memory」(OOM)エラーで直ちに終了されます。これは「OOMKilled」と表示されることがよくあります。
  • これにより、1つの制御不能なPodがノードのメモリをすべて消費して、ノード全体をクラッシュさせるのを防ぎます。

メモリ制限の動作

このPodには512 MiBのメモリ制限が設定されています。これを超えて使用しようとすると、他のワークロードとノードを保護するために終了されます(OOMKilled)。

apiVersion: v1
kind: Pod
metadata:
  name: mem-limit-pod
spec:
  containers:
  - name: my-container
    image: nginx
    resources:
      limits:
        memory: "512Mi"

ベストプラクティス:RequestsとLimits

すべてのPodに対して、RequestsとLimitsの両方を定義することがベストプラクティスです。これにより、クラスターの安定性と予測可能性が向上します。

  • Requestsは、スケジューリングに必要な最小リソースをPodが確保できるようにします。
  • Limitsは、他のPodやノード自体のリソースが枯渇するのを防ぎます。

完全な例を見てみましょう。

apiVersion: v1
kind: Pod
metadata:
  name: full-resource-pod
spec:
  containers:
  - name: my-app
    image: my-registry/my-app:1.0
    resources:
      requests:
        cpu: "200m"
        memory: "128Mi"
      limits:
        cpu: "500m"
        memory: "256Mi"

リソースチェック

CPU Requestが200m、CPU Limitが1(1000mに相当)のPodが定義されています。

このPodが1.5個分のCPUコアを使用しようとすると、どうなるでしょうか。

まとめ:リソース管理

このレッスンでは、KubernetesにおけるResource RequestsとResource Limitsについて学びました。

  • Requests(CPUとメモリ)は、Podのスケジューリングに必要な最小リソースを保証します。
  • Limits(CPUとメモリ)は、リソース競合を防ぐために最大使用量を制限します。
  • CPU制限を超えるとスロットリングが発生し、メモリ制限を超えると終了(OOMKilled)されます。
  • アプリケーションの安定した予測可能なパフォーマンスのために、RequestsとLimitsは必ず両方定義してください。

よくある質問

「リソースのRequestsとLimits」レッスンは無料ですか?

はい。「リソースのRequestsとLimits」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kubernetes Basicsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kubernetes Basicsコースには全4レッスンが含まれています。

「リソースのRequestsとLimits」で何を学びますか?

PodのCPUとメモリのRequestsおよびLimitsを定義し、効率的なリソース配分とリソース枯渇の防止を実現します。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kubernetes Basicsを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKubernetes Basicsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「リソースのRequestsとLimits」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKubernetes Basicsレッスンでコードを書いて実行できますか?

はい。すべてのKubernetes Basicsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. リソースのRequestsとLimits
  2. ノードセレクターとアフィニティ
  3. TaintsとTolerations
  4. Podの優先度とプリエンプション
← Kubernetes Basicsに戻る