Kubernetes

nodeName과 nodeSelector 차이

leaf1991 2024. 12. 19. 16:59

두 명령어 전부 특정 노드에 pod를 스케줄링하기 위한 방법임.

하지만 작동 방식과 사용 목적이 다름

1. nodeName

  • 설명:
    • Pod가 특정 노드에서만 실행되도록 강제합니다.
    • 스케줄러가 아니라, 사용자가 직접 노드를 명시합니다.
    • Pod가 지정된 노드에서 실행될 수 없으면 다른 노드로 스케줄되지 않고 실패합니다.
  • 사용 예시:
    • cks7262-node2 노드에서만 Pod가 실행됩니다.
       
      spec:
          nodeName: cks7262-node2
  • 특징:
    • 스케줄링을 완전히 우회하여 특정 노드를 직접 지정합니다.
    • 단순한 테스트나 강제 배포용으로 적합합니다.
    • Pod가 실패하면 다른 노드로 재스케줄링되지 않습니다.

2. nodeSelector

  • 설명:
    • 특정 노드에서만 실행되도록 제한하기 위해 노드의 레이블을 기준으로 필터링합니다.
    • 스케줄러가 Pod를 적합한 노드로 스케줄링합니다.
    • 레이블 기반 필터링을 통해 더 유연한 스케줄링이 가능합니다.
  • 사용 예시:
    • cks7262-node2 노드의 kubernetes.io/hostname 레이블을 기준으로 스케줄링합니다.
       

      spec:

         nodeSelector:
            kubernetes.io/hostname: cks7262-node2
  • 특징:
    • 레이블이 있는 노드에만 Pod를 실행할 수 있습니다.
    • 레이블이 여러 노드에 있을 경우, 스케줄러가 자동으로 적합한 노드를 선택합니다.
    • 노드 간 유연한 스케줄링이 가능하며, 설정이 더 동적입니다.

차이점 요약

                                    nodeName                                                     nodeSelector

목적 특정 노드 강제 지정 레이블 기반 유연한 스케줄링
스케줄링 방식 스케줄러를 우회 스케줄러에 의해 관리
유연성 유연하지 않음 (노드 1개만 가능) 유연함 (레이블로 여러 노드 선택 가능)
실패 시 동작 다른 노드로 재스케줄링 불가 적합한 노드가 있으면 스케줄링 가능
사용 사례 테스트, 강제 노드 지정 프로덕션 환경에서 레이블을 활용한 배포