Merge pull request #44175 from dusdjhyeon/dusdjhyeon/pod-qos/v0.1

[ko] Translate Concepts/Workloads/Pods/Pod Quality of Service Classes into Korean
pull/46554/head
Kubernetes Prow Robot 2024-03-14 03:15:31 -07:00 committed by GitHub
commit 24a8364eeb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 128 additions and 0 deletions

View File

@ -0,0 +1,128 @@
---
title: 파드 서비스 품질(QoS) 클래스
content_type: concept
weight: 85
---
<!-- overview -->
이 페이지에서는 _쿠버네티스의 서비스 품질(QoS) 클래스_ 를 소개하고, 쿠버네티스가
해당 파드의 컨테이너에 대해 지정한 리소스 제약의 결과로 각 파드에 QoS 클래스를
할당하는 방법을 설명한다.
쿠버네티스는 노드에 사용 가능한 리소스가 충분하지 않을 때 어떤 파드를 축출시킬지
결정하기 위해 이 분류에 의존한다.
<!-- body -->
## 서비스 품질 클래스
쿠버네티스는 실행하는 파드를 분류하고 각 파드를 특정 _서비스 품질 (QoS) 클래스_
에 할당한다. 쿠버네티스는 이 분류를 사용하여 서로 다른 파드가 처리되는 방식에 영향을 미친다.
쿠버네티스는 해당 파드에 있는 {{< glossary_tooltip text="컨테이너" term_id="container" >}}의
[리소스 요청](/ko/docs/concepts/configuration/manage-resources-containers/)과
해당 요청이 리소스 한도(limit)와 어떻게 관련되는지에 따라 이 분류를 수행한다.
이를 {{< glossary_tooltip text="서비스 품질" term_id="qos-class">}}(QoS) 클래스라고 한다.
쿠버네티스는 구성 요소인 컨테이너의 리소스 요청과 한도를 기반으로 모든 파드에 QoS
클래스를 할당한다.
QoS 클래스는 쿠버네티스가 [노드 압박](/ko/docs/concepts/scheduling-eviction/node-pressure-eviction/)을
받는 노드에서 어떤 파드를 축출할지 결정하는 데 사용된다.
가능한 QoS 클래스는 `Guaranteed`, `Burstable`, 그리고 `BestEffort`이다.
노드에 리소스가 부족하면 쿠버네티스는 먼저 해당 노드에서 실행 중인 `BestEffort`
파드를 축출하고, 그 다음에는 `Burstable`, 마지막으로 `Guaranteed` 파드를 축출한다.
이러한 축출이 리소스 압박으로 인한 경우, 리소스 요청을 초과하는 파드만 축출 후보가 된다.
### Guaranteed
`Guaranteed` 파드는 리소스 한도가 가장 엄격하여 축출될 가능성이 가장 낮다.
이들은 한도(limit)를 초과하거나 노드에서 선점할 수 있는 우선순위가 낮은 파드가 없을 때까지 죽지 않도록 보장된다.
이들은 지정된 한도를 초과하여 리소스를 획득할 수 없다.
또한 이 파드는 [`스태틱(static)`](/docs/tasks/administer-cluster/cpu-management-policies/#static-policy)
CPU 관리 정책을 사용하여 독점적인 CPU를 사용할 수 있다.
#### 기준
파드에 QoS 클래스 `Guaranteed`가 주어지는 경우는 다음과 같다.
* 파드의 모든 컨테이너에는 메모리 한도와 메모리 요청이 있어야 한다.
* 파드의 모든 컨테이너에 대해 메모리 한도는 메모리 요청과 같아야 한다.
* 파드의 모든 컨테이너에는 CPU 한도와 CPU 요청이 있어야 한다.
* 파드의 모든 컨테이너에 대해, CPU 한도는 CPU 요청과 같아야 한다.
### Burstable
`Burstable` 파드는 요청에 따라 일부 하한 리소스가 보장되지만 특정 한도가 필요하지 않다.
한도를 지정하지 않으면 기본적으로 노드의 용량과 동일한 한도가 적용되므로, 리소스를 사용할
수 있는 경우 파드가 리소스를 유연하게 늘릴 수 있다.
노드 리소스 압박으로 인해 파드가 축출되는 경우, 이 파드는 모든 `BestEffort`
파드가 축출된 후에만 축출된다. `Burstable` 파드는 리소스 한도나 요청이 없는
컨테이너를 포함할 수 있기 때문에, `Burstable` 파드는 노드 리소스를 원하는 만큼 사용할 수 있다.
#### 기준
다음과 같은 경우 파드에 QoS 클래스 `Burstable`이 주어진다.
* 파드가 QoS 클래스 `Guaranteed` 기준을 충족하지 않는다.
* 파드에 있는 하나 이상의 컨테이너에 메모리 또는 CPU 요청 또는 한도가 있다.
### BestEffort
`BestEffort` QoS 클래스의 파드는 다른 QoS 클래스의 파드에 특별히 할당되지 않은 노드 리소스를
사용할 수 있다. 예를 들어, kubelet에 16개의 CPU 코어를 사용할 수 있는 노드가 있고 `Guaranteed`
파드에 4개의 CPU 코어를 할당했다면, `BestEffort` QoS 클래스의 파드는 나머지 12개의 CPU 코어를
얼마든지 사용할 수 있다.
노드가 리소스 압박을 받는 경우, kubelet은 `BestEffort` 파드를 축출하는 것을 선호한다.
#### 기준
`Guaranteed` 또는 `Burstable` 기준을 충족하지 않는 파드는 `BestEffort`
QoS 클래스를 갖는다. 즉, 파드는 파드 내 컨테이너 중 메모리 한도나 메모리
요청이 없고 파드 내 컨테이너 중 CPU 한도나 CPU 요청이 없는 경우에만
`BestEffort`이다. 파드의 컨테이너는 (CPU나 메모리가 아닌) 다른 리소스를
요청할 수 있지만 여전히 `BestEffort`로 분류될 수 있다.
## cgroup v2를 이용한 메모리 QoS
{{< feature-state for_k8s_version="v1.22" state="alpha" >}}
메모리 QoS는 쿠버네티스에서 메모리 리소스를 보장하기 위해 cgroup v2의 메모리
컨트롤러를 사용한다. 파드 내 컨테이너의 메모리 요청과 한도는 메모리 컨트롤러가
제공하는 특정 인터페이스인 `memory.min``memory.high` 설정에 사용된다.
`memory.min`이 메모리 요청으로 설정되면, 메모리 리소스가 예약되고 커널에 의해
회수되지 않는다. 이것이 메모리 QoS가 쿠버네티스 파드의 메모리 가용성을 보장하는
방식이다. 그리고 컨테이너에 메모리 한도가 설정되어 있는 경우, 이는 시스템이 컨테이너
메모리 사용을 제한해야 함을 의미한다. 메모리 QoS는 `memory.high`를 사용하여 메모리
한도에 근접하는 워크로드를 쓰로틀(throttle)하여 시스템이 순간적인 메모리 할당으로
인해 압도되지 않도록 한다.
메모리 QoS는 QoS 클래스에 따라 적용할 설정을 결정한다.
그러나 둘은 서비스 품질에 대한 제어를 제공하는 서로 다른 메커니즘이다.
## QoS 클래스와 독립적인 일부 동작 {#class-independent-behavior}
특정 동작은 쿠버네티스가 할당하는 QoS 클래스와 무관하다. 예를 들면 다음과 같다.
* 리소스 한도를 초과하는 모든 컨테이너는 해당 파드의 다른 컨테이너에 영향을 주지 않고 kubelet에
의해 종료되었다가 다시 시작된다.
* 컨테이너가 리소스 요청을 초과하고 컨테이너가 실행되는 노드가 리소스 압박에 직면하면,
컨테이너가 있는 파드는 [축출](/ko/docs/concepts/scheduling-eviction/node-pressure-eviction/) 후보가 된다.
만약 이런 상황이 발생하면, 파드의 모든 컨테이너가 종료된다. 쿠버네티스는 일반적으로 다른 노드에 대체
파드를 생성할 수 있다.
* 파드의 리소스 요청은 그 구성 요소인 컨테이너의 리소스 요청의 합과 같고,
파드의 리소스 한도는 그 구성 요소인 컨테이너의 리소스 한도의 합과 같다.
* kube-scheduler는 [선점](/ko/docs/concepts/scheduling-eviction/pod-priority-preemption/#preemption)
할 파드를 선택할 때 QoS 클래스를 고려하지 않는다. 클러스터에 정의한 모든
파드를 실행하기에 충분한 리소스가 없을 때 선점이 발생할 수 있다.
## {{% heading "whatsnext" %}}
* [파드 및 컨테이너 리소스 관리](/ko/docs/concepts/configuration/manage-resources-containers/)에 대해 알아보기
* [노드-압박 축출](/ko/docs/concepts/scheduling-eviction/node-pressure-eviction/)에 대해 알아보기
* [파드 우선순위와 선점](/ko/docs/concepts/scheduling-eviction/pod-priority-preemption/)에 대해 알아보기
* [파드 중단(disruption)](/ko/docs/concepts/workloads/pods/disruptions/)에 대해 알아보기
* [컨테이너 및 파드 메모리 리소스 할당](/ko/docs/tasks/configure-pod-container/assign-memory-resource/) 방법 배우기
* [컨테이너 및 파드 CPU 리소스 할당](/ko/docs/tasks/configure-pod-container/assign-cpu-resource/) 방법 배우기
* [파드에 대한 서비스 품질(QoS) 구성](/ko/docs/tasks/configure-pod-container/quality-service-pod/) 방법 배우기