목차

목차

Kubernetes Node Schedule (NodeSelector, Affinity, Taint)

목차
  • Kubernetes가 커짐에 따라 스케쥴링(노드 할당)관리가 필요
    • kube-scheduler : Pod가 할당될 Node관리
  • 사용자가 원하는 Node에 아래를 통해 설정가능
    • nodeSelector: 지정 Node에 배치요청 → deprecated 예정
    • nodeName: 해당 node kubelet에게 직접 요청 → deprecated 예정
    • Affinity(친밀도): 다양한 조건으로 Node배치 요청
    • Tolerations: Taint(잠김) 설정된 Node에 강제 허용 요청
    • schedulerName: Multi Schedule 환경인 경우
#다양한 환경에 따른 node 라벨 설정
$ kubectl label node worker-0 disk=ssd

$ kubectl label node worker-1 disk=ssd

$ kubectl label node worker-2 disk=hdd

$ kubectl label node worker-3 disk=hdd

$ kubectl label node worker-0 compute=gpu1

$ kubectl label node worker-1 compute=gpu2

$ kubectl label node worker-2 compute=cpu1

$ kubectl label node worker-3 compute=cpu2

nodeSelector: disk=ssd (worker-0, worker-1)

#deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
    name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      #worker-0, worker-1
      nodeSelector:
        disk: ssd
      containers:
      - image: nginx
        name: nginx

nodeSelector: disk=ssd + compute=gpu1 (worker-0)

#deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
    name: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      #worker-0
      nodeSelector:
        disk: ssd
        compute: gpu1
      containers:
      - image: nginx
        name: nginx