LabHub
배우기 러닝패스 코스

KCNA — 쿠버네티스·클라우드 네이티브 입문 · 쿠버네티스 아키텍처 · 실습

노드가 셋인데 파드가 갈 곳이 없다

LabHub 에서 이어서 보기

목표

테인트/톨러레이션, nodeSelector, 노드 어피니티가 파드의 배치를 각각 어떻게 바꾸는지 직접 걸어 보고,
같은 Pending 이라도 원인(테인트를 못 견딤 / 라벨이 안 맞음 / 맞는 존이 없음)이 다르다는 것을 관찰합니다.

왜 중요한가

쿠버네티스에서 "파드가 어느 노드에서 도는가" 는 우연이 아니라 스케줄러의 계산 결과입니다.
kube-scheduler 는 배정되지 않은 파드를 지켜보다가, 노드마다 테인트·라벨·자원·어피니티를 따져
통과하는 노드를 고르고 spec.nodeName 을 채웁니다. 이 결정이 왜 그렇게 났는지 읽지 못하면,
Pending 하나를 두고 "자원이 없나?" "노드가 죽었나?" 하고 헤매게 됩니다.

테인트는 노드가 "나는 아무나 받지 않는다" 고 선언하는 것이고, 톨러레이션은 파드가 "나는 그걸 견딘다" 고
답하는 것입니다. nodeSelector 와 노드 어피니티는 반대로 파드가 "나는 이런 노드가 좋다/필수다" 라고
요구하는 것입니다. 둘은 방향이 반대라 함께 걸릴 때가 많고, 그래서 하나만 봐서는 배치를 설명하지 못합니다.

단계

1. 네임스페이스 kcna-sched 를 만들고 노드 이름과 존 라벨을 파일로 뽑습니다.
2. 세 노드 모두에 tier=reserved:NoSchedule 테인트를 겁니다.
3. 톨러레이션 없는 파드 plain 이 Pending 에 멈추는 것을 확인합니다.
4. 테인트를 견디는 톨러레이션을 준 파드 tolerant 가 배정되는 것을 확인합니다.
5. lab-node-0disktype=ssd 라벨을 붙이고 nodeSelector 로 그 노드에만 앉는 파드를 만듭니다.
6. 노드 어피니티로 zone-1·zone-2 노드에만 앉는 파드를 만듭니다.
7. 없는 라벨(disktype=nvme)을 요구해 Pending 에 멈추는 파드를 만듭니다.
8. 각 파드의 결과를 /root/kcna-sched/report.txt 에 장부로 남깁니다.

참고

단계 8개

  1. 작업 네임스페이스와 노드 지도 만들기
  2. 세 노드를 모두 예약 표시로 잠그기
  3. 갈 곳 없는 파드가 Pending 에 멈추다
  4. 예약 표시를 견디는 파드는 들어간다
  5. SSD 노드에만 앉히기
  6. 특정 존으로만 보내는 노드 어피니티
  7. 아무 노드도 만족하지 못하는 요구
  8. 무엇이 배치를 정했는지 장부로 남기기