반응형
Kubernetes의 Node Scheduling은 클러스터에서 Pod가 실행될 적절한 Node를 선택하는 과정입니다. Kubernetes Scheduler가 이를 담당하며, 특정 Pod가 실행될 Node를 결정하기 위해 다양한 조건과 제약을 고려합니다.
Node Scheduling의 주요 과정
- Scheduling 후보 Node 필터링 (Filtering)
- Scheduler는 클러스터 내에서 실행 가능한 Node를 찾기 위해 필터링 과정을 수행합니다.
- 예를 들어, 다음 조건에 맞지 않는 Node는 제외됩니다:
- Node가 충분한 리소스(CPU, 메모리 등)를 가지고 있는지.
- Pod의 nodeSelector, nodeAffinity, 또는 taints에 맞는 Node인지.
- Node 상태가 Ready인지.
- 적합한 Node 중에서 최적의 Node 선택 (Scoring)
- 필터링 과정을 통과한 Node들에 점수를 매기고 최적의 Node를 선택합니다.
- 점수는 다음 기준으로 계산됩니다:
- Node의 리소스 사용률 (자원이 덜 사용된 Node가 선호됨).
- Pod의 preferredDuringSchedulingIgnoredDuringExecution affinity.
- 기타 사용자 정의 스케줄링 로직.
- Pod Binding
- 최종적으로 선택된 Node에 Pod가 바인딩되어 실행됩니다.
주요 요소 및 설정
- Node Affinity 및 Anti-Affinity
- 특정 Node에서 실행되도록 제어하거나, 특정 Node를 피하도록 설정할 수 있습니다.
- requiredDuringSchedulingIgnoredDuringExecution: 필수 조건으로 스케줄링.
- preferredDuringSchedulingIgnoredDuringExecution: 우선적으로 고려되지만 필수는 아님.
- Taints and Tolerations
- Node에 Taints를 설정해 특정 Pod만 스케줄링될 수 있도록 제한합니다.
- Pod는 Tolerations를 설정하여 해당 Taint를 무시할 수 있습니다.
- Node Selector
- 간단한 방법으로 Pod가 특정 Node에 스케줄링되도록 지정합니다.
- 예: nodeSelector: {"disktype": "ssd"}.
- Custom Scheduler
- 기본 스케줄러 대신 사용자 정의 스케줄러를 구현할 수 있습니다.
- Pod 스펙에서 schedulerName을 설정해 특정 스케줄러를 지정합니다.
스케줄링 동작 확인
- 명령어로 스케줄링 결과를 확인할 수 있습니다.
kubectl get pods -o wide
예시: Node Affinity 설정
apiVersion: v1
kind: Pod
metadata:
name: nginx-affinity
spec:
containers:
- name: nginx
image: nginx
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values:
- ssd
- 위 설정은 disktype=ssd 레이블이 있는 Node에서만 Pod가 실행되도록 보장합니다.
Node Scheduling을 적절히 활용하면 클러스터의 리소스를 최적화하고, 특정 워크로드 요구 사항을 충족할 수 있습니다.
레이블과 Node 이름 방식의 차이
- nodeSelector (레이블 방식):
- 더 유연하며 Node 이름 외에도 다른 조건을 추가할 수 있음.
- Node가 변경될 경우 레이블만 수정하면 됨.
- nodeName (직접 지정 방식):
- 강제적으로 특정 Node에서 실행.
- Node 이름이 변경되면 설정을 수정해야 함.
반응형
'K8S' 카테고리의 다른 글
[kubernetes] IPVS에 대해 알아보자! (0) | 2024.12.21 |
---|---|
[kubenetes] Probe 에 대해 알아보자 (0) | 2024.12.20 |
Kubernetes의 플랫 네트워크 (0) | 2024.12.16 |
pause container가 먼저 실행되는 이유가 뭘까나? (0) | 2024.12.16 |
[k8s] liveness probe, readiness probe, startup probe (0) | 2024.12.15 |
댓글