특정 노드에만 배포할 수 있는 taint 설정하기
k8s를 사용하다보면 특정 서버또는 특정환경에 매칭되는 pod만 배포할 경우가 필요합니다.
예를들면.... 디스크 타입이 ssd 장착된 노드와 hdd가 장착된 노드로 분리되어 있는 경우 disk io의 성능을 끌어올리려면 hdd보다는 ssd가 낫겠죠.
그렇게 특정 노드에 속성을 걸고 pod에 배포하기 위해서는 taint + Tolerations 이라는 기능을 사용하면 됩니다.
taint는 노드의 속성값으로 추가하는 것이고, toleration은 적용된 taint에 어떻게 반영할것인지를 정의하는 겁니다.
taint = node2의 type은 ssd이야
toleration = type 이 ssd로 정의된 노드에 배포해줘.
- 노드에 taint 적용하기
- taint 정보 확인
$> kubectl get nodes -o custom-columns=node:.metadata.name,taint:.spec.taints node taint controlplane [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]] node01 <none>
taint 설정 없는거 확인하였쥬?
- taint 설정해봅시다.
$> kubectl taint node node01 disk=ssd:NoSchedule node/node01 tainted
- 이제 taint 설정 한거 확인해봅시다.
$> kubectl get nodes -o custom-columns=node:.metadata.name,taint:.spec.taints node taint controlplane [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]] node01 [map[effect:NoSchedule key:disk value:ssd]]
- taint 정보 확인
- deployment에 toleration 정의하기
- deployment에 toleration 정의하기
... spec: containers: - image: nginx ... tolerations: - key: "disk" operator: "Equal" value: "ssd" effect: "NoSchedule" ...
- 배포하기
$> kubectl apply -f deploy.yaml
- deployment에 toleration 정의하기
- 노드에 적용했던 taint 정보 삭제
$> kubectl taint node node01 disk=ssd:NoSchedule- node/node01 untainted