Eviction API
gpt-5.icon
Eviction API は Kubernetes において Pod を安全に削除(退避 / 退去)させるための仕組み を提供する API です。
単純な kubectl delete pod と異なり、スケジューラやコントローラが Pod の削除に関わるルールを考慮しつつ、安全にノードから退去させる ことを目的としています。 🧩 背景:Eviction の目的
Kubernetes ではノードに問題が発生したり、Pod を再配置したりする必要があるときに「退去 (evict)」を行います。
Eviction API はこの退去プロセスを管理するために用いられます。
主な利用シナリオ:
ノードのリソース(メモリ、ディスクなど)が逼迫し、kubelet が Pod を退去させるとき(自動 Eviction)
管理者や Cluster Autoscaler などがノードスケールインのために Pod を安全に退去させたいとき(手動 Eviction)
🧱 API の概要
Eviction は通常の Pod 削除とは異なり、専用の policy/v1 API を使用します。
code:yaml
apiVersion: policy/v1
kind: Eviction
metadata:
name: <pod-name>
namespace: <namespace>
呼び出し例(kubectl 経由):
code:bash
kubectl evict pod <pod-name> --namespace=<ns>
あるいは REST API 経由で:
code:_
POST /api/v1/namespaces/{namespace}/pods/{name}/eviction
🔍 Eviction の挙動と PodDisruptionBudget (PDB) Eviction API の最大の特徴は、PodDisruptionBudget(PDB)を考慮する ことです。
kubectl delete pod → 即座に Pod が削除される(PDB 無視)
kubectl evict pod → PDB をチェックし、許容される場合のみ Pod を削除
PDB は「同時に停止してよい Pod の数/割合」を制御するもので、Eviction API はそれを守ります。
例:
code:yaml
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: web-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: web
この場合、稼働中の Pod が3個であれば、Eviction API は1個までしか削除を許可しません。
⚙️ Eviction の仕組み(内部フロー)
1. コントローラや管理者が POST /eviction を呼ぶ。
2. API サーバーがその Pod に対応する PDB をチェック。
3. PDB で許可される場合のみ、delete リクエストが実行される。
4. 通常の Pod 終了プロセス(preStop フックや terminationGracePeriodSeconds)に従って終了。
🧠 自動 Eviction(kubelet 側)
Eviction API はユーザが使うものですが、kubelet にも自動 Eviction 機構 があります。
例えば、メモリ・ディスク・inode が不足すると kubelet が Pod を自動退去させます。
code:yaml
--eviction-hard=memory.available<100Mi,nodefs.available<10%
この場合、リソース不足時に kubelet が優先度や QoS(BestEffort / Burstable / Guaranteed)を見て Evict します。
🚦 まとめ
table:_
項目 Eviction API 普通の Pod 削除 (kubectl delete pod)
主目的 安全な退去(PDBを考慮) 強制削除
API policy/v1 Eviction core/v1 Pod Delete
PDB考慮 ✅ あり ❌ なし
Graceful Termination ✅ ✅
典型利用 スケールイン、再配置、メンテナンス 緊急削除、明示的停止