2
2
title : 네임스페이스에 대한 메모리의 최소 및 최대 제약 조건 구성
3
3
content_type : task
4
4
weight : 30
5
+ description : >-
6
+ 한 네임스페이스 내에서 메모리 리소스 제한의 유효한 범위를 정의하며,
7
+ 이를 통해 해당 네임스페이스의 새로운 파드가 미리 설정한 범위 안에 들어오도록 한다.
5
8
---
6
9
7
10
@@ -15,16 +18,14 @@ weight: 30
15
18
16
19
17
20
18
-
19
21
## {{% heading "prerequisites" %}}
20
22
21
23
22
- {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
23
-
24
- 클러스터의 각 노드에는 최소 1GiB의 메모리가 있어야 한다.
25
-
24
+ {{< include "task-tutorial-prereqs.md" >}}
26
25
26
+ 클러스터에 네임스페이스를 생성할 수 있는 권한이 있어야 한다.
27
27
28
+ 클러스터의 각 노드에는 파드가 사용할 수 있는 메모리가 최소 1GiB 이상 있어야 한다.
28
29
29
30
<!-- steps -->
30
31
@@ -39,7 +40,7 @@ kubectl create namespace constraints-mem-example
39
40
40
41
## 리밋레인지와 파드 생성
41
42
42
- 다음은 리밋레인지의 구성 파일이다 .
43
+ 다음은 리밋레인지의 예시 매니페스트이다 .
43
44
44
45
{{< codenew file="admin/resource/memory-constraints.yaml" >}}
45
46
@@ -72,19 +73,20 @@ kubectl get limitrange mem-min-max-demo-lr --namespace=constraints-mem-example -
72
73
type: Container
73
74
```
74
75
75
- 이제 constraints-mem-example 네임스페이스에 컨테이너가 생성될 때마다, 쿠버네티스는
76
- 다음 단계를 수행한다.
76
+ 이제 ` constraints-mem-example ` 네임스페이스에 파드를 생성할 때마다,
77
+ 쿠버네티스는 다음 단계를 수행한다.
77
78
78
- * 컨테이너가 자체 메모리 요청량(request)과 상한(limit)을 지정하지 않으면, 기본 메모리 요청량과
79
- 상한을 컨테이너에 지정한다.
79
+ * 해당 파드의 어떤 컨테이너도 자체 메모리 요청량(request)과 상한(limit)을 명시하지 않으면,
80
+ 해당 컨테이너에 메모리 요청량과 상한의 기본값(default)을 지정한다.
80
81
81
- * 컨테이너에 500MiB 이상의 메모리 요청량이 있는지 확인한다.
82
+ * 해당 파드의 모든 컨테이너의 메모리 요청량이 최소 500 MiB 이상인지 확인한다.
82
83
83
- * 컨테이너의 메모리 상한이 1GiB 이하인지 확인한다.
84
+ * 해당 파드의 모든 컨테이너의 메모리 요청량이 1024 MiB(1 GiB)를 넘지 않는지
85
+ 확인한다.
84
86
85
- 컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너 매니페스트는
86
- 600MiB의 메모리 요청량과 800MiB의 메모리 상한을 지정한다. 이들은
87
- 리밋레인지에 의해 부과된 메모리의 최소 및 최대 제약 조건을 충족한다 .
87
+ 다음은 컨테이너가 하나인 파드의 매니페스트이다.
88
+ 파드 명세 내에, 파드의 유일한 컨테이너는 600 MiB의 메모리 요청량 및 800 MiB의 메모리 상한을 지정하고 있다.
89
+ 이는 리밋레인지에 의해 부과된 최소 및 최대 메모리 제약 조건을 충족시킨다 .
88
90
89
91
{{< codenew file="admin/resource/memory-constraints-pod.yaml" >}}
90
92
@@ -94,7 +96,7 @@ kubectl get limitrange mem-min-max-demo-lr --namespace=constraints-mem-example -
94
96
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod.yaml --namespace=constraints-mem-example
95
97
```
96
98
97
- 파드의 컨테이너가 실행 중인지 확인한다.
99
+ 파드가 실행 중이고 컨테이너의 상태가 정상인지 확인한다.
98
100
99
101
``` shell
100
102
kubectl get pod constraints-mem-demo --namespace=constraints-mem-example
@@ -106,8 +108,9 @@ kubectl get pod constraints-mem-demo --namespace=constraints-mem-example
106
108
kubectl get pod constraints-mem-demo --output=yaml --namespace=constraints-mem-example
107
109
```
108
110
109
- 출력 결과는 컨테이너의 메모리 요청량이 600MiB이고 메모리 상한이 800MiB임을
110
- 나타낸다. 이는 리밋레인지에 의해 부과된 제약 조건을 충족한다.
111
+ 출력을 보면 파드의 컨테이너의 메모리 요청량이 600 MiB이고 메모리 상한이 800 MiB임을 알 수 있다.
112
+ 이는 리밋레인지에 의해 해당 네임스페이스에 부과된 제약 조건을
113
+ 만족시킨다.
111
114
112
115
``` yaml
113
116
resources :
@@ -125,8 +128,8 @@ kubectl delete pod constraints-mem-demo --namespace=constraints-mem-example
125
128
126
129
## 최대 메모리 제약 조건을 초과하는 파드 생성 시도
127
130
128
- 컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너는
129
- 800MiB의 메모리 요청량과 1.5GiB의 메모리 상한을 지정한다 .
131
+ 다음은 컨테이너가 하나인 파드의 매니페스트이다.
132
+ 컨테이너는 800MiB의 메모리 요청량과 1.5GiB의 메모리 상한을 지정하고 있다 .
130
133
131
134
{{< codenew file="admin/resource/memory-constraints-pod-2.yaml" >}}
132
135
@@ -136,8 +139,8 @@ kubectl delete pod constraints-mem-demo --namespace=constraints-mem-example
136
139
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-2.yaml --namespace=constraints-mem-example
137
140
```
138
141
139
- 컨테이너가 너무 큰 메모리 상한을 지정하므로, 출력 결과에 파드가 생성되지 않은 것으로
140
- 표시된다 .
142
+ 결과를 보면 파드가 생성되지 않은 것을 확인할 수 있으며,
143
+ 이는 해당 파드가 정의하고 있는 컨테이너가 허용된 것보다 더 많은 메모리를 요청하고 있기 때문이다 .
141
144
142
145
```
143
146
Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-2.yaml":
@@ -146,8 +149,8 @@ pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container i
146
149
147
150
## 최소 메모리 요청량을 충족하지 않는 파드 생성 시도
148
151
149
- 컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너는
150
- 100MiB의 메모리 요청량과 800MiB의 메모리 상한을 지정한다 .
152
+ 다음은 컨테이너가 하나인 파드의 매니페스트이다.
153
+ 컨테이너는 100MiB의 메모리 요청량과 800MiB의 메모리 상한을 지정하고 있다 .
151
154
152
155
{{< codenew file="admin/resource/memory-constraints-pod-3.yaml" >}}
153
156
@@ -157,8 +160,8 @@ pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container i
157
160
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-3.yaml --namespace=constraints-mem-example
158
161
```
159
162
160
- 컨테이너가 너무 작은 메모리 요청량을 지정하므로, 출력 결과에 파드가 생성되지
161
- 않은 것으로 표시된다 .
163
+ 결과를 보면 파드가 생성되지 않은 것을 확인할 수 있으며,
164
+ 이는 해당 파드가 정의하고 있는 컨테이너가 지정된 최저 메모리 요청량보다도 낮은 메모리 요청량을 지정하고 있기 때문이다 .
162
165
163
166
```
164
167
Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-3.yaml":
@@ -167,10 +170,8 @@ pods "constraints-mem-demo-3" is forbidden: minimum memory usage per Container i
167
170
168
171
## 메모리 요청량 또는 상한을 지정하지 않은 파드 생성
169
172
170
-
171
-
172
- 컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너는
173
- 메모리 요청량을 지정하지 않으며, 메모리 상한을 지정하지 않는다.
173
+ 다음은 컨테이너가 하나인 파드의 매니페스트이다.
174
+ 해당 컨테이너는 메모리 요청량과 상한을 지정하지 않는다.
174
175
175
176
{{< codenew file="admin/resource/memory-constraints-pod-4.yaml" >}}
176
177
@@ -182,12 +183,12 @@ kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-4
182
183
183
184
파드에 대한 자세한 정보를 본다.
184
185
185
- ```
186
+ ``` shell
186
187
kubectl get pod constraints-mem-demo-4 --namespace=constraints-mem-example --output=yaml
187
188
```
188
189
189
- 출력 결과는 파드의 컨테이너에 1GiB의 메모리 요청량과 1GiB의 메모리 상한이 있음을 보여준다 .
190
- 컨테이너는 이러한 값을 어떻게 얻었을까?
190
+ 출력을 보면 파드의 유일한 컨테이너에 대한 메모리 요청량이 1 GiB이고 메모리 상한도 1 GiB이다 .
191
+ 이 컨테이너는 어떻게 이런 값을 얻었을까?
191
192
192
193
```
193
194
resources:
@@ -197,19 +198,28 @@ resources:
197
198
memory: 1Gi
198
199
```
199
200
200
- 컨테이너가 자체 메모리 요청량과 상한을 지정하지 않았으므로,
201
- 리밋레인지의 [ 메모리의 요청량과 상한 기본값] ( /ko/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/ ) 이
202
- 제공되었다.
201
+ 파드가 해당 컨테이너에 대해 메모리 요청량과 상한을 지정하지 않았으므로,
202
+ 클러스터가 리밋레인지로부터
203
+ [ 메모리의 요청량과 상한 기본값] ( /ko/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/ ) 을
204
+ 적용하였다.
203
205
204
- 이 시점에서, 컨테이너가 실행 중이거나 실행 중이 아닐 수 있다. 이 태스크의 전제 조건은
206
+ 이는 곧 파드 정의에서 이 값들을 볼 수 있음을 의미한다.
207
+ ` kubectl describe ` 명령을 사용하여 확인할 수 있다.
208
+
209
+ ``` shell
210
+ # 출력에서 "Requests:" 섹션을 확인한다
211
+ kubectl describe pod constraints-mem-demo-4 --namespace=constraints-mem-example
212
+ ```
213
+
214
+ 이 시점에서, 파드는 실행 중일 수도 있고 아닐 수도 있다. 이 태스크의 전제 조건은
205
215
노드에 최소 1GiB의 메모리가 있어야 한다는 것이다. 각 노드에
206
216
1GiB의 메모리만 있는 경우, 노드에 할당할 수 있는 메모리가 1GiB의 메모리 요청량을 수용하기에 충분하지
207
217
않을 수 있다. 메모리가 2GiB인 노드를 사용하는 경우에는, 메모리가
208
218
1GiB 요청량을 수용하기에 충분할 것이다.
209
219
210
220
파드를 삭제한다.
211
221
212
- ```
222
+ ``` shell
213
223
kubectl delete pod constraints-mem-demo-4 --namespace=constraints-mem-example
214
224
```
215
225
@@ -224,12 +234,12 @@ kubectl delete pod constraints-mem-demo-4 --namespace=constraints-mem-example
224
234
클러스터 관리자는 파드가 사용할 수 있는 메모리 양에 제한을 둘 수 있다.
225
235
예를 들면 다음과 같다.
226
236
227
- * 클러스터의 각 노드에는 2GB의 메모리가 있다. 클러스터의 어떤 노드도 2GB 이상의 요청량을
228
- 지원할 수 없으므로, 2GB 이상의 메모리를 요청하는 파드를 수락하지 않으려고 한다.
237
+ * 클러스터의 각 노드에는 2GiB의 메모리가 있다. 클러스터의 어떤 노드도 2GiB 이상의 요청량을
238
+ 지원할 수 없으므로, 2GiB 이상의 메모리를 요청하는 파드를 수락하지 않으려고 한다.
229
239
230
240
* 클러스터는 운영 부서와 개발 부서에서 공유한다.
231
- 프로덕션 워크로드가 최대 8GB의 메모리를 소비하도록 하려면,
232
- 개발 워크로드를 512MB로 제한해야 한다. 프로덕션 및 개발을 위해
241
+ 프로덕션 워크로드가 최대 8GiB의 메모리를 소비하도록 하려면,
242
+ 개발 워크로드를 512MiB로 제한해야 한다. 프로덕션 및 개발을 위해
233
243
별도의 네임스페이스를 만들고, 각 네임스페이스에 메모리 제약 조건을 적용한다.
234
244
235
245
## 정리
0 commit comments