0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【簡単Kubernetes】TaintNodesByConditionとTaintBasedEvictionとは?やさしく解説!

Posted at

こんにちは。今回は Kubernetes における「ノードの状態管理」を自動化する2つの重要な機能
TaintNodesByConditionTaintBasedEviction について、やさしく解説します。

🧠 はじめに:Taint(汚染)とは?

Kubernetesでは、ノードに「taint(テイント)=汚染」を付けることで、
特定のPodがそのノードにスケジューリングされないように制御できます。

taints:
- key: "key1"
  effect: "NoSchedule"

一方、Podに「toleration(トレラレーション)=許容」を設定することで、
特定の taint を無視してスケジューリングすることが可能です。


📌 TaintNodesByConditionとは?

✅ 概要

Kubernetes v1.12 以降、TaintNodesByCondition はデフォルトで有効です。
ノードの状態(メモリ不足・ディスク障害など)に応じて、自動的に taint を付与します。

つまり:

  • ノードの状態(Node Condition)を直接チェックするのではなく、
  • Taint としてラベル化して、Podのスケジューリング時にそれを使う

✅ 付与されるTaint一覧(効果: NoSchedule

ノードの状態 Taintキー
メモリ不足 node.kubernetes.io/memory-pressure
ディスク不足 node.kubernetes.io/disk-pressure
ディスク使い切り node.kubernetes.io/out-of-disk
スケジューリング不可 node.kubernetes.io/unschedulable
ネットワーク不可 node.kubernetes.io/network-unavailable

これらの Taint があるノードには、toleration を設定していない Pod はスケジューリングされません


📌 TaintBasedEvictionとは?

✅ 概要

Kubernetes v1.13 以降、TaintBasedEviction はデフォルトで有効です。
ノードに異常があると、対応する NoExecute taint を自動で追加し、
すでに動いている Pod も自動的に追い出されます(Eviction)

つまり:

  • 「既にノード上にいるPod」を対象にした動作です。

✅ 具体例

tolerations:
- key: "node.kubernetes.io/memory-pressure"
  effect: "NoExecute"
  tolerationSeconds: 3600

この設定があると:

「Podは、メモリ圧力のあるノードに移された後、3600秒間はそのまま滞在できる。
それ以降は強制的に退去させられる(Evicted)」


🚀 DaemonSetの場合は?

DaemonSet Pod には、Kubernetesが自動で以下のような NoSchedule の toleration を追加してくれます:

  • node.kubernetes.io/memory-pressure
  • node.kubernetes.io/disk-pressure
  • node.kubernetes.io/out-of-disk
  • node.kubernetes.io/unschedulable
  • node.kubernetes.io/network-unavailable

これは、DaemonSet がノードに必ず配置されるべきであるための仕様です。


🧩 まとめ

機能名 目的 対象 Taint効果 主な用途
TaintNodesByCondition ノードの状態を元に Pod のスケジューリング制御 新しく配置されるPod NoSchedule 問題あるノードに Pod を置かない
TaintBasedEviction ノードの状態を元に 既存のPod を退去させる 既に配置されているPod NoExecute 問題あるノードから Pod を追い出す

🎯 参考


📝 おわりに

Kubernetes の tainttoleration を使いこなすことで、
障害発生時の耐障害性(フェイルオーバー)を高め、より安定した運用が可能になります。

質問や補足があれば、ぜひコメントください 😊

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?