스케줄링 · requests/limits (Scheduling)
파드를 만들어도 곧바로 도는 것은 아닙니다. 어느 노드에 놓을지 정해져야 컨테이너가 시작됩니다. 스케줄러가 보는 값은 지금 쓰고 있는 양이 아니라 파드가 선언한 requests 의 합, 즉 예약된 몫입니다. 담을 수 없는 노드를 걸러 내고 남은 후보에 점수를 매겨 한 곳을 고릅니다.
01스케줄링 · requests/limits (Scheduling)
개념 한눈에 보기파드를 만들어도 곧바로 도는 것은 아닙니다. 어느 노드에 놓을지 정해지기 전까지는 Pending 으로 기다립니다.
스케줄러가 보는 값은 지금 쓰고 있는 양이 아니라 requests 의 합입니다. 막대에 찬 것은 실제 사용량이 아니라 예약된 몫입니다.
먼저 거릅니다. 요청분을 얹었을 때 넘치는 노드는 후보에서 빠집니다 — 남은 자리가 0.5 뿐이라 1 을 담지 못합니다.
남은 후보에는 점수를 매깁니다. 기본 정책은 자원이 한쪽에 몰리지 않도록 여유가 더 큰 노드를 높게 봅니다.
배치가 끝나면 그 노드의 예약분이 그만큼 늘어납니다. 다음 파드는 늘어난 이 값 위에서 계산됩니다.
자리만 보는 것이 아닙니다. taint 를 단 노드는 그 표시를 감내하는 파드만 받고, 라벨이 맞지 않는 노드는 여유가 있어도 빠집니다.
requests 를 실제보다 낮게 적으면 더 많이 들어갑니다. 대신 몰리는 순간 예약보다 많이 쓰려는 파드끼리 서로 자원을 뺏습니다.
넘겼을 때 받는 벌은 자원마다 다릅니다. CPU 는 한도까지만 쓰도록 눌리고(throttle), 메모리는 그 자리에서 컨테이너가 죽습니다.
어느 노드에도 들어가지 못하면 파드는 Pending 으로 남습니다. 이럴 때 노드를 늘리는 것은 클러스터 오토스케일러의 몫입니다.
02 쉽게 이해하기
For Everyone스케줄러는 실제 사용량이 아니라 선언한 requests 의 합으로 자리를 정합니다. requests 는 자리를 잡아 주고 limits 는 넘었을 때의 처분을 정하는데, CPU 는 한도까지 눌리고 메모리는 컨테이너가 죽습니다.
스케줄링은 필터와 점수 두 단계입니다.
요청분을 얹었을 때 넘치는 노드, 라벨이나 taint 조건이 맞지 않는 노드가 먼저 빠지고, 남은 후보 중에서 기본 정책은 자원이 한쪽에 몰리지 않는 쪽을 높게 봅니다.
requests 는 자리를 예약하고 limits 는 상한을 정하는데, 넘겼을 때 받는 벌이 다릅니다 — CPU 는 한도까지만 쓰도록 눌리고(throttling), 메모리는 회수할 방법이 없어 컨테이너가 OOMKill 됩니다.
두 값의 관계가 QoS 등급을 정해, 노드가 쪼들릴 때 먼저 쫓겨나는 순서도 여기서 갈립니다.
어느 노드에도 못 들어가면 파드는 Pending 으로 남고, 노드를 늘리는 것은 클러스터 오토스케일러의 몫입니다.
- –requests·limits 값 정하기
- –Pending 파드의 원인 진단
- –노드 라벨·taint 로 워크로드 나누기
- –오버커밋과 OOMKill 사이의 절충
03 자주 묻는 질문
FAQ스케줄링 · requests/limits (Scheduling)란 무엇인가요?+
파드를 만들어도 곧바로 도는 것은 아닙니다. 어느 노드에 놓을지 정해져야 컨테이너가 시작됩니다. 스케줄러가 보는 값은 지금 쓰고 있는 양이 아니라 파드가 선언한 requests 의 합, 즉 예약된 몫입니다. 담을 수 없는 노드를 걸러 내고 남은 후보에 점수를 매겨 한 곳을 고릅니다.
스케줄링 · requests/limits (Scheduling)은(는) 어디에 사용하나요?+
requests·limits 값 정하기, Pending 파드의 원인 진단, 노드 라벨·taint 로 워크로드 나누기, 오버커밋과 OOMKill 사이의 절충
스케줄링 · requests/limits (Scheduling)를 쉽게 비유하면?+
스케줄러는 실제 사용량이 아니라 선언한 requests 의 합으로 자리를 정합니다. requests 는 자리를 잡아 주고 limits 는 넘었을 때의 처분을 정하는데, CPU 는 한도까지 눌리고 메모리는 컨테이너가 죽습니다.
