Skip to content

Commit 21fc970

Browse files
committed
[ko] translate task-assign-cpu-resource.md into Korean
1 parent 30f5565 commit 21fc970

File tree

3 files changed

+312
-0
lines changed

3 files changed

+312
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,278 @@
1+
---
2+
title: 컨테이너 및 파드 CPU 리소스 할당
3+
content_type: task
4+
weight: 20
5+
---
6+
7+
<!-- overview -->
8+
9+
이 페이지에서는 컨테이너의 CPU *요청량*과 CPU *상한*을 지정하는 방법을 보여준다.
10+
컨테이너는 설정된 상한보다 더 많은 CPU는 사용할 수 없다.
11+
제공된 시스템에 CPU 가용량이 남아있다면, 컨테이너는 요청량만큼의 CPU를 할당받는 것을
12+
보장받는다.
13+
14+
15+
16+
17+
## {{% heading "prerequisites" %}}
18+
19+
20+
{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
21+
22+
태스크 예제를 수행하기 위해서는 최소 1개의 CPU가 가용한 클러스터가 필요하다.
23+
24+
이 페이지의 몇 가지 단계를 수행하기 위해서는 클러스터 내
25+
[metrics-server](https://github.com/kubernetes-sigs/metrics-server)
26+
서비스 실행이 필요하다. 이미 실행 중인 metrics-server가 있다면
27+
다음 단계를 건너뛸 수 있다.
28+
29+
{{< glossary_tooltip term_id="minikube" >}}를 사용 중이라면,
30+
다음 명령어를 실행해 metric-server를 활성화할 수 있다.
31+
32+
```shell
33+
minikube addons enable metrics-server
34+
```
35+
36+
metric-server(아니면 `metrics.k8s.io`와 같은 다른 제공자의 리소스 메트릭 API)가
37+
실행 중인지를 확인하기 위해 다음의 명령어를 실행한다.
38+
39+
```shell
40+
kubectl get apiservices
41+
```
42+
43+
리소스 메트릭 API를 사용할 수 있다면 출력에 `metrics.k8s.io`
44+
대한 참조가 포함되어 있을 것이다.
45+
46+
47+
```
48+
NAME
49+
v1beta1.metrics.k8s.io
50+
```
51+
52+
53+
54+
55+
<!-- steps -->
56+
57+
## 네임스페이스 생성
58+
59+
이 예제에서 생성한 자원과 클러스터 내 나머지를 분리하기 위해
60+
{{< glossary_tooltip term_id="namespace" >}}를 생성한다.
61+
62+
```shell
63+
kubectl create namespace cpu-example
64+
```
65+
66+
## CPU 요청량 및 상한 지정
67+
68+
컨테이너에 CPU 요청량을 지정하기 위해서는 컨테이너의 리소스 매니페스트에 `resources:requests`
69+
필드를 포함한다. CPU 상한을 지정하기 위해서는 `resources:limits` 필드를 포함한다.
70+
71+
이 예제에서는, 하나의 컨테이너를 가진 파드를 생성한다.
72+
컨테이너는 0.5 CPU 요청량과 1 CPU 상한을 갖는다. 아래는 파드의 구성 파일이다.
73+
74+
{{< codenew file="pods/resource/cpu-request-limit.yaml" >}}
75+
76+
구성 파일 내 `args` 섹션은 컨테이너가 시작될 때 인수(argument)를 제공한다.
77+
`-cpus "2"` 인수는 컨테이너가 2 CPU 할당을 시도하도록 한다.
78+
79+
파드 생성:
80+
81+
```shell
82+
kubectl apply -f https://k8s.io/examples/pods/resource/cpu-request-limit.yaml --namespace=cpu-example
83+
```
84+
85+
파드가 실행 중인지 확인:
86+
87+
```shell
88+
kubectl get pod cpu-demo --namespace=cpu-example
89+
```
90+
91+
파드에 대한 자세한 정보 확인:
92+
93+
```shell
94+
kubectl get pod cpu-demo --output=yaml --namespace=cpu-example
95+
```
96+
97+
출력은 파드 내 하나의 컨테이너에 0.5 milliCPU 요청량과
98+
1 CPU 상한이 있는 것을 보여준다.
99+
100+
```yaml
101+
resources:
102+
limits:
103+
cpu: "1"
104+
requests:
105+
cpu: 500m
106+
```
107+
108+
`kubectl top`을 실행하여 파드 메트릭 가져오기:
109+
110+
```shell
111+
kubectl top pod cpu-demo --namespace=cpu-example
112+
```
113+
114+
출력은 파드가 974 milliCPU를 사용하는 것을 보여주는데,
115+
이는 파드의 1 CPU 상한보다는 약간 적은 수치이다.
116+
117+
```
118+
NAME CPU(cores) MEMORY(bytes)
119+
cpu-demo 974m <something>
120+
```
121+
122+
만약 `-cpu "2"`로 설정한다면, 컨테이너가 2 CPU를 사용하도록 설정한 것이 된다. 하지만 컨테이너는 1 CPU까지만을 사용하도록 허용되어 있다는 사실을 기억하자. 컨테이너는 상한보다 더 많은 CPU 리소스를 사용하려고 하기 때문에, 컨테이너의 CPU 사용은 쓰로틀(throttled) 될 것이다.
123+
124+
{{< note >}}
125+
CPU 사용이 1.0보다 낮은 것에 대한 또 다른 원인은, 노드에 충분한 CPU 리소스가 가용하지 않기 때문일 수도 있다.
126+
"시작하기 전에"의 요구사항에서 이 예제를 위해 클러스터는 최소 1 CPU가 필요하다는 사실을 기억하자. 만약 컨테이너가 1 CPU 밖에 가지고 있지 않은 노드 위에서 실행된다면, 컨테이너는 자신에게 명시되어 있는 CPU 상한과 무관하게 1 CPU 이상으로 사용하지 못할 것이다.
127+
{{< /note >}}
128+
129+
## CPU 단위(unit)
130+
131+
CPU 리소스는 _CPU_ 단위로 측정된다. 쿠버네티스에서 1 CPU는, 다음과 같다.
132+
133+
- 1 AWS vCPU
134+
- 1 GCP Core
135+
- 1 Azure vCore
136+
- 1 하이퍼스레드 (베어메탈 서버의 하이퍼스레딩 인텔 프로세서)
137+
138+
분수 값도 가능하다. 0.5 CPU를 요청한 컨테이너는 1 CPU를 요청한 컨테이너 CPU의 절반 가량을 보장받는다.
139+
접미사 m을 사용하여 밀리(milli)를 표현할 수도 있다. 예를 들어서 100m CPU, 100milliCPU,
140+
그리고 0.1 CPU는 모두 같다. 1m보다 정밀한 표현은 허용하지 않는다.
141+
142+
CPU는 상대적인 수량이 아닌, 절대적인 수량으로 요청된다.
143+
즉 0.1는 싱글 코어, 듀얼 코어, 48-코어 머신에서도 같은 양을 나타낸다.
144+
145+
파드 삭제:
146+
147+
```shell
148+
kubectl delete pod cpu-demo --namespace=cpu-example
149+
```
150+
151+
## 노드보다 훨씬 높은 CPU 요청량을 지정할 경우
152+
153+
CPU 요청량과 상한은 컨테이너와 연관되어 있지만,
154+
파드가 CPU 요청량과 상한을 갖는다고 생각하는 것이 유용하다.
155+
특정 파드의 CPU 요청량은 해당 파드의 모든 컨테이너 CPU 요청량의 합과 같다.
156+
마찬가지로, 특정 파드의 CPU 상한은 해당 파드의 모든 컨테이너 CPU 상한의 합과 같다.
157+
158+
파드 스케줄링은 요청량에 따라 수행된다. 파드는 파드 CPU 요청량을 만족할 정도로
159+
노드에 충분한 CPU 리소스가 있을 때에만 노드에 스케줄링한다.
160+
161+
이 예제에서는, 클러스터의 모든 노드 가용량을 초과하는 CPU 요청량을
162+
가진 파드를 생성했다. 아래는 하나의 컨테이너를 가진 파드에 대한 설정 파일이다.
163+
컨테이너는 100 CPU을 요청하고 있는데, 이것은 클러스터의 모든 노드 가용량을
164+
초과하는 것이다.
165+
166+
{{< codenew file="pods/resource/cpu-request-limit-2.yaml" >}}
167+
168+
파드 생성:
169+
170+
```shell
171+
kubectl apply -f https://k8s.io/examples/pods/resource/cpu-request-limit-2.yaml --namespace=cpu-example
172+
```
173+
174+
파드 상태 확인:
175+
176+
```shell
177+
kubectl get pod cpu-demo-2 --namespace=cpu-example
178+
```
179+
180+
출력은 파드 상태가 Pending 상태임을 보여준다. 이것은 파드는 어떤 노드에서도 실행되도록
181+
스케줄되지 않았고, 이후에도 Pending 상태가 지속될 것이라는 것을 의미한다.
182+
183+
184+
```
185+
NAME READY STATUS RESTARTS AGE
186+
cpu-demo-2 0/1 Pending 0 7m
187+
```
188+
189+
이벤트를 포함한 파드 상세 정보 확인:
190+
191+
192+
```shell
193+
kubectl describe pod cpu-demo-2 --namespace=cpu-example
194+
```
195+
196+
출력은 노드의 CPU 리소스가 부족하여
197+
파드가 스케줄링될 수 없음을 보여준다.
198+
199+
200+
```
201+
Events:
202+
Reason Message
203+
------ -------
204+
FailedScheduling No nodes are available that match all of the following predicates:: Insufficient cpu (3).
205+
```
206+
207+
파드 삭제:
208+
209+
```shell
210+
kubectl delete pod cpu-demo-2 --namespace=cpu-example
211+
```
212+
213+
## CPU 상한을 지정하지 않을 경우
214+
215+
컨테이너에 CPU 상한을 지정하지 않으면 다음 상황 중 하나가 발생한다.
216+
217+
- 컨테이너가 사용할 수 있는 CPU 리소스에 상한선이 없다.
218+
컨테이너는 실행 중인 노드에서 사용 가능한 모든 CPU 리소스를 사용해버릴 수도 있다.
219+
220+
- 기본 CPU 상한이 지정된 네임스페이스에서 실행 중인 컨테이너에는 해당 기본 상한이 자동으로
221+
할당된다. 클러스터 관리자들은
222+
[리밋레인지(LimitRange)](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#limitrange-v1-core/)를 사용해
223+
CPU 상한의 기본 값을 지정할 수 있다.
224+
225+
## CPU 상한은 지정했지만 CPU 요청량을 지정하지 않을 경우
226+
227+
만약 CPU 상한은 지정했지만 CPU 요청량을 지정하지 않았다면, 쿠버네티스는 자동으로
228+
상한에 맞는 CPU 요청량을 지정한다. 비슷하게, 컨테이너가 자신의 메모리 상한을 지정했지만
229+
메모리 요청량을 지정하지 않았다면, 쿠버네티스는 자동으로 상한에 맞는
230+
메모리 요청량을 지정한다.
231+
232+
## CPU 요청량 및 상한 개념 도입 동기
233+
234+
클러스터에서 실행되는 컨테이너에 CPU 요청량과 상한을 구성하면
235+
클러스터 내 노드들의 가용 가능한 CPU 리소스를 효율적으로 사용할 수 있게 된다.
236+
파드의 CPU 요청량을 낮게 유지하면 파드가 높은 확률로 스케줄링 될 수 있다.
237+
CPU 상한이 CPU 요청량보다 크도록 설정한다면 다음 두 가지를 달성할 수 있다.
238+
239+
- 가용한 CPU 리소스가 있는 경우 파드가 이를 버스트(burst) 하여 사용할 수 있다.
240+
- 파드가 버스트 중 사용할 수 있는 CPU 리소스 양을 적절히 제한할 수 있다.
241+
242+
## 정리
243+
244+
네임스페이스 삭제:
245+
246+
```shell
247+
kubectl delete namespace cpu-example
248+
```
249+
250+
251+
252+
## {{% heading "whatsnext" %}}
253+
254+
255+
256+
### 앱 개발자들을 위한 문서
257+
258+
- [컨테이너 및 파드 메모리 리소스 할당](/ko/docs/tasks/configure-pod-container/assign-memory-resource/)
259+
260+
- [파드에 대한 서비스 품질 구성](/ko/docs/tasks/configure-pod-container/quality-service-pod/)
261+
262+
### 클러스터 관리자들을 위한 문서
263+
264+
- [네임스페이스에 대한 기본 메모리 요청량과 상한 구성](/ko/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)
265+
266+
- [네임스페이스에 대한 기본 CPU 요청량과 상한 구성](/ko/docs/tasks/administer-cluster/manage-resources/cpu-default-namespace/)
267+
268+
- [네임스페이스에 대한 메모리의 최소 및 최대 메모리 제약 조건 구성](/ko/docs/tasks/administer-cluster/manage-resources/memory-constraint-namespace/)
269+
270+
- [네임스페이스에 대한 CPU의 최소 및 최대 제약 조건 구성](/ko/docs/tasks/administer-cluster/manage-resources/cpu-constraint-namespace/)
271+
272+
- [네임스페이스에 대한 메모리 및 CPU 쿼터 구성](/ko/docs/tasks/administer-cluster/manage-resources/quota-memory-cpu-namespace/)
273+
274+
- [네임스페이스에 대한 파드 쿼터 구성](/ko/docs/tasks/administer-cluster/manage-resources/quota-pod-namespace/)
275+
276+
- [API 오브젝트 할당량 구성](/docs/tasks/administer-cluster/quota-api-object/)
277+
278+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: cpu-demo-2
5+
namespace: cpu-example
6+
spec:
7+
containers:
8+
- name: cpu-demo-ctr-2
9+
image: vish/stress
10+
resources:
11+
limits:
12+
cpu: "100"
13+
requests:
14+
cpu: "100"
15+
args:
16+
- -cpus
17+
- "2"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v1
2+
kind: Pod
3+
metadata:
4+
name: cpu-demo
5+
namespace: cpu-example
6+
spec:
7+
containers:
8+
- name: cpu-demo-ctr
9+
image: vish/stress
10+
resources:
11+
limits:
12+
cpu: "1"
13+
requests:
14+
cpu: "0.5"
15+
args:
16+
- -cpus
17+
- "2"

0 commit comments

Comments
 (0)