- NodeSelector
- Affinity and Anti-affinity
- Pod Overhead
- 파드 스케줄링 준비성(Readiness) ← 오늘 볼 내용
- 파드 토폴로지 분배 제약 조건
- Taints and Tolerations
- cordon and drain
4. 파드 스케줄링 준비성(Readiness)
https://kubernetes.io/docs/concepts/scheduling-eviction/pod-scheduling-readiness/
파드는 생성되면 스케줄링 될 준비가 된 것으로 간주된다.
쿠버네티스 스케줄러는 모든 Pending 중인 파드를 배치할 노드를 찾기 위한 철저한 조사 과정을 수행한다.
그러나 일부 파드는 오랜 기간 동안 "필수 리소스 누락" 상태에 머물 수 있다.
이러한 파드는 실제로 스케줄러(그리고 클러스터 오토스케일러와 같은 다운스트림 통합자) 불필요한 방식으로 작동하게 만들 수 있다.
파드의 .spec.schedulingGates를 지정하거나 제거함으로써, 파드가 스케줄링 될 준비가 되는 시기를 제어할 수 있다.
파드 스케줄링게이트(SchedulingGates)
스케줄링게이트(schedulingGates) 필드는 문자열 목록을 포함하며, 각 문자열 리터럴은 파드가 스케줄링 가능한 것으로 간주되기 전에 충족해야 하는 기준으로 인식된다.
이 필드는 파드가 생성될 때만 초기화할 수 있다(클라이언트에 의해 생성되거나, 어드미션 중에 변경될 때).
생성 후 각 스케줄링게이트는 임의의 순서로 제거될 수 있지만, 새로운 스케줄링게이트의 추가는 허용되지 않는다.
# pod-with-scheduling-gates.yaml
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
schedulingGates:
- name: example.com/foo
- name: example.com/bar
containers:
- name: pause
image: registry.k8s.io/pause:3.6
다음 명령을 실행해서 설정한 schedulingGates 필드의 내용을 볼 수 있다.
kubectl get pod test-pod -o jsonpath='{.spec.schedulingGates}'
스케줄링될 준비가 되었다는 것을 스케줄러에게 알리기 위 edit 명령을 통해 파드의 설정 중 스케줄링게이트 라인을 제거한다.
apply -f 로 생성했다면 매니페스트 파일(yaml 파일)의 내용 중 스케줄링게이트 라인을 지우고 다시 apply 하면 된다.
kubectl edit pod test-pod
하이라이트된 세 줄을 제거한다.
스케줄링게이트가 사라졌는지 확인하려면 다음 명령어를 한번 더 실행하여 확인한다.
제거가 되었다면 아무런 출력도 나오지 않을 것이다.
kubectl get pod test-pod -o jsonpath='{.spec.schedulingGates}'
다시 파드의 스케줄링 상태를 보면 다음과 같다.
kubectl get pods -o wide
스케줄링게이트가 설정되어 있는 경우 파드의 모든 스케줄링게이트 라인이 없어져야 파드는 스케줄된다.
파드가 생성되면서 스케줄링게이트를 통해 스케줄 될 준비가 되지 않았음을 스케줄러에게 알리면 스케줄 대상에서 제외하며 무시한다.
모종의 이유로 스케줄되지 못하고 대기 상태에 빠지게 되면 시스템에 부하가 발생하게 되고 스케줄러의 성능에 영향을 미치게 된다.
이와 같은 상황에서 스케줄링게이트를 사용하면 스케줄러는 불필요한 스케줄링을 줄이고 스케줄링 성능을 향상시킬 수 있다.
이와 같이 파드의 스케줄 시기를 제어하는 것이 가능하다.
스케줄링을 시도했지만 스케줄링할 수 없다고 클레임되거나 스케줄링할 준비가 되지 않은 것으로 명시적으로 표시된 파드를 구분하기 위해 scheduler_pending_pods 메트릭은 ”gated"라는 새로운 레이블과 함께 제공된다.
scheduler_pending_pods{queue="gated"}를 사용하여 메트릭 결과를 확인할 수 있다.
'Kubernetes' 카테고리의 다른 글
Kubernetes 기초 - Scheduling(5) (0) | 2024.01.09 |
---|---|
Kubenets 기초 - Scheduling(4) (0) | 2024.01.06 |
Kubernetes 기초 - Scheduling(2) (0) | 2024.01.04 |
Pod Affinity - topologyKey 상세 동작 (0) | 2024.01.03 |
Kubernetes 기초 - Scheduling(1) (0) | 2024.01.03 |