0Pricing
Kubernetes Basics · レッスン

Podの優先度とプリエンプション

PriorityClassがPodの順位を決める仕組みと、スケジューラーが重要なワークロードのために優先度の低いPodをプリエンプトして空きを作る方法を学びます。

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

Podはすべて同じではありません

クラスターが満杯になると、ワークロードによって重要度が異なります。Podの優先度を使うと、リソースの割り当てをめぐる競争で、どのPodを優先すべきかをKubernetesに伝えられます。

PriorityClassとは

PriorityClassは、名前と整数値を対応付けるクラスター全体のオブジェクトです。数値が大きいほど優先度が高くなります。

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000
globalDefault: false
description: 'For critical production workloads'

Podに優先度を割り当てる

PodはpriorityClassNameでクラスを指定します。スケジューラーは、参照されたクラスから数値を読み取ります。

apiVersion: v1
kind: Pod
metadata:
  name: critical-app
spec:
  priorityClassName: high-priority
  containers:
  - name: app
    image: myapp:1.0

優先度がスケジューリングに与える影響

複数のPodが保留中の場合、スケジューラーは優先度の高いPodから配置しようとします。優先度は、Podがスケジュールされる順序に影響します。

プリエンプションとは

クラスターが満杯で高優先度のPodをスケジュールできない場合、スケジューラーは低優先度のPodをプリエンプト(退避)して、空きを作ることがあります。

退避されたPodはPendingに戻り、別の場所で再スケジュールされる可能性があります。

プリエンプションの動作

ノードがpriority-100のPodで満杯になっているところへ、priority-1000000のPodが到着したとします。スケジューラーは、重要なPodを配置できるよう、低優先度のPodを必要な数だけ削除できます。

kubectl get events --field-selector reason=Preempted
# Pod default/batch-job was preempted by critical-app

プリエンプションを無効にする

PriorityClassでは、preemptionPolicy: Neverを指定して、他のPodをプリエンプトしないようにできます。このようなPodも優先度の順序に従ってスケジュールされますが、他のPodを退避させることはありません。

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-no-preempt
value: 1000000
preemptionPolicy: Never

グローバルデフォルト

PriorityClassにglobalDefault: trueを設定すると、優先度を指定していないPodにその値が適用されます。グローバルデフォルトにできるクラスは1つだけです。

組み込みのシステムクラス

Kubernetesには、重要なコンポーネント向けにsystem-cluster-criticalやsystem-node-criticalなどの予約済みクラスが用意されています。これらをアプリに再利用しないでください。

kubectl get priorityclass
# system-node-critical     2000001000
# system-cluster-critical  2000000000

ベストプラクティス

  • 明確な少数のティア(例: critical、normal、batch)を定義します
  • 本当に重要なワークロードに限ってプリエンプションを使用します
  • リソースリクエストと組み合わせて、スケジューリングの判断を正確にします
  • すべてを高優先度にすることは避けます。そうすると優先度を設定する意味がなくなります

優先度とQoSの違い

優先度はスケジューリングとプリエンプションを制御します。Quality-of-Serviceクラス(requests/limitsから決まります)は、ノードに負荷がかかった際の退避を制御します。両者は関連していますが、異なる仕組みです。

理解度チェック

プリエンプションについての理解度を確認しましょう。

まとめ

PriorityClassによって、Podが整数値で順位付けされ、スケジューリングの順序に影響することを学びました。クラスターが満杯の場合、プリエンプションによって重要なPodが低優先度のPodを退避させられます。明確な少数のティアを使い、優先度を正確なリソースリクエストと組み合わせてください。

よくある質問

「Podの優先度とプリエンプション」レッスンは無料ですか?

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

「Podの優先度とプリエンプション」で何を学びますか?

PriorityClassがPodの順位を決める仕組みと、スケジューラーが重要なワークロードのために優先度の低いPodをプリエンプトして空きを作る方法を学びます。 ブラウザで直接実行するハンズオンコードでKubernetes Basicsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「Podの優先度とプリエンプション」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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