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=cpu2nodeSelector: 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: nginxnodeSelector: 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