2.6. Pod 중단 없이 Pod 리소스 수준 조정
인플레이스 Pod 크기 조정을 사용하여 Pod를 다시 생성하거나 재시작하지 않고 컨테이너에 할당된 CPU 또는 메모리 리소스 요청 및 제한을 변경할 수 있습니다.
2.6.1. 인플레이스 Pod 크기 조정 정보 링크 복사링크가 클립보드에 복사되었습니다!
인플레이스 Pod 크기 조정을 사용하면 애플리케이션 중단 없이 실행 중인 Pod 내의 컨테이너의 CPU 및 메모리 리소스를 변경할 수 있습니다. Pod CPU 및 메모리 리소스를 변경하는 표준 방법으로 인해 Pod가 다시 생성되어 중단될 수 있습니다. 인플레이스 Pod 크기 조정을 사용하면 Pod 재시작과 관련된 다운타임 또는 상태 손실에 영향을 미치지 않고 Pod 리소스를 확장하거나 축소할 수 있습니다.
인플레이스 Pod 크기 조정을 사용하여 CPU 또는 메모리 리소스를 변경하는 경우 Pod 사양에 크기 조정 정책을 구성하여 Pod를 재시작할지 여부를 제어할 수 있습니다. 다음 예제 크기 조정 정책에서는 메모리 리소스를 변경할 때 Pod를 재시작해야 하지만 CPU 리소스 변경을 다시 시작할 수 없습니다.
리소스 정책의 예
- 1
- 크기 조정 정책을 지정합니다.
메모리에 대한 크기 조정 정책이 RestartContainer
인 경우 메모리
제한을 줄일 수 없습니다.
기존 Pod에 크기 조정 정책을 추가하거나 수정할 수는 없지만 Pod에 소유자 오브젝트가 있는 경우 Pod의 소유자 오브젝트에서 정책을 추가하거나 편집할 수 있습니다.
다음 예와 같이 인플레이스 Pod 크기 조정을 사용하려면 OpenShift CLI(oc
)에서 포드를 편집할 때 --subresource resize
플래그를 사용해야 합니다.
명령 예
oc edit pod <pod_name> --subresource resize
$ oc edit pod <pod_name> --subresource resize
apply -f <file_name>.yaml --subresource resize
$ apply -f <file_name>.yaml --subresource resize
patch pod <pod_name> --subresource resize --patch \ '{"spec":{"containers":[{"name":"pause", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'
$ patch pod <pod_name> --subresource resize --patch \
'{"spec":{"containers":[{"name":"pause", "resources":{"requests":{"cpu":"800m"}, "limits":{"cpu":"800m"}}}]}}'
크기 조정 정책과 함께 --subresource resize
플래그를 사용해야 하므로 OpenShift Container Platform 웹 콘솔에서 Pod 리소스를 편집할 수 없습니다.
크기 조정 정책이 NotRequired
이고 요청 또는 제한을 변경하면 Pod가 재시작되지 않습니다.
oc get pods
$ oc get pods
출력 예
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 0 5s
NAME READY STATUS RESTARTS AGE
resize-pod 1/1 Running 0 5s
크기 조정 정책이 RestartContainer
이고 요청 또는 제한을 변경하면 Pod가 다시 시작됩니다.
oc get pods
$ oc get pods
출력 예
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 1 (5s ago) 5s
NAME READY STATUS RESTARTS AGE
resize-pod 1/1 Running 1 (5s ago) 5s
리소스를 변경한 후 Pod 상태 조건은 다음 메시지를 사용하여 크기 조정 요청 상태를 표시합니다.
-
PodResizeInProgress
: kubelet이 요청된 리소스를 할당할 수 있으며 변경 사항이 적용됩니다. PodResizePending
: kubelet은 다음 이유 중 하나로 즉시 변경할 수 없습니다.-
Unfeasible
: 요청한 크기 조정을 현재 노드에서 실행할 수 없습니다. 예를 들어 노드에서 사용 가능한 것보다 많은 리소스를 요청하면 불충분한 조건이발생합니다
. -
지연됨
: 요청된 크기 조정은 현재 가능하지 않지만 나중에 가능할 수 있습니다. 예를 들어 노드에서 다른 Pod가 제거되면 요청된 리소스를 사용할 수 있습니다. 노드의 조건이 변경될 때 kubelet은 크기 조정을 다시 시도합니다.
-
-
error: kubelet이 리소스 할당 중에 오류가 발생하고 있으며 메시지 필드에서 오류 이유를 보고합니다.
변경할 수 없는 변경에 대한 상태 예
다음 제한 사항을 확인합니다.
- 재시작 불가능한 init 컨테이너 및 임시 컨테이너에서는 인플레이스 Pod 크기 조정이 지원되지 않습니다.
- 변경 사항이 Pod QoS 클래스와 같은 다른 Pod 변경 제약 조건을 위반하는 경우 인플레이스 Pod 크기 조정이 허용되지 않습니다.
-
정적
cpuManagerPolicy
또는memoryManagerPolicy
매개변수로 관리하는 Pod는 인플레이스 Pod 크기 조정으로 크기를 조정할 수 없습니다. -
스왑 메모리를 사용하는 Pod는 인플레이스 Pod 크기 조정이 있는 메모리 요청에 대해
RestartContainer
정책을 사용해야 합니다.
2.6.2. 인플레이스 Pod 크기 조정 구성 링크 복사링크가 클립보드에 복사되었습니다!
인플레이스 Pod 크기 조정을 사용하려면 Pod 사양에 크기 조정 정책을 추가해야 합니다.
기존 Pod에서 크기 조정 정책을 추가하거나 수정할 수는 없지만 Pod에 소유자 오브젝트가 있는 경우 Pod의 소유자 오브젝트에서 정책을 추가하거나 편집할 수 있습니다.
프로세스
크기 조정 정책을 사용하여 Pod 사양을 생성하거나 기존 Pod의 owner 오브젝트에 크기 조정 정책을 추가합니다.
다음 예와 유사한 YAML 파일을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 크기 조정 정책을 지정합니다. CPU 및/또는 메모리 리소스의 경우 다음 값 중 하나를 지정합니다.
-
NotRequired
: Pod를 재시작하지 않고 리소스 변경 사항을 적용합니다. 크기 조정 정책을 사용할 때 이는 기본값입니다. -
restart
Container
: 리소스 변경 사항을 적용하고 Pod를 다시 시작합니다.
-
다음과 유사한 명령을 실행하여 오브젝트를 생성합니다.
oc create -f <file_name>.yaml
$ oc create -f <file_name>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
검증
다음과 유사한 명령을 실행하여 CPU 또는 메모리 요청 또는 제한을 수정하여 크기 조정 정책이 적용되었는지 확인합니다.
--subresource resize
플래그를 포함해야 합니다. Pod에 배포와 같은 소유자 오브젝트가 있는 경우 소유자 오브젝트를 편집해야 합니다.oc edit pod <pod_name> --subresource resize
$ oc edit pod <pod_name> --subresource resize
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 정책이 적용되면 Pod가 예상대로 응답합니다.
oc get pods
$ oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 크기 조정 정책이
NotRequired
이면 Pod가 재시작되지 않습니다.출력 예
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 0 5s
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 0 5s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 크기 조정 정책이
다시 시작되면
Pod가 다시 시작됩니다.출력 예
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 1 (5s ago) 5s
NAME READY STATUS RESTARTS AGE resize-pod 1/1 Running 1 (5s ago) 5s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow