본 글을 보기 전에 이전 노드를 스케쥴링 하는 방법인 nodeName, label, nodeSelector 글을 보고 오면 이해하기가 훨씬 쉽습니다.
친밀함을 뜻하는 어피티니에 대해서 알아보자.
먼저 핵심부터 말하자면 affinity
를 통해서 우리는 어떤 노드에 파드를 배포할지를 친밀도를 기준으로 결정할 수 있다.
먼저 배포 조건과 연산자는 다음과 같이 사용한다.
단,requiredDuringSchedulingIgnoredDuringExecution
을 2번 이상 사용 시, OR 조건으로 둘 다 허용되어 들어간다.
바로 실습을 적용해보며 이를 알아보자.
requiredDuringSchedulingIgnoredDuringExecution
을 사용해서 반드시 만족해야하는 레이블 조건과 preferredDuringSchedulingIgnoredDuringExecution
을 통해서 선호하는 조건을 하나 더 추가하였다.
이러한 선호 조건에서 weight
를 1
로 지정하고 In
을 통해서 key
와 value
가 반드시 매치되도록 사용하였다.
❗주의할 점은 preferredDuringSchedulingIgnoredDuringExecution
은 어디까지나 ❣선호 조건일 뿐이다. 배포를 보장하는 것이 아니다.
따라서 weight가 100이라도, 쿠버네티스 스케줄러는 다른 요구 사항(예: 리소스 요구 사항, 테인트 및 톨러레이션 등)에 의해서 배포될 노드가 변경될 수 있다.
현재 weight가 100인 상황에서도 워커노드 2번에 한개가 배포된 것을 확인할 수 있다.
그냥 In
대신 NotIn
을 사용한 것이 anti-affinity이다.
반대로 말 그대로 안티이므로, 해당 조건을 만족하는 노드를 비 선호하게 된다.