Skip to content

Commit

Permalink
[ko] Update outdated files in dev-1.23-ko.2 M60-73
Browse files Browse the repository at this point in the history
  • Loading branch information
jihoon-seo committed Apr 5, 2022
1 parent 282d9b5 commit 2c535e2
Show file tree
Hide file tree
Showing 14 changed files with 248 additions and 238 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
title: 네임스페이스에 대한 메모리의 최소 및 최대 제약 조건 구성
content_type: task
weight: 30
description: >-
한 네임스페이스 내에서 메모리 리소스 제한의 유효한 범위를 정의하며,
이를 통해 해당 네임스페이스의 새로운 파드가 미리 설정한 범위 안에 들어오도록 한다.
---


Expand All @@ -15,16 +18,14 @@ weight: 30




## {{% heading "prerequisites" %}}


{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}

클러스터의 각 노드에는 최소 1GiB의 메모리가 있어야 한다.

{{< include "task-tutorial-prereqs.md" >}}

클러스터에 네임스페이스를 생성할 수 있는 권한이 있어야 한다.

클러스터의 각 노드에는 파드가 사용할 수 있는 메모리가 최소 1GiB 이상 있어야 한다.

<!-- steps -->

Expand All @@ -39,7 +40,7 @@ kubectl create namespace constraints-mem-example

## 리밋레인지와 파드 생성

다음은 리밋레인지의 구성 파일이다.
다음은 리밋레인지의 예시 매니페스트이다.

{{< codenew file="admin/resource/memory-constraints.yaml" >}}

Expand Down Expand Up @@ -72,19 +73,20 @@ kubectl get limitrange mem-min-max-demo-lr --namespace=constraints-mem-example -
type: Container
```

이제 constraints-mem-example 네임스페이스에 컨테이너가 생성될 때마다, 쿠버네티스는
다음 단계를 수행한다.
이제 `constraints-mem-example` 네임스페이스에 파드를 생성할 때마다,
쿠버네티스는 다음 단계를 수행한다.

* 컨테이너가 자체 메모리 요청량(request)과 상한(limit)을 지정하지 않으면, 기본 메모리 요청량과
상한을 컨테이너에 지정한다.
* 해당 파드의 어떤 컨테이너도 자체 메모리 요청량(request)과 상한(limit)을 명시하지 않으면,
해당 컨테이너에 메모리 요청량과 상한의 기본값(default)을 지정한다.

* 컨테이너에 500MiB 이상의 메모리 요청량이 있는지 확인한다.
* 해당 파드의 모든 컨테이너의 메모리 요청량이 최소 500 MiB 이상인지 확인한다.

* 컨테이너의 메모리 상한이 1GiB 이하인지 확인한다.
* 해당 파드의 모든 컨테이너의 메모리 요청량이 1024 MiB(1 GiB)를 넘지 않는지
확인한다.

컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너 매니페스트는
600MiB의 메모리 요청량과 800MiB의 메모리 상한을 지정한다. 이들은
리밋레인지에 의해 부과된 메모리의 최소 및 최대 제약 조건을 충족한다.
다음은 컨테이너가 하나인 파드의 매니페스트이다.
파드 명세 내에, 파드의 유일한 컨테이너는 600 MiB의 메모리 요청량 및 800 MiB의 메모리 상한을 지정하고 있다.
이는 리밋레인지에 의해 부과된 최소 및 최대 메모리 제약 조건을 충족시킨다.

{{< codenew file="admin/resource/memory-constraints-pod.yaml" >}}

Expand All @@ -94,7 +96,7 @@ kubectl get limitrange mem-min-max-demo-lr --namespace=constraints-mem-example -
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod.yaml --namespace=constraints-mem-example
```

파드의 컨테이너가 실행 중인지 확인한다.
파드가 실행 중이고 컨테이너의 상태가 정상인지 확인한다.

```shell
kubectl get pod constraints-mem-demo --namespace=constraints-mem-example
Expand All @@ -106,8 +108,9 @@ kubectl get pod constraints-mem-demo --namespace=constraints-mem-example
kubectl get pod constraints-mem-demo --output=yaml --namespace=constraints-mem-example
```

출력 결과는 컨테이너의 메모리 요청량이 600MiB이고 메모리 상한이 800MiB임을
나타낸다. 이는 리밋레인지에 의해 부과된 제약 조건을 충족한다.
출력을 보면 파드의 컨테이너의 메모리 요청량이 600 MiB이고 메모리 상한이 800 MiB임을 알 수 있다.
이는 리밋레인지에 의해 해당 네임스페이스에 부과된 제약 조건을
만족시킨다.

