2024. 12. 31. 17:04ㆍ쿠버네티스/쿠버네티스
1. 기본 스케줄러와 커스텀 스케줄러
Kubernetes는 기본적으로 **기본 스케줄러(default scheduler)**를 사용하여 Pod를 클러스터 내의 노드에 배치합니다. 기본 스케줄러는 다음과 같은 조건을 고려하여 Pod를 배치합니다:
- 노드의 자원 상태
- Taint와 Toleration
- Node Affinity 등
하지만 특정 애플리케이션에 대해 더 복잡한 조건이나 사용자 정의 로직이 필요한 경우, 커스텀 스케줄러를 작성하고 Kubernetes 클러스터에 추가로 배포할 수 있습니다. 이를 통해 클러스터 내에서 여러 스케줄러를 동시에 사용할 수 있습니다.
2. 커스텀 스케줄러의 배포 방법
(1) 바이너리를 사용한 배포
- Kubernetes의 kube-scheduler 바이너리를 다운로드하여 실행합니다.
- 각 스케줄러는 고유한 이름을 가져야 하며, 이를 설정하기 위해 별도의 구성 파일을 사용합니다.
- 예제:
kube-scheduler --config=/path/to/custom-config.yaml
(2) Pod로 배포
커스텀 스케줄러를 Pod로 실행하려면 다음 단계를 따릅니다:
- Pod 정의 파일 작성:
- scheduler.conf 파일 경로와 인증 정보를 포함합니다.
- 예제:
apiVersion: v1
kind: Pod
metadata:
name: custom-scheduler
namespace: kube-system
spec:
containers:
- name: kube-scheduler
image: k8s.gcr.io/kube-scheduler:v1.27.0
command:
- kube-scheduler
- --config=/etc/kubernetes/scheduler.conf
volumeMounts:
- name: config-volume
mountPath: /etc/kubernetes/
volumes:
- name: config-volume
hostPath:
path: /etc/kubernetes/
(3) Deployment로 배포
Pod 대신 Deployment 리소스를 사용하여 고가용성을 제공할 수 있습니다:
- Deployment 정의 파일 작성:
- ConfigMap을 사용해 설정 파일을 관리하고, 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: k8s.gcr.io/kube-scheduler:v1.27.0
command:
- kube-scheduler
- --config=/etc/kubernetes/scheduler.conf
volumeMounts:
- name: config-volume
mountPath: /etc/kubernetes/
volumes:
- name: config-volume
configMap:
name: custom-scheduler-config
ConfigMap 생성:
kubectl create configmap custom-scheduler-config --from-file=scheduler.conf -n kube-system
Deployment 생성:
kubectl apply -f custom-scheduler-deployment.yaml
Deployment 확인:
kubectl get deployments -n kube-system
커스텀 스케줄러 사용 설정
Pod 또는 Deployment가 커스텀 스케줄러를 사용하도록 하려면, Pod 정의 파일에 schedulerName 필드를 추가해야 합니다:
apiVersion: v1
kind: Pod
metadata:
name: my-app-pod
spec:
schedulerName: custom-scheduler # 커스텀 스케줄러 이름 지정
containers:
- name: my-app-container
image: my-app-image:v1.0.0
kubectl get events --namespace=<namespace> -o wide | grep Scheduled
고가용성(HA) 설정
- 고가용성을 위해 여러 복사본의 동일한 스케줄러를 실행할 경우, leader-elect 옵션을 활성화해야 합니다.
- leader-elect 옵션은 여러 스케줄러 중 하나만 활성 상태로 작동하도록 보장합니다.
Let's create a configmap that the new scheduler will employ using the concept of ConfigMap as a volume.
We have already given a configMap definition file called my-scheduler-configmap.yaml at /root/ path that will create a configmap with name my-scheduler-config using the content of file /root/my-scheduler-config.yaml.
- kubectl create configmap my-scheduler-config --from-file=/root/my-scheduler-config.yaml -n kube-system
A POD definition file is given. Use it to create a POD with the new custom scheduler.
File is located at /root/nginx-pod.yaml

'쿠버네티스 > 쿠버네티스' 카테고리의 다른 글
Secrets test/Encrypting Confidential Data at Rest (0) | 2025.01.09 |
---|---|
Scheduling-Configuring Scheduler Profiles (1) | 2025.01.01 |
Scheduling-Static Pods (0) | 2024.12.31 |
Scheduling-DaemonSets (0) | 2024.12.31 |
Scheduling-Resource Requirements and Limits (0) | 2024.12.31 |