スケジュールとは
あるNodeにPodを割り当てること
Taintとは
ある条件を満たさないとPodをスケジュールさせないようにする機能。想定しないPodの作成を防ぐ。
Taintはkey,value,effectの3つの要素からなる。マニュフェストファイルに記入されているkeyとvalueが一致しない場合、effectが発揮される(Podがスケジュールされないなど)
NodeにTaintを設定する方法
node01に、appというキーの値がbatchじゃないとスケジュールしませんよ〜(=NoScheduleという効果が発揮されますよ〜)というTaintを設定する例
$ kubectl taint node node01 app=batch:NoSchedule
ここに以下のようなyamlファイルでpod01というPodを作成しようとする
apiVersion: v1
kind: Pod
metadata:
name: pod01
spec:
containers:
- image: nginx
name: pod01
$ kubectl create -f pod01.yaml
ステータスを見るとpendingになる
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
pod01 1/1 Pending 0 4s
taintをちゃんと設定する
apiVersion: v1
kind: Pod
metadata:
name: pod01
spec:
containers:
- image: nginx
name: pod01
tolerations:
- key: "app"
operator: "Equal"
value: "batch"
effect: "NoSchedule"
Runningになる
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
pod01 1/1 Running 0 4s