```yaml
resources:
Expand All @@ -125,8 +128,8 @@ kubectl delete pod constraints-mem-demo --namespace=constraints-mem-example

## 최대 메모리 제약 조건을 초과하는 파드 생성 시도

컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너는
800MiB의 메모리 요청량과 1.5GiB의 메모리 상한을 지정한다.
다음은 컨테이너가 하나인 파드의 매니페스트이다.
컨테이너는 800MiB의 메모리 요청량과 1.5GiB의 메모리 상한을 지정하고 있다.

{{< codenew file="admin/resource/memory-constraints-pod-2.yaml" >}}

Expand All @@ -136,8 +139,8 @@ kubectl delete pod constraints-mem-demo --namespace=constraints-mem-example
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-2.yaml --namespace=constraints-mem-example
```

컨테이너가 너무 큰 메모리 상한을 지정하므로, 출력 결과에 파드가 생성되지 않은 것으로
표시된다.
결과를 보면 파드가 생성되지 않은 것을 확인할 수 있으며,
이는 해당 파드가 정의하고 있는 컨테이너가 허용된 것보다 더 많은 메모리를 요청하고 있기 때문이다.

```
Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-2.yaml":
Expand All @@ -146,8 +149,8 @@ pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container i

## 최소 메모리 요청량을 충족하지 않는 파드 생성 시도

컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너는
100MiB의 메모리 요청량과 800MiB의 메모리 상한을 지정한다.
다음은 컨테이너가 하나인 파드의 매니페스트이다.
컨테이너는 100MiB의 메모리 요청량과 800MiB의 메모리 상한을 지정하고 있다.

{{< codenew file="admin/resource/memory-constraints-pod-3.yaml" >}}

Expand All @@ -157,8 +160,8 @@ pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container i
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-3.yaml --namespace=constraints-mem-example
```

컨테이너가 너무 작은 메모리 요청량을 지정하므로, 출력 결과에 파드가 생성되지
않은 것으로 표시된다.
결과를 보면 파드가 생성되지 않은 것을 확인할 수 있으며,
이는 해당 파드가 정의하고 있는 컨테이너가 지정된 최저 메모리 요청량보다도 낮은 메모리 요청량을 지정하고 있기 때문이다.

```
Error from server (Forbidden): error when creating "examples/admin/resource/memory-constraints-pod-3.yaml":
Expand All @@ -167,10 +170,8 @@ pods "constraints-mem-demo-3" is forbidden: minimum memory usage per Container i

## 메모리 요청량 또는 상한을 지정하지 않은 파드 생성



컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너는
메모리 요청량을 지정하지 않으며, 메모리 상한을 지정하지 않는다.
다음은 컨테이너가 하나인 파드의 매니페스트이다.
해당 컨테이너는 메모리 요청량과 상한을 지정하지 않는다.

{{< codenew file="admin/resource/memory-constraints-pod-4.yaml" >}}

Expand All @@ -182,12 +183,12 @@ kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-4

파드에 대한 자세한 정보를 본다.

```
```shell
kubectl get pod constraints-mem-demo-4 --namespace=constraints-mem-example --output=yaml
```

출력 결과는 파드의 컨테이너에 1GiB의 메모리 요청량과 1GiB의 메모리 상한이 있음을 보여준다.
컨테이너는 이러한 값을 어떻게 얻었을까?
출력을 보면 파드의 유일한 컨테이너에 대한 메모리 요청량이 1 GiB이고 메모리 상한도 1 GiB이다.
컨테이너는 어떻게 이런 값을 얻었을까?

```
resources:
Expand All @@ -197,19 +198,28 @@ resources:
memory: 1Gi
```

컨테이너가 자체 메모리 요청량과 상한을 지정하지 않았으므로,
리밋레인지의 [메모리의 요청량과 상한 기본값](/ko/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)
제공되었다.
파드가 해당 컨테이너에 대해 메모리 요청량과 상한을 지정하지 않았으므로,
클러스터가 리밋레인지로부터
[메모리의 요청량과 상한 기본값](/ko/docs/tasks/administer-cluster/manage-resources/memory-default-namespace/)
적용하였다.

이 시점에서, 컨테이너가 실행 중이거나 실행 중이 아닐 수 있다. 이 태스크의 전제 조건은
이는 곧 파드 정의에서 이 값들을 볼 수 있음을 의미한다.
`kubectl describe` 명령을 사용하여 확인할 수 있다.

```shell
# 출력에서 "Requests:" 섹션을 확인한다
kubectl describe pod constraints-mem-demo-4 --namespace=constraints-mem-example
```

이 시점에서, 파드는 실행 중일 수도 있고 아닐 수도 있다. 이 태스크의 전제 조건은
노드에 최소 1GiB의 메모리가 있어야 한다는 것이다. 각 노드에
1GiB의 메모리만 있는 경우, 노드에 할당할 수 있는 메모리가 1GiB의 메모리 요청량을 수용하기에 충분하지
않을 수 있다. 메모리가 2GiB인 노드를 사용하는 경우에는, 메모리가
1GiB 요청량을 수용하기에 충분할 것이다.

