DevOps K8S(8) – 내 Pod의 Node 를 정해주고 싶을때 – Node Affinity

안녕하세요, 오늘은 베스핀글로벌 DevOps실 구연수 님이 작성해 주신 ‘내 Pod 의 Node 를 정해주고 싶을때 – Node Affinity’에 대해 알아보겠습니다.

Node Affinity

특정 Node에 Pod가 위치할 수 있도록 하는 개선된 기능 Node Affinity

같은 동작을 하는 Node Selector와 Node Affinity 정의 파일

  • 요구사항 : Large Node에 Pod를 위치시킬 것
Node Selector 정의 파일
Node Affinity 정의 파일

Node Affinity 타입
  • Node Affinity 타입으로 스케쥴러의 행동과 Pod 생명 주기의 단계를 정의할 수 있다
  • Available [사용 가능한 타입]
    • requiredDuringSchedulingIgnoredDuringExecution
    • preferredDuringSchedulingIgnoredDuringExecution
  • Planned [예정된 타입 -> 현재 사용할 수 있는지 추후 확인할 것]
    • requiredDuringSchedulingRequiredDuringExecution

 DurungSchedulingDuringExecution
type 1requiredignored
type 2preferredignored
type 3requiredrequired
  • DurungScheduling : pod가 존재하지 않으며 최초로 생성되는 단계. Pod가 최초 생성될 때 명시된 Affinity Rule을 고려하여 적절한 Node에 pod를 위치 시킨다. [만약 label과 매치되는 node가 사용 불가능한 상황이라면?]
    • required
      • 스케줄러는 정의된 Affinity 규칙에 node에 pod가 위치하도록 위임한다. 만약 발견되지 않는다면 pod를 스케줄링하지 않는다.
      • pod의 위치가 중요시될 때 사용하는 규칙이다.
    • preferred
      • 매치되는 node가 없다면 스케줄러는 정의된 Affinity 규칙에 상관없이 사용 가능한 아무 node에나 위치 시킨다.
      • pod의 위치가 별로 중요하지 않을 때 사용되는 규칙이다.
  • DuringExecution : pod가 이미 운영중인 상태이고 변화가 발생한 단계에서 Affinity가 영향을 준다 [만약 node의 label이 변경된다면?]
    • ignored
      • Node Affinity에 어떤 변화가 있더라도 pod는 상관없이 그대로 운영한다.
    • required
      • Affinity 규칙을 충족시키지 못한다면 실행중인 어떤 pod이던 node에서 퇴출시킨다.

감사합니다.

Written by 구 연수 / Yeonsoo koo

Software Engineer