リソースのRequestsとLimits
PodのCPUとメモリのRequestsおよびLimitsを定義し、効率的なリソース配分とリソース枯渇の防止を実現します。
「リソースのRequestsとLimits」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全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チューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「リソースのRequestsとLimits」で何を学びますか?
PodのCPUとメモリのRequestsおよびLimitsを定義し、効率的なリソース配分とリソース枯渇の防止を実現します。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「リソースのRequestsとLimits」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- リソースのRequestsとLimits
- ノードセレクターとアフィニティ
- TaintsとTolerations
- Podの優先度とプリエンプション