파드를 삭제한다.

```
```shell
kubectl delete pod constraints-mem-demo-4 --namespace=constraints-mem-example
```

Expand All @@ -224,12 +234,12 @@ kubectl delete pod constraints-mem-demo-4 --namespace=constraints-mem-example
클러스터 관리자는 파드가 사용할 수 있는 메모리 양에 제한을 둘 수 있다.
예를 들면 다음과 같다.

* 클러스터의 각 노드에는 2GB의 메모리가 있다. 클러스터의 어떤 노드도 2GB 이상의 요청량을
지원할 수 없으므로, 2GB 이상의 메모리를 요청하는 파드를 수락하지 않으려고 한다.
* 클러스터의 각 노드에는 2GiB의 메모리가 있다. 클러스터의 어떤 노드도 2GiB 이상의 요청량을
지원할 수 없으므로, 2GiB 이상의 메모리를 요청하는 파드를 수락하지 않으려고 한다.

* 클러스터는 운영 부서와 개발 부서에서 공유한다.
프로덕션 워크로드가 최대 8GB의 메모리를 소비하도록 하려면,
개발 워크로드를 512MB로 제한해야 한다. 프로덕션 및 개발을 위해
프로덕션 워크로드가 최대 8GiB의 메모리를 소비하도록 하려면,
개발 워크로드를 512MiB로 제한해야 한다. 프로덕션 및 개발을 위해
별도의 네임스페이스를 만들고, 각 네임스페이스에 메모리 제약 조건을 적용한다.

## 정리
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,35 @@
title: 네임스페이스에 대한 기본 메모리 요청량과 상한 구성
content_type: task
weight: 10
description: >-
한 네임스페이스에 메모리 리소스 상한의 기본값을 정의하며,
이를 통해 미리 설정한 메모리 리소스 상한이 해당 네임스페이스의 새로운 파드에 설정되도록 한다.
---

<!-- overview -->

이 페이지는 네임스페이스에 대한 기본 메모리 요청량(request)과 상한(limit)을 구성하는 방법을 보여준다.
기본 메모리 상한이 있는 네임스페이스에서 컨테이너가 생성되고, 컨테이너가
자체 메모리 상한을 지정하지 않으면, 컨테이너에 기본 메모리 상한이 할당된다.
이 페이지는 {{< glossary_tooltip text="네임스페이스" term_id="namespace" >}}에 대한
기본 메모리 요청량(request) 및 상한(limit)을 구성하는 방법을 보여준다.

쿠버네티스 클러스터를 여러 네임스페이스로 나눌 수 있다.
기본 메모리 [상한](/ko/docs/concepts/configuration/manage-resources-containers/#요청-및-제한)
설정되어 있는 네임스페이스에 파드를 생성했는데,
해당 파드의 모든 컨테이너에 메모리 상한이 명시되어 있지 않다면,
{{< glossary_tooltip text="컨트롤 플레인" term_id="control-plane" >}}이
해당 컨테이너에
기본 메모리 상한을 할당한다.

쿠버네티스는 이 문서의 뒷부분에서 설명하는 특정 조건에서 기본 메모리 요청량을 할당한다.




## {{% heading "prerequisites" %}}


{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}}
{{< include "task-tutorial-prereqs.md" >}}

클러스터에 네임스페이스를 생성할 수 있는 권한이 있어야 한다.

클러스터의 각 노드에는 최소 2GiB의 메모리가 있어야 한다.

Expand All @@ -35,8 +49,9 @@ kubectl create namespace default-mem-example

## 리밋레인지(LimitRange)와 파드 생성

다음은 리밋레인지 오브젝트의 구성 파일이다. 구성은
메모리 요청량 기본값(default)과 메모리 상한 기본값을 지정한다.
다음은 예시 {{< glossary_tooltip text="리밋레인지" term_id="limitrange" >}}에 대한 매니페스트이다.
이 매니페스트는 기본 메모리 요청량 및
기본 메모리 상한을 지정한다.

{{< codenew file="admin/resource/memory-defaults.yaml" >}}

Expand All @@ -46,13 +61,14 @@ default-mem-example 네임스페이스에 리밋레인지를 생성한다.
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults.yaml --namespace=default-mem-example
```

이제 컨테이너가 default-mem-example 네임스페이스에 생성되고,
컨테이너가 메모리 요청량 및 메모리 상한에 대해 고유한 값을 지정하지 않으면,
컨테이너에 메모리 요청량 기본값 256MiB와 메모리 상한 기본값
512MiB가 지정된다.
이제 파드를 `default-mem-example` 네임스페이스에 생성하고,
해당 파드의 어떤 컨테이너도 자체 메모리 요청량(request)과 상한(limit)을 명시하지 않으면,
컨트롤 플레인이 해당 컨테이너에 메모리 요청량의 기본값(256 MiB)과
상한의 기본값(512 MiB)을 지정한다.


컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너는
메모리 요청량 및 상한을 지정하지 않는다.
다음은 컨테이너가 하나인 파드의 매니페스트이다.
해당 컨테이너는 메모리 요청량과 상한을 지정하지 않는다.

{{< codenew file="admin/resource/memory-defaults-pod.yaml" >}}

Expand Down Expand Up @@ -91,8 +107,8 @@ kubectl delete pod default-mem-demo --namespace=default-mem-example

## 컨테이너 상한은 지정하고, 요청량을 지정하지 않으면 어떻게 되나?

컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너는
메모리 상한을 지정하지만, 요청량은 지정하지 않는다.
다음은 컨테이너가 하나인 파드의 매니페스트이다.
해당 컨테이너는 메모리 상한은 지정하지만, 요청량은 지정하지 않는다.

{{< codenew file="admin/resource/memory-defaults-pod-2.yaml" >}}

Expand Down Expand Up @@ -122,8 +138,8 @@ resources:

## 컨테이너의 요청량은 지정하고, 상한을 지정하지 않으면 어떻게 되나?

컨테이너가 하나인 파드의 구성 파일은 다음과 같다. 컨테이너는
메모리 요청량을 지정하지만, 상한은 지정하지 않았다.
다음은 컨테이너가 하나인 파드의 예시 매니페스트이다.
해당 컨테이너는 메모리 요청량은 지정하지만, 상한은 지정하지 않는다.

{{< codenew file="admin/resource/memory-defaults-pod-3.yaml" >}}

Expand All @@ -139,9 +155,9 @@ kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod-3.ya
kubectl get pod default-mem-demo-3 --output=yaml --namespace=default-mem-example
```

출력 결과는 컨테이너의 메모리 요청량이 컨테이너의 구성 파일에 지정된 값으로
설정되었음을 보여준다. 컨테이너의 메모리 상한은 네임스페이스의
기본 메모리 상한인 512Mi로 설정되어 있다.
출력을 보면 컨테이너의 매니페스트에 명시한 값대로 컨테이너의 메모리 요청량이 설정된 것을 알 수 있다.
해당 컨테이너의 메모리 상한은 512 MiB로 설정되며,
이는 네임스페이스의 메모리 상한 기본값과 일치한다.

```
resources:
Expand All @@ -153,15 +169,23 @@ resources:

## 기본 메모리 상한 및 요청량에 대한 동기

네임스페이스에 리소스 쿼터가 있는 경우,
네임스페이스에 {{< glossary_tooltip text="리소스 쿼터" term_id="resource-quota" >}}가
설정되어 있는 경우,
메모리 상한에 기본값을 설정하는 것이 좋다.
다음은 리소스 쿼터가 네임스페이스에 적용하는 두 가지 제한 사항이다.

* 네임스페이스에서 실행되는 모든 컨테이너에는 자체 메모리 상한이 있어야 한다.
* 네임스페이스의 모든 컨테이너가 사용하는 총 메모리 양은 지정된 상한을 초과하지 않아야 한다.
* 네임스페이스에서 실행되는 모든 파드에 대해, 모든 컨테이너에 메모리 상한이 있어야 한다.
(파드의 모든 컨테이너에 대해 메모리 상한을 지정하면,
쿠버네티스가 파드 내의 컨테이너의 상한을 합산하여 파드-수준 메모리 상한을 추론할 수 있다.)
* 메모리 상한은 해당 파드가 스케줄링될 노드에 리소스 예약을 적용한다.
해당 네임스페이스의 모든 파드에 대해 예약된 메모리 총량이 지정된 상한을 초과하지 않아야 한다.
* 해당 네임스페이스의 모든 파드가 실제로 사용하고 있는 메모리의 총량 또한 지정된 상한을 초과하지 않아야 한다.

리밋레인지를 추가할 때에는 다음을 고려해야 한다.

컨테이너가 자체 메모리 상한을 지정하지 않으면, 기본 상한이 부여되고,
쿼터에 의해 제한되는 네임스페이스에서 실행될 수 있다.
컨테이너를 갖고 있는 해당 네임스페이스의 파드가 자체 메모리 상한을 지정하지 않았다면,
컨트롤 플레인이 해당 컨테이너에 메모리 상한 기본값을 적용하며,
해당 파드는 메모리 리소스쿼터가 적용된 네임스페이스에서 실행되도록 허용될 수 있다.

## 정리

Expand Down
Loading

0 comments on commit 2c535e2

Please sign in to comment.