LabHub

CKA — 쿠버네티스 관리자 · 진짜 클러스터에서 확인하기 · 실습

스케줄러가 자리를 고르는 것을 본다

LabHub 에서 이어서 보기

이 실습은 자원이 진짜로 모자란 클러스터에서 합니다

VM 안에 진짜 k3s 가 떠 있습니다. 노드에 CPU 가 실제로 유한하기 때문에,
요청을 크게 잡으면 정말로 자리가 모자라 Pending 에 머뭅니다.

CKA 과정의 다른 스케줄링 실습이 도는 가짜 클러스터에는 가짜 노드가 여럿
있고 자원 압박이 없어서, 무엇을 요청하든 다 놓입니다. 그래서 스케줄러가
실제로 무엇을 보고 거절하는지 확인할 수 없었습니다.

처음 뜨는 데 2분쯤 걸립니다.

목표

스케줄러가 자리를 고르는 다섯 가지 장치를 실제로 막히게 만들어 확인합니다.
그리고 우선순위가 낮은 파드가 쫓겨나는 것까지 봅니다.

왜 중요한가

스케줄링 설정은 "잘 쓰면 원하는 데 놓인다" 보다 **"잘못 쓰면 아무 데도 안
놓인다"** 쪽이 훨씬 자주 문제가 됩니다. 그리고 그 증상은 언제나 같습니다 —
파드가 Pending 입니다.

원인은 여러 층에 흩어져 있습니다.

스케줄러는 왜 못 놓았는지를 언제나 이벤트에 남깁니다. 그것을 읽는
훈련이 이 실습의 전부입니다.

단계

모든 것은 csch 네임스페이스에 만듭니다. 노드는 한 대입니다.

1. 노드의 capacityallocatable, 그리고 지금 얼마나 요청되어 있는지/root/csch/capacity.txt 에 담으세요.
2. hog-a·hog-b·hog-c 세 파드로 자리를 다투게 하세요. 앞의 둘은 놓이고 셋째는 Pending 이어야 합니다. 스케줄러의 사유를 /root/csch/pressure.txt 에 담습니다.
3. 노드에 lab=only:NoSchedule 테인트를 걸고, 톨러레이션이 없는 no-tol 과 있는 with-tol 을 비교해 /root/csch/taint.txt 에 담으세요.
4. 노드에 disktype=ssd 라벨을 붙이고 aff-required(맞는 것)·aff-impossible(없는 라벨을 required 로)·aff-preferred(없는 라벨을 preferred 로) 셋을 만들어 /root/csch/affinity.txt 에 담으세요.
5. spread Deployment(레플리카 2)에 required 안티어피니티를 걸어, 노드가 하나뿐이라 하나만 뜨는 것을 /root/csch/anti.txt 에 담으세요.
6. low-prio·high-prio PriorityClass 를 만들고, 낮은 것으로 노드를 채운 뒤 important(높은 것)를 넣어 선점이 일어나는 것을 /root/csch/preempt.txt 에 담으세요.
7. even Deployment 에 topologySpreadConstraintsScheduleAnyway 로 걸어 /root/csch/spread.txt 에 담으세요.
8. /root/csch/report.mdpending_reason=Insufficient, taint_effect=NoSchedule, high_priority_value= 세 줄과 설명을 쓰세요.

참고

단계 8개

  1. 노드에 무엇이 얼마나 있는가
  2. 자리가 모자라면 기다린다
  3. 노드가 거절한다
  4. required 와 preferred
  5. 같은 노드를 피한다
  6. 높은 우선순위가 자리를 빼앗는다
  7. 고르게 흩는다
  8. 무엇을 배웠나