広告

kubernetes – priorityClass

infrastructure as code

PriorityClassとは

manifestのリソース指定:
kind: priorityClass

公式ドキュメントでは、以下のように説明しています。

A PriorityClass object can have any 32-bit integer value smaller than or equal to 1 billion. Larger numbers are reserved for critical system Pods that should not normally be preempted or evicted. A cluster admin should create one PriorityClass object for each such mapping that they want.

簡単に理解すると、priorityClassはPodに優先度をつけるためのリソースです。

Podに優先度をつけると、例えkubernetesクラスタのリソースが限界でも、作成しようとするPodの優先度が高ければ、優先度の低いPodは無理やり退避させて、優先度高いPodをスケジューリングするようにできます。

ちなみに、priorityClassはNamespace属しないリソースの一つです。

priorityClassの設定

priorityClassでは以下の設定ができます。

  • value:優先度の値、値が大きいほど優先度が高い
    • 値範囲:32-bit 整数
  • globalDefault:
    • true:優先度付けていないPodのデフォルト優先度にされるpriorityClassとなる
      • trueのpriorityClassが複数存在する場合、valueが最も低いものが適用される
    • false:PodがpriorityClassを指定する時だけ、優先度が付けられる
  • description:用途説明用の属性、どんな文字列をいれてもいい

Podのデフォルト優先度

公式ドキュメントに以下の説明があります。

To address the problem, you can change the priorityClassName for those Pods to use lower priority classes, or leave that field empty. An empty priorityClassName is resolved to zero by default.

即ち、デフォルトの状態では、Podの優先度はすべて0とみなされます。

manifest例

priorityClass作成例

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 1000000  # 優先度が1000000
globalDefault: false  # すべてのリソースのデフォルト値ではない
description: "This priority class for test."  # 説明

Podへの設定例

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    env: test
spec:
  containers:
  - name: nginx
    image: nginx
    imagePullPolicy: IfNotPresent
  priorityClassName: high-priority  # Podの優先度として、PriorityClassを付ける

最後に

KubernetesのPriorityClassについて、簡単にご紹介しました。
大事なPodに優先度をつけることで、リソースが足りない場合でも動作をある程度に保証できる仕組みです。

ここまで読んでいただいて、お疲れ様でした。

コメント

タイトルとURLをコピーしました