3.11. Descheduler를 사용하여 Pod 제거
스케줄러 는 새 Pod를 호스팅하는 데 가장 적합한 노드를 결정하는 데 사용되지만 Descheduler를 사용하여 더 적합한 노드에 Pod를 다시 예약할 수 있도록 실행 중인 Pod를 제거할 수 있습니다.
3.11.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를 처리하는 제거 하위 리소스를 사용하여 제거합니다.
3.11.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를 제거합니다.
-
LifecycleAndUtilization
이 프로필은 장기 실행 Pod를 제거하고 노드 간 리소스 사용량의 균형을 조정합니다.
다음과 같은 전략을 활성화합니다.
RemovePods authenticateTooManyRestarts
: 컨테이너가 너무 여러 번 다시 시작 된 Pod를 제거합니다.모든 컨테이너에서 재시작하는 합계(Init Containers 포함)가 100보다 많습니다.
LowNodeUtilization
: 활용도가 낮은 노드를 찾고, Pod 재생성 시 Pod가 이처럼 활용도가 낮은 노드에 예약되도록 가능하면 과도하게 사용된 노드에서 Pod를 제거합니다.모든 임계값(CPU, 메모리, Pod 수)에서 사용량이 20% 미만인 경우 노드는 활용도가 낮은 것으로 간주됩니다.
모든 임계값(CPU, 메모리, Pod 수)에서 사용량이 50%를 초과하면 노드는 과도하게 사용되는 것으로 간주됩니다.
PodLifeTime
: 너무 오래된 Pod를 제거합니다.기본적으로 24시간이 지난 Pod는 제거됩니다. Pod 수명 값을 사용자 지정할 수 있습니다.
SoftTopologyAndDuplicates
이 프로필은
TopologyAndDuplicates
와 동일합니다. 단,whenUnsatisfiable: ScheduleAnyway
와 같은 소프트 토폴로지 제약 조건이 있는 Pod도 제거 대상으로 간주됩니다.참고soft
TopologyAndDuplicates 및
를 둘 다 활성화하지 마십시오. 두 가지를 모두 활성화하면 충돌이 발생합니다.TopologyAndDuplicates
EvictPodsWithLocalStorage
- 이 프로필을 사용하면 로컬 스토리지가 있는 Pod를 제거할 수 있습니다.
EvictPodsWithPVC
- 이 프로필을 사용하면 영구 볼륨 클레임이 있는 Pod를 제거할 수 있습니다.
3.11.3. Descheduler 설치
Descheduler는 기본적으로 사용할 수 없습니다. Descheduler를 활성화하려면 OperatorHub에서 Kube Descheduler Operator를 설치하고 Descheduler 프로필을 한 개 이상 활성화해야 합니다.
사전 요구 사항
- 클러스터 관리자 권한이 있어야 합니다.
- OpenShift Container Platform 웹 콘솔에 액세스합니다.
프로세스
- OpenShift Container Platform 웹 콘솔에 로그인합니다.
Kube Descheduler Operator에 필요한 네임스페이스를 생성합니다.
-
관리
네임스페이스로 이동하여 네임스페이스 생성을 클릭합니다. -
이름 필드에
openshift-kube-descheduler-operator
를 입력하고 Labels (레이블) 필드에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 생성을 클릭합니다.
필요에 따라 설정을 편집합니다.
Profiles(프로필 ) 섹션을 확장하여 활성화할 하나 이상의 프로필을 선택합니다.
AffinityAndTaints
프로필은 기본적으로 활성화되어 있습니다. Add Profile (프로필 추가)을 클릭하여 추가 프로필을 선택합니다.참고TopologyAndDuplicates 및 soft
를 둘 다 활성화하지 마십시오. 두 가지를 모두 활성화하면 충돌이 발생합니다.TopologyAndDuplicates
-
선택 사항: 프로필 사용자 지정 섹션 을 확장하여
LifecycleAndUtilization
프로필에 대한 사용자 지정 Pod 수명 값을 설정합니다. 유효한 단위는s
,m
또는h
입니다. 기본 포드 수명은 24시간입니다. -
선택 사항: Descheduling Interval Seconds(스케줄링 간격 초 ) 필드를 사용하여 Descheduler 실행 간격(초)을 변경합니다. 기본값은
3600
초입니다.
- 생성을 클릭합니다.
-
Operator
나중에 OpenShift CLI(oc)를 사용하여 Descheduler에 대한 프로필 및 설정을 구성할 수도있습니다
. 웹 콘솔에서 Descheduler 인스턴스를 생성할 때 프로필을 조정하지 않은 경우 기본적으로 AffinityAndTaints
프로필이 활성화됩니다.
3.11.4. Descheduler 프로필 구성
Descheduler에서 Pod를 제거하는 데 사용하는 프로필을 구성할 수 있습니다.
사전 요구 사항
- 클러스터 관리자 권한
프로세스
KubeDescheduler
오브젝트를 편집합니다.$ oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
spec.profiles
섹션에 하나 이상의 프로필을 지정합니다.apiVersion: operator.openshift.io/v1 kind: KubeDescheduler metadata: name: cluster namespace: openshift-kube-descheduler-operator spec: deschedulingIntervalSeconds: 3600 logLevel: Normal managementState: Managed operatorLogLevel: Normal profileCustomizations: podLifetime: 48h 1 profiles: 2 - AffinityAndTaints - TopologyAndDuplicates 3 - LifecycleAndUtilization - EvictPodsWithLocalStorage - EvictPodsWithPVC
- 1
- 선택 사항:
LifecycleAndUtilization
프로필에 대해 사용자 정의 Pod 수명 값을 활성화합니다. 유효한 단위는s
,m
또는h
입니다. 기본 포드 수명은 24시간입니다. - 2
- 활성화할 하나 이상의 프로필을 추가합니다. 사용 가능한 프로필:
AffinityAndTaints
,TopologyAndDuplicates
,LifecycleAndUtilization
, softTopologyAndDuplicates
,EvictPodsWithLocalStorage
, 및EvictPodsWithPVC
. - 3
TopologyAndDuplicates 및 soft
를 둘 다 활성화하지 마십시오. 두 가지를 모두 활성화하면 충돌이 발생합니다.TopologyAndDuplicates
여러 프로필을 활성화할 수 있으며 프로필을 지정하는 순서는 중요하지 않습니다.
- 파일을 저장하여 변경 사항을 적용합니다.
3.11.5. Descheduler 간격 구성
Descheduler 실행 간격을 구성할 수 있습니다. 기본값은 3600초(1시간)입니다.
사전 요구 사항
- 클러스터 관리자 권한
프로세스
KubeDescheduler
오브젝트를 편집합니다.$ oc edit kubedeschedulers.operator.openshift.io cluster -n openshift-kube-descheduler-operator
deschedulingIntervalSeconds
필드를 원하는 값으로 업데이트합니다.apiVersion: operator.openshift.io/v1 kind: KubeDescheduler metadata: name: cluster namespace: openshift-kube-descheduler-operator spec: deschedulingIntervalSeconds: 3600 1 ...
- 1
- Descheduler 실행 간격을 초 단위로 설정합니다. 이 필드 값이
0
이면 Descheduler가 한 번 실행되고 종료됩니다.
- 파일을 저장하여 변경 사항을 적용합니다.
3.11.6. Descheduler 설치 제거
Descheduler 인스턴스를 제거하고 Kube Descheduler Operator를 설치 제거하여 클러스터에서 Descheduler를 제거할 수 있습니다. 이 프로세스는 KubeDescheduler
CRD 및 openshift-kube-descheduler-operator
네임스페이스도 정리합니다.
사전 요구 사항
- 클러스터 관리자 권한이 있어야 합니다.
- OpenShift Container Platform 웹 콘솔에 액세스합니다.
프로세스
- OpenShift Container Platform 웹 콘솔에 로그인합니다.
Descheduler 인스턴스를 삭제합니다.
-
Operator
설치된 Operator 페이지에서 Kube Descheduler Operator를 클릭합니다. - Kube Descheduler 탭을 선택합니다.
- 클러스터 항목 옆에 있는 옵션 메뉴 를 클릭하고 KubeDescheduler 삭제 를 선택합니다.
- 확인 대화 상자에서 삭제를 클릭합니다.
-
Operator
Kube Descheduler Operator를 설치 제거합니다.
-
Operators
설치된 Operators로 이동합니다. - Kube Descheduler Operator 옆에 있는 옵션 메뉴 를 클릭하고 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 항목 옆에 있는 옵션 메뉴 를 클릭하고 CustomResourceDefinition 삭제 를 선택합니다.
- 확인 대화 상자에서 삭제를 클릭합니다.
-
Administration