👨‍💻

kubernetes schedulerについて

2022/02/20に公開

schedulerについて

  • taints and talorations
    • taintsはpodを配置したくないノードに対してtaint(汚れ)という名の印をつける
    • tolerationsはpodがtaint(汚れ)をtolerations(許容)できるPodのみスケジューリングを許可するポリシー

taintの付与

kubectl taint node zenn01(ノード名) zenn=geek:NoSchedule

付与したtaintの削除

kubectl taint node zenn01(ノード名) zenn=geek:NoSchedule-

tolerationsの付与

apiVersion: v1
kind: Pod
metadata:
  name: zenn
spec:
  containers:
  - name: zenn
    image: nginx
  tolerations:
  - key: zenn
    value: geek
    effect: NoSchedule
    operator: Equal


Effectの種類 概要
PreferNoScheduler 可能な限りスケジューリングしない
NoSchedule スケジューリングしない(既にスケジューリングされているPodはそのまま)
NoExecute 実行を許可しない(既にスケジューリングされているPodは停止される)
operatorの種類 概要
Equal keyとvalueが等しい
Exit keyが存在する


  • nodeselector
    • 簡易的にpodが起動されるNodeを選択できる。
      ※nodeSelectorで設定するkey=valueの値はnode側でlabelで設定されてる必要あり。
apiVersion: v1
kind: Pod
metadata:
  name: zenn
spec:
  containers:
  - name: zenn
    image: nginx
  nodeSelector:
    key: value


  • nodeaffinity
    • Podを特定のノード上へスケジューリングするポリシー。
    • Pod定義内のspec.affinity.nodeAffinityに書くことで設定する
apiVersion: v1
kind: Pod
metadata:
 name: zenn
spec:
 containers:
 - name: zenn
   image: nginx
 affinity:
   nodeAffinity:
     requiredDuringSchedulingIgnoredDuringExecution:
       nodeSelectotTerms:
       - matchExpressions:
         - key: colour
           operator: In
           values: 
           - red
     preferredDuringSchedulingIgnoredDuringExecution:
     - weight: 1
       preference:
         matchExpressions:
         - key: another-node-label-key
           operator: In
           values:
           - another-node-label-value
設定項目 概要
requiredDuringSchedulingIgnoredDuringExecution 必須のスケジューリングポリシー
preferredDuringSchedulingIgnoredDuringExecution 優先的に考慮されるスケジューリングポリシー
operatorの種類 使い方 意味
In A In [B,...] ラベルAの値が[B,...]の中のいずれか一つ以上と一致する
NotIn A NotIn[B,...]
Exists A Exists[] ラベルAが存在する
DoesNotExit A DoesNotExist[] ラベルAが存在しない
Gt A Gt [B] ラベルAの値がBよりも大きい
Lt A Lt [B] ラベルAの値がBよりも小さい


  • Daemoset
    • DaemonSetは各NodeにPodを1つづつ配置するリソース
    • レプリカ数は指定できないが、nodeSelectorやNodeAffinityでスケジューリングを除外するNodeを設定することは可能。
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: zenn
spec:
  selector:
    matchLabels:
      name: zenn
  template:
    metadata:
      labels:
        name: zenn
    spec:
      containers:
      - name: zenn
        image: nginx

Discussion