쿠버네티스 스케줄러

도람·2025년 11월 7일
post-thumbnail

쿠버네티스 스케줄러

쿠버네티스 스케줄러란 kubelet이 파드를 실행할 수 있도록, 파드가 노드에 적합한지 확인하는 것을 말한다.


스케줄링 개요

kube-scheduler는 쿠버네티스의 기본 스케줄러로, 컨트롤 플레인의 일부로 동작한다.
새로 생성되었거나 아직 어떤 노드에도 배치되지 않은 파드에 대해, 가장 적합한 노드를 찾아주는 역할을 한다.
필요하다면 기본 스케줄러 대신 사용자가 직접 만든 스케줄링 컴포넌트를 적용할 수도 있다.

스케줄러는 다음과 같은 과정을 거쳐 작동한다.

  • 후보 노드 필터링 (Filtering)
    파드가 가진 요구사항(예: CPU, 메모리, 노드 레이블 등)을 만족하지 못하는 노드들은 제외한다.
    *파드의 컨테이너와 파드 자체가 서로 다른 요구사항을 가질 수도 있는데,
    스케줄러는 이런 조건들을 모두 고려해 가능한 노드만 남긴다.

  • 점수 계산 (Scoring)

필터링 과정을 통과한 노드들 중에서 각 노드의 자원 사용률, 거리, 우선순위 등을 기준으로 점수를 매긴다.
점수가 가장 높은 노드를 선택해 파드를 실행시킨다.

  • 바인딩 (Binding)

선택된 노드에 파드를 실제로 연결하는 과정을 말한다.
스케줄러는 이 결정을 API 서버에 전달하여 파드가 해당 노드에서 실행되도록 한다.

(추가로, API를 사용해 파드를 생성할 때 특정 노드를 직접 지정할 수도 있지만,
이 방법은 일반적인 케이스가 아닌 특수한 상황에서만 사용된다.)

정리
정리하자면, 쿠버네티스의 스케줄링이란 가장 적합한 파드(후보)를 점수매겨서 선택하고 요구사항이나 각종 요소들을 고려하여 어떤 파드를 어느 노드에 배치할지 자동으로 판단하고 실행시키는 역할을 한다.


파드의 컨테이너, 파드 자체 서로 다른 요구사항을 가지는 상황

파드의 컨테이너파드 자체 다른 요구사항 가지는 경우
위에서 "파드의 컨테이너와 파드 자체는 서로 다른 요구사항을 가지는 상황이 있다."라고 적어놓았다.
처음엔 ‘어차피 파드 안에 있는 컨테이너도 결국 파드 아닌가? 어떻게 요구사항이 다를 수 있지?’ 라는 의문이 들었다. 그래서 쿠버네티스 공식 홈페이지를 찾아보았다.

이런 문장을 발견할 수 있었다.

“Since containers in pods - and pods themselves - can have different requirements, the scheduler filters out any nodes that don’t meet a Pod’s specific scheduling needs.”


즉, 파드 내부의 개별 컨테이너는 자신이 필요한 자원을 요청할 수 있다.
예를 들어 어떤 컨테이너는 GPU가 있는 노드에서만 실행되어야 한다는 요구사항이 있을 수 있다.
반면, 파드 전체는 노드의 상태나 배치 조건 등 더 큰 단위의 제약을 가질 수 있다.
예를 들어 “이 노드는 예전에 장애가 났던 노드니까 피하자” 같은 식으로 할 수 있다.


결국 요약하자면
컨테이너는 “내가 어떤 환경에서 실행되어야 하는가”를 정의한다.(실행 조건을 요구)
즉, 필요한 CPU나 메모리의 양, GPU 사용 여부 등 자원(Resource) 에 대한 요구사항을 명시하는 것이다.
이 정보는 스케줄러가 “이 파드를 실행하려면 최소한 이 정도의 자원이 필요한 컨테이너가 들어 있구나”라고 판단하는 기준이 된다.

반면 파드는 “이 파드가 어떤 노드에 배치될 수 있는가”를 정의한다.
이는 노드의 특정 속성(예: 레이블, 어피니티, 톨러레이션 등)에 따라
“이 파드는 SSD 디스크를 가진 노드에서만 실행되어야 한다”거나
“이 파드는 특정 파드와 같은 노드에 함께 배치되어야 한다” 같은 배치 조건(Scheduling Constraints) 을 설정하는 것이다.

스케줄링 결정을 위해 고려해야 할 요소

  • 개별 및 집단 리소스 요구사항
  • 하드웨어/소프트웨어 정책 제한 조건
  • affinity(유사성) , anti-affinity 명세
  • 데이터 지역성
  • 워크로드간 간섭 등

affinity vs anti-affinity

말만 보면 유사성, 반 유사성? 뭘 뜻하는거지 싶었다. 파드가 비슷하다는 건가?라는 의문도 들고 이해가 안 갔다. 그래서 찾아보니 affinity(유사성)은 "이 파드는 특정 노드나 파드에 가까이 배치되고 싶다"라는 것을 뜻한다.
예를 들어, a서버 파드와 b서버 파드가 자주 통신한다면 두 파드를 같은 노드나 영역에 두면 네트워크 지연이 줄어준다.
anti-affinity는 "특정 파드와 같은 노드에 있으면 안된다." 라는 것이다.
예를 들어, 같은 애플리케이션의 복제본(Replica)는 한 노드에 몰아넣으면 그 노드가 죽는 경우 복제본까지 같이 죽기 때문에 같은 노드 안에 위치하면 안된다.


데이터 지역성(Data Locality)

데이터 지역성이란 뭔지도 이해가 안 가서 찾아보았다.
데이터 지역성이란, 데이터가 저장된 물리적인 위치와 가까운곳에서 연산을 수행한다는 원칙이다.

예를 들어, 대용량 데이터를 다루는 애플리케이션이 있다고 해보자.
이 데이터가 특정 노드의 로컬 디스크나 특정 스토리지 지역(zone) 에 저장되어 있다면,
그 데이터 근처에서 파드를 실행시키면 네트워크를 오가며 데이터를 가져올 필요가 없으니 훨씬 빠르다.
→ 즉, 왜냐하면 멀리 떨어진 곳에서 데이터를 가져오면 네트워크를 타야 해서 느려지지만,
가까운 곳에서는 바로 읽어올 수 있기 때문이다.

출처 : [Quora- What do you mean by data locality?]
https://www.quora.com/What-do-you-mean-by-data-locality


워크로드간 간섭

서로 다른 파드들이 같은 노드에서 실행될 때 리소스를 두고 싸우는 상황을 말한다.
예를 들어,
한 노드에서 CPU를 많이 쓰는 파드 A,
메모리를 많이 쓰는 파드 B가 같이 실행된다고 하면,

이때 파드 A가 CPU를 과도하게 점유하면 B의 성능이 떨어질 수 있다.
또는 서로 I/O를 많이 쓰면 디스크 접근이 느려질 수도 있다.

→ 이런 현상을 워크로드 간섭(Interference) 이라고 하며,
스케줄러는 이런 간섭을 최소화하도록 파드 배치를 조정한다.


참고자료 :
[쿠버네티스 공식 홈페이지 - 스케줄러]
https://kubernetes.io/ko/docs/concepts/scheduling-eviction/kube-scheduler/
[Quora- What do you mean by data locality?]
https://www.quora.com/What-do-you-mean-by-data-locality

profile
정도를 걷는 엔지니어

0개의 댓글