이 글은 <Certificated Kubernetes Administrator (CKA) with Practice Test, Mumshad Mannambeth, Kode Kloud Training> 섹션 3. Scheduling을 참고하여 작성하였습니다.
Section 3. Scheduling - (10) Configuring Scheduler Profiles
이번 글에서는 쿠버네티스 스케줄러를 어떻게 설정하는 지에 대해서 알아보겠습니다.
스케줄링 기본 개념
쿠버네티스에서 스케줄링은 포드를 클러스터 내의 적절한 노드에 배치하는 과정입니다. 이 때, 스케줄러는 주어진 조건에 따라 각 노드의 자원을 평가하고 포드를 배치할 노드를 선택합니다.
스케줄링 프로세스
스케줄러는 우선순위 부여, 필터링, 점수 매기기, 바인딩의 4단계로 구성된 스케줄링 프로세스를 거칩니다.
- 우선순위 부여: 포드를 우선순위 큐에 넣어줍니다. 우선순위 큐에서 Pod를 하나씩 추출해 스케줄링을 해나갈 예정입니다.
- 필터링: 1.에서 뽑힌 Pod가 실행될 수 없는 노드를 걸러냅니다. 예를 들어, 자원이 부족한 노드는 필터링됩니다.
- 점수 매기기: 필터링을 통과한 노드들에 대해서 자원 사용 가능성을 기준으로 점수를 매깁니다.
- 바인딩: 점수가 가장 높은 노드에 포드를 배치합니다.
스케줄링 Extension Points
각 스케줄링 단계에는 Extension Point라는 확장 지점이 존재하며, 이를 통해 다양한 플러그인을 연결하고 커스터마이징 할 수 있습니다. 사용자는 하나 이상의 Extension Point를 구현하여 원하는 스케줄링 동작을 추가하거나 변경할 수 있으며, 이를 통해 특정 플러그인들이 스케줄링 과정에서 실행되도록 설정할 수 있습니다. 아래는 플러그인을 추가/제거할 수 있는 Extension Point 목록입니다.
queueSort: 이 플러그인은 스케줄링 대기열에서 보류 중인 파드를 정렬하는 데 사용되는 정렬 기능을 제공한다. 대기열 정렬 플러그인은 한 번에 단 하나만 활성화될 수 있다. 사용할 수 있다.
preFilter: 이 플러그인은 필터링하기 전에 파드 또는 클러스터에 대한 정보를 사전 처리하거나 확인하는 데 사용된다. 이 플러그인은 파드를 unschedulable로 표시할 수 있다.
filter: 이 플러그인은 스케줄링 정책의 단정(Predicates)과 동일하며 파드를 실행할 수 없는 노드를 필터링하는 데 사용된다. 필터는 구성된 순서대로 호출된다. 노드가 모든 필터를 통과하지 않으면 파드는 unschedulable로 표시된다.
postFilter: 이 플러그인은 파드의 실행 가능한 노드를 찾을 수 없을 때, 구성된 순서대로 호출된다. postFilter 플러그인이 파드 schedulable을 표시하는 경우, 나머지 플러그인은 호출되지 않는다.
preScore: 이것은 사전 스코어링 작업을 수행하는 데 사용할 수 있는 정보성 익스텐션 포인트이다.score: 이 플러그인은 필터링 단계를 통과한 각 노드에 점수를 제공한다. 그런 다음 스케줄러는 가중치 합계가 가장 높은 노드를 선택한다.
reserve: 지정된 파드에 리소스가 예약된 경우 플러그인에 알리는 정보성 익스텐션 포인트이다. 플러그인은 또한 Reserve 도중 또는 이후에 실패한 경우 호출되는 Unreserve 호출을 구현한다.
permit: 이 플러그인은 파드 바인딩을 방지하거나 지연시킬 수 있다.
preBind: 이 플러그인은 파드가 바인딩되기 전에 필요한 모든 작업을 수행한다.
bind: 플러그인은 파드를 노드에 바인딩한다. bind 플러그인은 순서대로 호출되며 일단 바인딩이 완료되면 나머지 플러그인은 건너뛴다. bind 플러그인은 적어도 하나 이상 필요하다.
postBind: 파드가 바인드된 후 호출되는 정보성 익스텐션 포인트이다.
multiPoint: 이 필드는 플러그인들의 모든 적용 가능한 익스텐션 포인트에 대해 플러그인들을 동시에 활성화하거나 비활성화할 수 있게 하는 환경 설정 전용 필드이다.
참고: kubernetes.io
Scheduling Plugin 설정한 예시
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: my-scheduler-1
plugins:
filter:
enabled:
- name: NodeResourcesFit
score:
disabled:
- name: ImageLocality
- schedulerName: my-scheduler-2
plugins:
filter:
enabled:
- name: TaintToleration
score:
enabled:
- name: NodeAffinity