kubernetes를 사용하게 되면 workernode별로 리소스를 배포하고 싶을 때가 있을 수 있습니다.
특히 : GPU 서버가 존재할 경우 필요하실겁니다.
GPU는 코어 개수만큼만 할당해서 사용하기 때문입니다.
kubeflow 프로젝트를 하면서 그런 일이 생기더라고요.
먼저 taint & toleration , affinity 에 대해서는 먼저 알아보도록 하겟습니다
taint : workernode에 정책등을 적용해서 해당 정책 맞는 리소스만 배포되는 방식
tolerations : Pod ,Deployment 등.. 리소스에 적용
- taint 예시
kubectl taint nodes node1 key1=value1:NoSchedule
- tolerations 예시
tolerations:
- key: "key1"
operator: "Equal"
value: "value1"
effect: "NoSchedule"
- Affinity
- Label 생성 방법
kubectl label node "node" -L nvidia=gpu
- WorkerNode Label
- key : nvidia
- value : gpu
- Pod Affinity Label 적용 Yaml
apiVersion: v1
kind: Pod
metadata:
name: tensorflow
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: nvidia
operator: In
values:
- gpu
containers:
- name: tensorflow
image: tensorflow/tensorflow:latest-gpu-jupyter