4.9. Descheduler
4.9.1. Descheduler 개요 링크 복사링크가 클립보드에 복사되었습니다!
스케줄러는 새로운 포드를 호스팅하기에 가장 적합한 노드를 결정하는 데 사용되는 반면, 디스케줄러는 실행 중인 포드를 퇴출하여 해당 포드를 더 적합한 노드로 다시 스케줄링하는 데 사용될 수 있습니다.
4.9.1.1. Descheduler 정보 링크 복사링크가 클립보드에 복사되었습니다!
Descheduler를 사용하면 특정 전략에 따라 Pod를 제거하여 Pod를 더 적절한 노드에 다시 예약할 수 있습니다.
다음과 같은 상황에서 실행 중인 Pod의 일정을 조정하면 이점을 누릴 수 있습니다.
- 노드가 충분히 사용되지 않았거나 너무 많이 사용되었습니다.
- 오염 또는 라벨과 같은 Pod 및 노드 선호도 요구 사항이 변경되었으며, 원래 일정 결정이 더 이상 특정 노드에 적합하지 않습니다.
- 노드 장애로 Pod를 이동해야 합니다.
- 새 노드가 클러스터에 추가되었습니다.
- Pod가 너무 많이 재시작되었습니다.
Descheduler는 제거된 Pod의 교체를 예약하지 않습니다. 제거된 Pod에 대한 이러한 작업은 스케줄러에서 자동으로 수행합니다.
Descheduler가 노드에서 Pod를 제거하도록 결정하는 경우 다음과 같은 일반 메커니즘을 사용합니다.
-
openshift-*
및kube-system
네임스페이스의 Pod는 제거되지 않습니다. -
priorityClassName
이system-cluster-critical
또는system-node-critical
로 설정된 중요 Pod는 제거되지 않습니다. - 복제 컨트롤러, 복제본 세트, 배포 또는 작업에 포함되지 않는 정적, 미러링 또는 독립형 Pod는 다시 생성되지 않기 때문에 제거되지 않습니다.
- 데몬 세트와 연결된 Pod는 제거되지 않습니다.
- 로컬 스토리지가 있는 Pod는 제거되지 않습니다.
- 최상의 Pod가 버스트 가능 Pod 및 보장된 Pod보다 먼저 제거됩니다.
-
descheduler.alpha.kubernetes.io/evict
주석이 있는 모든 Pod 유형을 제거할 수 있습니다. 이 주석은 제거를 방지하는 검사를 덮어쓰는 데 사용되며 사용자는 제거할 Pod를 선택할 수 있습니다. 사용자는 Pod를 다시 생성하는 방법과 다시 생성되는지의 여부를 알아야 합니다. - PDB(Pod 중단 예산)가 적용되는 Pod는 일정 조정에서 해당 PDB를 위반하는 경우 제거되지 않습니다. Pod는 PDB를 처리하는 제거 하위 리소스를 사용하여 제거합니다.
4.9.1.2. Descheduler 프로필 링크 복사링크가 클립보드에 복사되었습니다!
다음 Descheduler 프로필을 사용할 수 있습니다.
AffinityAndTaints
이 프로필은 Pod 간 유사성 방지, 노드 유사성, 노드 테인트를 위반하는 Pod를 제거합니다.
다음과 같은 전략을 활성화합니다.
-
RemovePodsViolatingInterPodAntiAffinity
: Pod 간 유사성 방지를 위반하는 Pod를 제거합니다. -
RemovePodsViolatingNodeAffinity
: 노드 유사성을 위반하는 Pod를 제거합니다. RemovePodsViolatingNodeTaints
: 노드에서NoSchedule
테인트를 위반하는 Pod를 제거합니다.노드 유사성 유형이
requiredDuringSchedulingIgnoredDuringExecution
인 Pod가 제거됩니다.
-
TopologyAndDuplicates
이 프로필은 노드 간에 유사한 Pod 또는 동일한 토폴로지 도메인의 Pod를 균등하게 분배하기 위해 Pod를 제거합니다.
다음과 같은 전략을 활성화합니다.
-
RemovePodsViolatingTopologySpreadConstraint
:DoNotSchedule
제약 조건을 위반하는 경우 균형이 맞지 않는 토폴로지 도메인을 찾아 더 큰 도메인에서 Pod를 제거합니다. -
RemoveDuplicates
: 동일한 노드에서 실행 중인 복제본 세트, 복제 컨트롤러, 배포 또는 작업과 연결된 Pod가 하나뿐인지 확인합니다. Pod가 두 개 이상인 경우 클러스터에서 Pod를 더 잘 배포하기 위해 이러한 중복 Pod를 제거합니다.
주의다음 프로필 중 하나와 함께
TopologyAndDuplicates를
활성화하지 마세요:SoftTopologyAndDuplicates
또는CompactAndScale
. 이러한 프로필을 함께 활성화하면 충돌이 발생합니다.-
LifecycleAndUtilization
이 프로필은 장기 실행 Pod를 제거하고 노드 간 리소스 사용량의 균형을 조정합니다.
다음과 같은 전략을 활성화합니다.
RemovePodsHavingTooManyRestarts
: 컨테이너가 너무 많이 재시작된 Pod를 제거합니다.모든 컨테이너(Init 컨테이너 포함)의 재시작 합계가 100을 넘는 Pod입니다.
LowNodeUtilization
: 활용도가 낮은 노드를 찾고, Pod 재생성 시 Pod가 이처럼 활용도가 낮은 노드에 예약되도록 가능하면 과도하게 사용된 노드에서 Pod를 제거합니다.- 모든 임계값(CPU, 메모리, Pod 수)에서 사용량이 20% 미만인 경우 노드는 활용도가 낮은 것으로 간주됩니다.
- 모든 임계값(CPU, 메모리, Pod 수)에서 사용량이 50%를 초과하면 노드는 과도하게 사용되는 것으로 간주됩니다.
선택적으로, Technology Preview 필드
devLowNodeUtilizationThresholds를
다음 값 중 하나로 설정하여 활용도가 낮거나 과도해지게 하는 임계값 비율을 조정할 수 있습니다.낮음
은 10%/30%,보통은
20%/50%,높음
은 40%/70%입니다. 기본값은중간
입니다.PodLifeTime
: 너무 오래된 Pod를 제거합니다.기본적으로 24시간이 지난 포드는 제거됩니다. 포드 수명 값을 사용자 지정할 수 있습니다.
주의다음 프로필 중 하나와 함께
LifecycleAndUtilization을
활성화하지 마세요:LongLifecycle
또는CompactAndScale
. 이러한 프로필을 함께 활성화하면 충돌이 발생합니다.SoftTopologyAndDuplicates
이 프로필은
TopologyAndDuplicates
와 동일하지만whenUnsatisfiable: ScheduleAnyway
와 같은 소프트 토폴로지 제약 조건이 있는 포드도 추방 대상으로 고려됩니다.주의SoftTopologyAndDuplicates
와TopologyAndDuplicates를
둘 다 활성화하지 마세요. 두 가지 결과를 모두 활성화하면 충돌이 발생합니다.EvictPodsWithLocalStorage
- 이 프로필을 사용하면 로컬 스토리지가 있는 포드를 추방할 수 있습니다.
EvictPodsWithPVC
-
이 프로필을 사용하면 지속적인 볼륨 클레임이 있는 포드를 추방할 수 있습니다.
Kubernetes NFS Subdir External Provisioner를
사용하는 경우 프로비저너가 설치된 네임스페이스에 대한 제외 네임스페이스를 추가해야 합니다. CompactAndScale
이 프로필은
HighNodeUtilization
전략을 활성화하여 활용도가 낮은 노드에서 Pod를 제거하여 워크로드를 더 작은 노드 집합에서 실행할 수 있도록 합니다. 모든 임계값(CPU, 메모리, Pod 수)에서 사용량이 20% 미만인 경우 노드는 활용도가 낮은 것으로 간주됩니다.선택적으로, 기술 미리 보기 필드
devHighNodeUtilizationThresholds를
다음 값 중 하나로 설정하여 활용도가 낮은 비율을 조정할 수 있습니다. 10%의 경우Minimal
, 20%의 경우Modest
, 30%의 경우Moderate입니다
. 기본값은Modest
입니다.주의LifecycleAndUtilization
,LongLifecycle
또는TopologyAndDuplicates
프로필 중 하나를 사용하여CompactAndScale을
활성화하지 마세요. 이러한 프로필을 함께 활성화하면 충돌이 발생합니다.DevKubeVirtRelieveAndMigrate
이 프로필은
LongLifeCycle
프로필의 향상된 버전입니다.중요DevKubeVirtRelieveAndMigrate
프로필은 기술 미리 보기 기능에 불과합니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
DevKubeVirtRelieveAndMigrate
프로필은 비용이 많이 드는 노드에서 Pod를 제거하여 전체 리소스 비용을 줄이고 워크로드 마이그레이션을 활성화합니다. 또한 노드 전체에서 유사한 여유 용량을 유지하기 위해 작업 부하를 주기적으로 재분배하여 갑작스러운 작업 부하 급증을 보다 효과적으로 처리할 수 있도록 지원합니다. 노드는 다음과 같은 비용을 경험할 수 있습니다.
- 리소스 활용도 : 리소스 압력이 증가하면 애플리케이션을 실행하는 데 드는 오버헤드가 늘어납니다.
- 노드 유지관리 : 노드에 컨테이너가 많을수록 리소스 소모와 유지관리 비용이 증가합니다.
이 프로필은 EvictionsInBackground
알파 기능과 함께 LowNodeUtilization
전략을 활성화합니다. 프로필에는 다음과 같은 사용자 정의 필드도 표시됩니다.
-
devActualUtilizationProfile
: 부하 인식 스케줄링을 활성화합니다. -
devLowNodeUtilizationThresholds
:LowNodeUtilization
전략에 대한 실험적 임계값을 설정합니다. 이 필드는devDeviationThresholds
와 함께 사용하지 마세요. -
devDeviationThresholds
: 평균 이하의 리소스 사용량을 보이는 노드를 활용도가 낮은 것으로 처리하여 과도하게 활용된 노드의 작업 부하를 재분배하는 데 도움이 됩니다. 이 필드는devLowNodeUtilizationThresholds
와 함께 사용하지 마세요. 지원되는 값은 다음과 같습니다:낮음
(10%:10%),중간
(20%:20%),높음
(30%:30%),비대칭 낮음
(0%:10%),비대칭 중간
(0%:20%),비대칭 높음
(0%:30%). -
devEnableSoftTainter
: 소프트 테인팅 구성 요소가 스케줄링 힌트로 소프트 테인트를 동적으로 적용하거나 제거할 수 있도록 합니다.
설정 예
DevKubeVirtRelieveAndMigrate
프로필을 사용하려면 모든 작업자 노드에서 PSI 메트릭을 활성화해야 합니다. 다음 MachineConfig
사용자 정의 리소스(CR)를 적용하여 이를 활성화할 수 있습니다.
MachineConfig
CR 예제
이 프로필을 SoftTopologyAndDuplicates
프로필과 함께 사용하면 소프트 토폴로지 제약 조건에 따라 포드를 재조정할 수 있으며, 이는 호스팅된 제어 평면 환경에서 유용할 수 있습니다.
LongLifecycle
- 이 프로필은 노드 간 리소스 사용의 균형을 맞추고 다음과 같은 전략을 가능하게 합니다.
-
RemovePodsHavingTooManyRestarts
: 컨테이너가 너무 많이 재시작된 Pod와 모든 컨테이너(Init 컨테이너 포함)의 재시작 횟수의 합이 100을 넘는 Pod를 제거합니다. VM 게스트 운영 체제를 다시 시작해도 이 수는 늘어나지 않습니다. LowNodeUtilization
: 활용도가 낮은 노드가 있을 때 활용도가 높은 노드에서 포드를 제거합니다. 추방된 포드의 대상 노드는 스케줄러에 의해 결정됩니다.- 모든 임계값(CPU, 메모리, Pod 수)에서 사용량이 20% 미만인 경우 노드는 활용도가 낮은 것으로 간주됩니다.
- 모든 임계값(CPU, 메모리, Pod 수)에서 사용량이 50%를 초과하면 노드는 과도하게 사용되는 것으로 간주됩니다.
다음 프로필 중 하나를 사용하여 LongLifecycle을
활성화하지 마세요: LifecycleAndUtilization
또는 CompactAndScale
. 이러한 프로필을 함께 활성화하면 충돌이 발생합니다.
4.9.2. Kube Descheduler Operator 릴리스 노트 링크 복사링크가 클립보드에 복사되었습니다!
Kube Descheduler Operator를 사용하면 포드를 추방하여 더 적절한 노드에서 다시 예약할 수 있습니다.
이 릴리스 노트는 Kube Descheduler Operator의 개발 과정을 추적합니다.
자세한 내용은 descheduler 정보를 참조하세요.
4.9.2.1. Kube Descheduler Operator 5.2.0 릴리스 노트 링크 복사링크가 클립보드에 복사되었습니다!
발행일: 2025년 7월 9일
다음 권고 사항은 Kube Descheduler Operator 5.2.0에 대해 제공됩니다.
4.9.2.1.1. 새로운 기능 및 개선 사항 링크 복사링크가 클립보드에 복사되었습니다!
- Kube Descheduler Operator의 이 릴리스에서는 Kubernetes 버전이 1.32로 업데이트되었습니다.
4.9.2.1.2. 버그 수정 링크 복사링크가 클립보드에 복사되었습니다!
- Kube Descheduler Operator의 이번 릴리스에서는 여러 가지 일반적인 취약점과 노출(CVE)을 해결합니다.
4.9.3. Descheduler를 사용하여 Pod 제거 링크 복사링크가 클립보드에 복사되었습니다!
Kube Descheduler Operator를 설치하고 원하는 프로필과 기타 사용자 정의를 설정하여 OpenShift Container Platform에서 Descheduler를 실행할 수 있습니다.
4.9.3.1. Descheduler 설치 링크 복사링크가 클립보드에 복사되었습니다!
Descheduler는 기본적으로 사용할 수 없습니다. Descheduler를 활성화하려면 OperatorHub에서 Kube Descheduler Operator를 설치하고 Descheduler 프로필을 한 개 이상 활성화해야 합니다.
기본적으로 descheduler는 예측 모드에서 실행됩니다. 즉, Pod 추방만 시뮬레이션합니다. 디스케줄러가 포드 퇴거를 수행하려면 모드를 자동으로 변경해야 합니다.
클러스터에서 호스팅된 제어 평면을 활성화한 경우 사용자 지정 우선 순위 임계값을 설정하여 호스팅된 제어 평면 네임스페이스의 포드가 추방될 가능성을 낮춥니다. 호스팅된 제어 평면 우선 순위 클래스 중 가장 낮은 우선 순위 값( 100000000
)을 가지므로 우선 순위 임계값 클래스 이름을 hypershift-control-plane
으로 설정합니다.
사전 요구 사항
-
클러스터 관리자
역할이 있는 사용자로 OpenShift Container Platform에 로그인했습니다. - OpenShift Container Platform 웹 콘솔에 액세스합니다.
프로세스
- OpenShift Container Platform 웹 콘솔에 로그인합니다.
Kube Descheduler Operator에 필요한 네임스페이스를 생성합니다.
-
관리
네임스페이스로 이동하여 네임스페이스 생성을 클릭합니다. -
이름 필드에
openshift-kube-descheduler-operator를
입력하고, 레이블 필드에openshift.io/cluster-monitoring=true를
입력하여 descheduler 메트릭을 활성화한 다음 만들기를 클릭합니다.
-
관리
Kube Descheduler Operator를 설치합니다.
-
Operators
OperatorHub로 이동합니다. - 필터 박스에 Kube Descheduler Operator를 입력합니다.
- Kube Descheduler Operator를 선택하고 설치를 클릭합니다.
- Operator 설치 페이지에서 클러스터의 특정 네임스페이스를 선택합니다. 드롭다운 메뉴에서 openshift-kube-descheduler-operator를 선택합니다.
- 업데이트 채널 및 승인 전략 값을 원하는 값으로 조정합니다.
- 설치를 클릭합니다.
-
Operators
Descheduler 인스턴스를 생성합니다.
-
Operator
설치된 Operator 페이지에서 Kube Descheduler Operator를 클릭합니다. - Kube Descheduler 탭을 선택하고 KubeDescheduler 생성을 클릭합니다.
필요에 따라 설정을 편집하세요.
- 퇴거를 시뮬레이션하는 대신 포드를 퇴거하려면 모드 필드를 자동 으로 변경합니다.
-
Operator
4.9.3.2. Descheduler 프로필 구성 링크 복사링크가 클립보드에 복사되었습니다!
Descheduler에서 Pod를 제거하는 데 사용하는 프로필을 구성할 수 있습니다.
사전 요구 사항
-
클러스터 관리자
역할이 있는 사용자로 OpenShift Container Platform에 로그인했습니다.
프로세스
KubeDescheduler
오브젝트를 편집합니다.oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
$ oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow spec.profiles
섹션에 하나 이상의 프로필을 지정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 선택 사항: 기본적으로 descheduler는 Pod를 퇴장시키지 않습니다. 포드를 퇴장시키려면
모드를
자동
으로 설정하세요. - 2
- 선택 사항: descheduler 작업에 포함하거나 제외할 사용자 생성 네임스페이스 목록을 설정합니다. 제외할 네임스페이스 목록을 설정하려면
excluded를
사용하고, 포함할 네임스페이스 목록을 설정하려면included를
사용합니다. 보호된 네임스페이스(openshift-*
,kube-system
,hypershift
)는 기본적으로 제외됩니다. - 3
- 선택 사항:
LifecycleAndUtilization
프로필에 대해 사용자 정의 Pod 수명 값을 활성화합니다. 유효한 단위는s
,m
또는h
입니다. 기본 Pod 수명은 24시간입니다. - 4
- 선택 사항: 우선순위 임계값을 지정하여 우선순위가 지정된 수준보다 낮은 경우에만 포드를 퇴거 대상으로 고려합니다.
thresholdPriority
필드를 사용하여 숫자형 우선순위 임계값(예:10000
)을 설정하거나thresholdPriorityClassName
필드를 사용하여 특정 우선순위 클래스 이름(예:my-priority-class-name
)을 지정합니다. 우선순위 클래스 이름을 지정하는 경우 해당 이름이 이미 존재해야 하며, 그렇지 않으면 스케줄러에서 오류가 발생합니다.thresholdPriority
와thresholdPriorityClassName을
동시에 설정하지 마세요. - 5
- 선택 사항: 각 descheduler 실행 중에 제거할 최대 Pod 수를 설정합니다.
- 6
- 활성화할 프로필을 하나 이상 추가합니다. 사용 가능한 프로필:
AffinityAndTaints
,TopologyAndDuplicates
,LifecycleAndUtilization
,SoftTopologyAndDuplicates
,EvictPodsWithLocalStorage
,EvictPodsWithPVC
,CompactAndScale
,LongLifecycle
. 서로 충돌하는 프로필을 활성화하지 않도록 하세요.
여러 프로필을 활성화할 수 있으며 프로필을 지정하는 순서는 중요하지 않습니다.
- 파일을 저장하여 변경 사항을 적용합니다.
4.9.3.3. Descheduler 간격 구성 링크 복사링크가 클립보드에 복사되었습니다!
Descheduler 실행 간격을 구성할 수 있습니다. 기본값은 3600초(1시간)입니다.
사전 요구 사항
-
클러스터 관리자
역할이 있는 사용자로 OpenShift Container Platform에 로그인했습니다.
프로세스
KubeDescheduler
오브젝트를 편집합니다.oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
$ oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow deschedulingIntervalSeconds
필드를 원하는 값으로 업데이트합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Descheduler 실행 간격을 초 단위로 설정합니다. 이 필드 값이
0
이면 Descheduler가 한 번 실행되고 종료됩니다.
- 파일을 저장하여 변경 사항을 적용합니다.
4.9.4. Kube Descheduler Operator 제거 링크 복사링크가 클립보드에 복사되었습니다!
Operator를 제거하고 관련 리소스를 제거하면 OpenShift Container Platform에서 Kube Descheduler Operator를 제거할 수 있습니다.
4.9.4.1. Descheduler 설치 제거 링크 복사링크가 클립보드에 복사되었습니다!
Descheduler 인스턴스를 제거하고 Kube Descheduler Operator를 설치 제거하여 클러스터에서 Descheduler를 제거할 수 있습니다. 이 프로세스는 KubeDescheduler
CRD 및 openshift-kube-descheduler-operator
네임스페이스도 정리합니다.
사전 요구 사항
-
클러스터 관리자
역할이 있는 사용자로 OpenShift Container Platform에 로그인했습니다. - OpenShift Container Platform 웹 콘솔에 액세스합니다.
프로세스
- OpenShift Container Platform 웹 콘솔에 로그인합니다.
Descheduler 인스턴스를 삭제합니다.
-
Operator
설치된 Operator 페이지에서 Kube Descheduler Operator를 클릭합니다. - Kube Descheduler 탭을 선택합니다.
-
옵션 메뉴를 클릭하세요
클러스터 항목 옆에 있는 Delete KubeDescheduler를 선택합니다.
- 확인 대화 상자에서 삭제를 클릭합니다.
-
Operator
Kube Descheduler Operator를 설치 제거합니다.
-
Operators
설치된 Operator로 이동합니다. -
옵션 메뉴를 클릭하세요
Kube Descheduler Operator 항목 옆에 있는 'Uninstall Operator'를 선택합니다.
- 확인 대화 상자에서 설치 제거를 클릭합니다.
-
Operators
openshift-kube-descheduler-operator
네임스페이스를 삭제합니다.-
관리
네임스페이스로 이동합니다. -
필터 박스에
openshift-kube-descheduler-operator
를 입력합니다. -
옵션 메뉴를 클릭하세요
openshift-kube-descheduler-operator 항목 옆에 있는 네임스페이스 삭제를 선택합니다.
-
확인 대화 상자에서
openshift-kube-descheduler-operator
를 입력하고 삭제를 클릭합니다.
-
관리
KubeDescheduler
CRD를 삭제합니다.-
Administration
Custom Resource Definitions로 이동합니다. -
필터 박스에
KubeDescheduler
를 입력합니다. -
옵션 메뉴를 클릭하세요
KubeDescheduler 항목 옆에 있는 Delete CustomResourceDefinition을 선택합니다.
- 확인 대화 상자에서 삭제를 클릭합니다.
-
Administration