Scheduling-Configuring Scheduler Profiles

2025. 1. 1. 00:39쿠버네티스/쿠버네티스

728x90
반응형

1. Kubernetes 기본 스케줄러 동작 방식

Kubernetes의 기본 스케줄러는 Pod를 클러스터 내 노드에 배치하는 역할을 합니다. 이 과정은 다음과 같은 단계로 이루어집니다:

  1. 스케줄링 큐(Scheduling Queue):
    • 새로 생성된 Pod는 스케줄링 큐에 추가됩니다.
    • 큐는 Pod의 **우선순위(Priority)**에 따라 정렬됩니다.
    • 우선순위는 "PriorityClass"를 통해 설정하며, 높은 값일수록 우선순위가 높습니다.
  2. 필터링 단계(Filter Phase):
    • Pod의 요구사항(예: CPU, 메모리)에 맞지 않는 노드는 필터링됩니다.
    • 예: NodeResourcesFit 플러그인은 노드의 자원이 Pod 요구사항을 충족하지 못하면 해당 노드를 제외합니다.
  3. 점수 매기기 단계(Scoring Phase):
    • 남은 자원량, 이미지 로컬리티 등 다양한 기준으로 각 노드에 점수를 부여합니다.
    • 점수가 가장 높은 노드가 선택됩니다.
  4. 바인딩 단계(Binding Phase):
    • 선택된 노드에 Pod가 바인딩됩니다.

2. 스케줄링 플러그인과 확장 포인트

Kubernetes는 스케줄링 과정을 플러그인을 통해 확장할 수 있습니다. 주요 플러그인과 확장 포인트는 다음과 같습니다:

  • 큐 정렬(Queue Sort):
    • PrioritySort 플러그인이 사용됩니다.
  • 필터(Filter):
    • NodeResourcesFit, NodeUnschedulable 등 여러 플러그인이 사용됩니다.
  • 점수 매기기(Score):
    • NodeResourcesFit, ImageLocality 등이 점수를 부여합니다.
  • 바인딩(Bind):
    • DefaultBinder 플러그인이 사용됩니다.

추가적으로, 사전/사후 확장 포인트(PreFilter, PostFilter, PreScore, PostScore 등)를 활용해 커스텀 로직을 삽입할 수 있습니다.

3. 다중 스케줄러 배포

(1) 다중 스케줄러란?

  • Kubernetes 클러스터에서 기본 스케줄러 외에도 추가적인 스케줄러를 배포할 수 있습니다.
  • 특정 애플리케이션이 특별한 조건으로 Pod를 배치해야 할 경우, 커스텀 스케줄러를 작성하여 사용할 수 있습니다.

(2) 배포 방법

  1. Pod로 배포:
    • 커스텀 스케줄러를 Pod로 실행합니다.
    • 예제 YAML 파일:
apiVersion: v1
kind: Pod
metadata:
  name: custom-scheduler
  namespace: kube-system
spec:
  containers:
  - name: kube-scheduler
    image: registry.k8s.io/kube-scheduler:v1.27.0
    command:
    - /usr/local/bin/kube-scheduler
    - --config=/etc/kubernetes/my-scheduler-config.yaml
    volumeMounts:
    - name: config-volume
      mountPath: /etc/kubernetes/
  volumes:
  - name: config-volume
    configMap:
      name: my-scheduler-config

Deployment로 배포:

  • 고가용성을 위해 Deployment 리소스를 사용해 여러 복사본을 실행할 수 있습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: custom-scheduler-deployment
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      component: custom-scheduler
  template:
    metadata:
      labels:
        component: custom-scheduler
    spec:
      containers:
      - name: kube-scheduler
        image: registry.k8s.io/kube-scheduler:v1.27.0
        command:
        - /usr/local/bin/kube-scheduler
        - --config=/etc/kubernetes/my-scheduler-config.yaml
        volumeMounts:
        - name: config-volume
          mountPath: /etc/kubernetes/
      volumes:
      - name: config-volume
        configMap:
          name: my-scheduler-config

ConfigMap 활용:

  • 커스텀 스케줄러 설정 파일(my-scheduler-config.yaml)을 ConfigMap으로 생성하고 이를 볼륨으로 마운트하여 사용합니다.
kubectl create configmap my-scheduler-config --from-file=/root/my-scheduler-config.yaml -n kube-system

 

 

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-scheduling/scheduling_code_hierarchy_overview.md

 

community/contributors/devel/sig-scheduling/scheduling_code_hierarchy_overview.md at master · kubernetes/community

Kubernetes community content. Contribute to kubernetes/community development by creating an account on GitHub.

github.com

https://kubernetes.io/blog/2017/03/advanced-scheduling-in-kubernetes/

 

Advanced Scheduling in Kubernetes

Editor’s note: this post is part of a series of in-depth articles on what's new in Kubernetes 1.6 The Kubernetes scheduler’s default behavior works well for most cases -- for example, it ensures that pods are only placed on nodes that have sufficient f

kubernetes.io

https://jvns.ca/blog/2017/07/27/how-does-the-kubernetes-scheduler-work/

 

How does the Kubernetes scheduler work?

How does the Kubernetes scheduler work? July 27, 2017 Hello! We talked about Kubernetes’ overall architecture a while back. This week I learned a few more things about how the Kubernetes scheduler works so I wanted to share! This kind of gets into the we

jvns.ca

https://stackoverflow.com/questions/28857993/how-does-kubernetes-scheduler-work

 

How does Kubernetes' scheduler work?

How does Kubernetes' scheduler work? What I mean is that Kubernetes' scheduler appears to be very simple? My initial thought is that this scheduler is just a simple admission control system, not a...

stackoverflow.com

 

반응형

'쿠버네티스 > 쿠버네티스' 카테고리의 다른 글