kubernets taint & tolertaion , affinity

 

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

 

 

 

Leave a Comment