[Kubernetes] NodeSelector 를 이용한 Pod Scheduling

메린·2023년 5월 31일
0

Kubernetes

목록 보기
5/8
post-thumbnail

앞서 Kubernetes에서 Pod를 특정 노드에 할당하기 위해 방법을 많이 살펴보았다. NodeSelector 또한 Pod를 특정 노드 또는 노드 그룹에 제한적으로 스케줄링할 수 있다.

우선 NodeSelector를 알아보기 전 'nodeName'에 대해 먼저 말하려 한다.
'nodeName'은 Pod를 특정 노드에 직접 할당하는 방법 중 하나이다.
말 그대로 node의 name 기반으로 Pod가 배치될 node를 결정한다.
'nodeName'은 직관적이고 간단하지만, 몇 가지 단점이 존재한다.

  • 'nodeName'은 Pod manifest에 하드코딩되기 때문에 재사용성이 떨어진다. 동일한 manifest를 여러 노드에 배포하려면 각 노드에 대해 별도의 manifest를 생성해야 한다.
  • 'nodeName'은 Pod와 노드 간의 강한 결합을 생성한다. Pod가 특정 노드에 종속되기 때문에 해당 노드가 다운되거나 문제가 발생하면 Pod가 중단되고 다른 노드에 다시 스케줄링 되지 않는다. 이는 가용성과 확장성에 제약을 준다.
    따라서 'nodeName'은 특정 상황에서 사용하며, 보다 유연하고 관리 가능한 Pod Scheduling인 'nodeSelector', 'Node Affinity', 'Pod Affinity'등과 같은 Kubernetes의 다른 기능을 활용 하는 것이 좋다.

NodeSelector

  • Kubernetes에서는 Node도 레이블을 가질 수 있다.
  • 이를 활용해 Label Selector을 기반으로 Pod를 특정 노드에 배치할 수 있다.
  • Node Label 관리
    • 기존에 존재하는 Node에 대해 Label을 관리하기 위해 'kubectl' 을 사용할 수 있다.
      • 노드에 새로운 Label 추가
        kubectl label node {노드명} {key}={value}
        {노드명}인 노드에 {key}={value} 형식의 새로운 label을 추가한다.
      • 노드의 기존 레이블 제거
        kubectl label node {노드명} {key}-
        {노드명}인 노드에서 {key} Label을 제거한다.

이와 가이 Label을 추가하거나 제거함으로써 Node Selector와 함께 사용하여 Pod를 특정 노드에 배치할 수 있다. Node Label 관리를 통해 Node의 특성과 리소스를 활용하여 Pod를 효율적으로 분배 할 수 있다.

profile
I can do it ! 苦盡甘來

0개의 댓글