Information in this document may be out of date
This document has an older update date than the original, so the information it contains may be out of date. If you're able to read English, see the English version for the most up-to-date information: Configure Minimum and Maximum Memory Constraints for a Namespace
๋ค์์คํ์ด์ค์ ๋ํ ๋ฉ๋ชจ๋ฆฌ์ ์ต์ ๋ฐ ์ต๋ ์ ์ฝ ์กฐ๊ฑด ๊ตฌ์ฑ
์ด ํ์ด์ง๋ ๋ค์์คํ์ด์ค์์ ์คํ๋๋ ์ปจํ ์ด๋๊ฐ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ์ค์ ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋ค. ๋ฆฌ๋ฐ๋ ์ธ์ง(LimitRange) ์ค๋ธ์ ํธ์ ์ต์ ๋ฐ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ์ง์ ํ๋ค. ํ๋๊ฐ ๋ฆฌ๋ฐ๋ ์ธ์ง์ ์ํด ๋ถ๊ณผ๋ ์ ์ฝ ์กฐ๊ฑด์ ์ถฉ์กฑํ์ง ์์ผ๋ฉด, ๋ค์์คํ์ด์ค์์ ์์ฑ๋ ์ ์๋ค.
์์ํ๊ธฐ ์ ์
์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๊ฐ ํ์ํ๊ณ , kubectl ์ปค๋งจ๋-๋ผ์ธ ํด์ด ํด๋ฌ์คํฐ์ ํต์ ํ ์ ์๋๋ก ์ค์ ๋์ด ์์ด์ผ ํ๋ค. ์ด ํํ ๋ฆฌ์ผ์ ์ปจํธ๋กค ํ๋ ์ธ ํธ์คํธ๊ฐ ์๋ ๋ ธ๋๊ฐ ์ ์ด๋ 2๊ฐ ํฌํจ๋ ํด๋ฌ์คํฐ์์ ์คํํ๋ ๊ฒ์ ์ถ์ฒํ๋ค. ๋ง์ฝ, ์์ง ํด๋ฌ์คํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์๋ค๋ฉด, minikube๋ฅผ ์ฌ์ฉํด์ ์์ฑํ๊ฑฐ๋ ๋ค์ ์ฟ ๋ฒ๋คํฐ์ค ํ๋ ์ด๊ทธ๋ผ์ด๋ ์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
ํด๋ฌ์คํฐ์ ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ ์ ์๋ ๊ถํ์ด ์์ด์ผ ํ๋ค.
ํด๋ฌ์คํฐ์ ๊ฐ ๋ ธ๋์๋ ํ๋๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ต์ 1GiB ์ด์ ์์ด์ผ ํ๋ค.
๋ค์์คํ์ด์ค ์์ฑ
์ด ์ฐ์ต์์ ์์ฑํ ๋ฆฌ์์ค๊ฐ ํด๋ฌ์คํฐ์ ๋๋จธ์ง์ ๊ฒฉ๋ฆฌ๋๋๋ก ๋ค์์คํ์ด์ค๋ฅผ ์์ฑํ๋ค.
kubectl create namespace constraints-mem-example
๋ฆฌ๋ฐ๋ ์ธ์ง์ ํ๋ ์์ฑ
๋ค์์ ๋ฆฌ๋ฐ๋ ์ธ์ง์ ์์ ๋งค๋ํ์คํธ์ด๋ค.
apiVersion: v1
kind: LimitRange
metadata:
name: mem-min-max-demo-lr
spec:
limits:
- max:
memory: 1Gi
min:
memory: 500Mi
type: Container
๋ฆฌ๋ฐ๋ ์ธ์ง๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints.yaml --namespace=constraints-mem-example
๋ฆฌ๋ฐ๋ ์ธ์ง์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ๋ณธ๋ค.
kubectl get limitrange mem-min-max-demo-lr --namespace=constraints-mem-example --output=yaml
์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ์์๋๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ต์ ๋ฐ ์ต๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ณด์ฌ์ค๋ค. ๊ทธ๋ฌ๋ ์ฐธ๊ณ ๋ก ๋ฆฌ๋ฐ๋ ์ธ์ง์ ๊ตฌ์ฑ ํ์ผ์ ๊ธฐ๋ณธ๊ฐ(default)์ ์ง์ ํ์ง ์์๋ ์๋์ผ๋ก ์์ฑ๋๋ค.
limits:
- default:
memory: 1Gi
defaultRequest:
memory: 1Gi
max:
memory: 1Gi
min:
memory: 500Mi
type: Container
์ด์ constraints-mem-example
๋ค์์คํ์ด์ค์ ํ๋๋ฅผ ์์ฑํ ๋๋ง๋ค,
์ฟ ๋ฒ๋คํฐ์ค๋ ๋ค์ ๋จ๊ณ๋ฅผ ์ํํ๋ค.
ํด๋น ํ๋์ ์ด๋ค ์ปจํ ์ด๋๋ ์์ฒด ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋(request)๊ณผ ์ํ(limit)์ ๋ช ์ํ์ง ์์ผ๋ฉด, ์ปจํธ๋กค ํ๋ ์ธ์ด ํด๋น ์ปจํ ์ด๋์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋๊ณผ ์ํ์ ๊ธฐ๋ณธ๊ฐ(default)์ ์ง์ ํ๋ค.
ํด๋น ํ๋์ ๋ชจ๋ ์ปจํ ์ด๋์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋์ด ์ต์ 500 MiB ์ด์์ธ์ง ํ์ธํ๋ค.
ํด๋น ํ๋์ ๋ชจ๋ ์ปจํ ์ด๋์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋์ด 1024 MiB(1 GiB)๋ฅผ ๋์ง ์๋์ง ํ์ธํ๋ค.
๋ค์์ ์ปจํ ์ด๋๊ฐ ํ๋์ธ ํ๋์ ๋งค๋ํ์คํธ์ด๋ค. ํ๋ ๋ช ์ธ ๋ด์, ํ๋์ ์ ์ผํ ์ปจํ ์ด๋๋ 600 MiB์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋ ๋ฐ 800 MiB์ ๋ฉ๋ชจ๋ฆฌ ์ํ์ ์ง์ ํ๊ณ ์๋ค. ์ด๋ ๋ฆฌ๋ฐ๋ ์ธ์ง์ ์ํด ๋ถ๊ณผ๋ ์ต์ ๋ฐ ์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ์กฐ๊ฑด์ ์ถฉ์กฑ์ํจ๋ค.
apiVersion: v1
kind: Pod
metadata:
name: constraints-mem-demo
spec:
containers:
- name: constraints-mem-demo-ctr
image: nginx
resources:
limits:
memory: "800Mi"
requests:
memory: "600Mi"
ํ๋๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod.yaml --namespace=constraints-mem-example
ํ๋๊ฐ ์คํ ์ค์ด๊ณ ์ปจํ ์ด๋์ ์ํ๊ฐ ์ ์์ธ์ง ํ์ธํ๋ค.
kubectl get pod constraints-mem-demo --namespace=constraints-mem-example
ํ๋์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ๋ณธ๋ค.
kubectl get pod constraints-mem-demo --output=yaml --namespace=constraints-mem-example
์ถ๋ ฅ์ ๋ณด๋ฉด ํ๋์ ์ปจํ ์ด๋์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋์ด 600 MiB์ด๊ณ ๋ฉ๋ชจ๋ฆฌ ์ํ์ด 800 MiB์์ ์ ์ ์๋ค. ์ด๋ ๋ฆฌ๋ฐ๋ ์ธ์ง์ ์ํด ํด๋น ๋ค์์คํ์ด์ค์ ๋ถ๊ณผ๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ง์กฑ์ํจ๋ค.
resources:
limits:
memory: 800Mi
requests:
memory: 600Mi
ํ๋๋ฅผ ์ญ์ ํ๋ค.
kubectl delete pod constraints-mem-demo --namespace=constraints-mem-example
์ต๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ์กฐ๊ฑด์ ์ด๊ณผํ๋ ํ๋ ์์ฑ ์๋
๋ค์์ ์ปจํ ์ด๋๊ฐ ํ๋์ธ ํ๋์ ๋งค๋ํ์คํธ์ด๋ค. ์ปจํ ์ด๋๋ 800MiB์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋๊ณผ 1.5GiB์ ๋ฉ๋ชจ๋ฆฌ ์ํ์ ์ง์ ํ๊ณ ์๋ค.
apiVersion: v1
kind: Pod
metadata:
name: constraints-mem-demo-2
spec:
containers:
- name: constraints-mem-demo-2-ctr
image: nginx
resources:
limits:
memory: "1.5Gi"
requests:
memory: "800Mi"
ํ๋ ์์ฑ์ ์๋ํ๋ค.
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":
pods "constraints-mem-demo-2" is forbidden: maximum memory usage per Container is 1Gi, but limit is 1536Mi.
์ต์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋์ ์ถฉ์กฑํ์ง ์๋ ํ๋ ์์ฑ ์๋
๋ค์์ ์ปจํ ์ด๋๊ฐ ํ๋์ธ ํ๋์ ๋งค๋ํ์คํธ์ด๋ค. ์ปจํ ์ด๋๋ 100MiB์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋๊ณผ 800MiB์ ๋ฉ๋ชจ๋ฆฌ ์ํ์ ์ง์ ํ๊ณ ์๋ค.
apiVersion: v1
kind: Pod
metadata:
name: constraints-mem-demo-3
spec:
containers:
- name: constraints-mem-demo-3-ctr
image: nginx
resources:
limits:
memory: "800Mi"
requests:
memory: "100Mi"
ํ๋ ์์ฑ์ ์๋ํ๋ค.
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":
pods "constraints-mem-demo-3" is forbidden: minimum memory usage per Container is 500Mi, but request is 100Mi.
๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋ ๋๋ ์ํ์ ์ง์ ํ์ง ์์ ํ๋ ์์ฑ
๋ค์์ ์ปจํ ์ด๋๊ฐ ํ๋์ธ ํ๋์ ๋งค๋ํ์คํธ์ด๋ค. ํด๋น ์ปจํ ์ด๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋๊ณผ ์ํ์ ์ง์ ํ์ง ์๋๋ค.
apiVersion: v1
kind: Pod
metadata:
name: constraints-mem-demo-4
spec:
containers:
- name: constraints-mem-demo-4-ctr
image: nginx
ํ๋๋ฅผ ์์ฑํ๋ค.
kubectl apply -f https://k8s.io/examples/admin/resource/memory-constraints-pod-4.yaml --namespace=constraints-mem-example
ํ๋์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ๋ณธ๋ค.
kubectl get pod constraints-mem-demo-4 --namespace=constraints-mem-example --output=yaml
์ถ๋ ฅ์ ๋ณด๋ฉด ํ๋์ ์ ์ผํ ์ปจํ ์ด๋์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋์ด 1 GiB์ด๊ณ ๋ฉ๋ชจ๋ฆฌ ์ํ๋ 1 GiB์ด๋ค. ์ด ์ปจํ ์ด๋๋ ์ด๋ป๊ฒ ์ด๋ฐ ๊ฐ์ ์ป์์๊น?
resources:
limits:
memory: 1Gi
requests:
memory: 1Gi
ํ๋๊ฐ ํด๋น ์ปจํ ์ด๋์ ๋ํด ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋๊ณผ ์ํ์ ์ง์ ํ์ง ์์์ผ๋ฏ๋ก, ํด๋ฌ์คํฐ๊ฐ ๋ฆฌ๋ฐ๋ ์ธ์ง๋ก๋ถํฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ฒญ๋๊ณผ ์ํ ๊ธฐ๋ณธ๊ฐ์ ์ ์ฉํ์๋ค.
์ด๋ ๊ณง ํ๋ ์ ์์์ ์ด ๊ฐ๋ค์ ๋ณผ ์ ์์์ ์๋ฏธํ๋ค.
kubectl describe
๋ช
๋ น์ ์ฌ์ฉํ์ฌ ํ์ธํ ์ ์๋ค.
# ์ถ๋ ฅ์์ "Requests:" ์น์
์ ํ์ธํ๋ค
kubectl describe pod constraints-mem-demo-4 --namespace=constraints-mem-example
์ด ์์ ์์, ํ๋๋ ์คํ ์ค์ผ ์๋ ์๊ณ ์๋ ์๋ ์๋ค. ์ด ํ์คํฌ์ ์ ์ ์กฐ๊ฑด์ ๋ ธ๋์ ์ต์ 1GiB์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๊ฐ ๋ ธ๋์ 1GiB์ ๋ฉ๋ชจ๋ฆฌ๋ง ์๋ ๊ฒฝ์ฐ, ๋ ธ๋์ ํ ๋นํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ 1GiB์ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋์ ์์ฉํ๊ธฐ์ ์ถฉ๋ถํ์ง ์์ ์ ์๋ค. ๋ฉ๋ชจ๋ฆฌ๊ฐ 2GiB์ธ ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋, ๋ฉ๋ชจ๋ฆฌ๊ฐ 1GiB ์์ฒญ๋์ ์์ฉํ๊ธฐ์ ์ถฉ๋ถํ ๊ฒ์ด๋ค.
ํ๋๋ฅผ ์ญ์ ํ๋ค.
kubectl delete pod constraints-mem-demo-4 --namespace=constraints-mem-example
๋ฉ๋ชจ๋ฆฌ์ ์ต์ ๋ฐ ์ต๋ ์ ์ฝ ์กฐ๊ฑด ์ ์ฉ
๋ฆฌ๋ฐ๋ ์ธ์ง์ ์ํด ๋ค์์คํ์ด์ค์ ๋ถ๊ณผ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ต๋ ๋ฐ ์ต์ ์ ์ฝ ์กฐ๊ฑด์ ํ๋๋ฅผ ์์ฑํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ๋๋ง ์ ์ฉ๋๋ค. ๋ฆฌ๋ฐ๋ ์ธ์ง๋ฅผ ๋ณ๊ฒฝํด๋, ์ด์ ์ ์์ฑ๋ ํ๋์๋ ์ํฅ์ ๋ฏธ์น์ง ์๋๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์ต์ ๋ฐ ์ต๋ ์ ์ฝ ์กฐ๊ฑด์ ๋ํ ๋๊ธฐ
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ ํ๋๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ํ์ ๋ ์ ์๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
ํด๋ฌ์คํฐ์ ๊ฐ ๋ ธ๋์๋ 2GiB์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ค. ํด๋ฌ์คํฐ์ ์ด๋ค ๋ ธ๋๋ 2GiB ์ด์์ ์์ฒญ๋์ ์ง์ํ ์ ์์ผ๋ฏ๋ก, 2GiB ์ด์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญํ๋ ํ๋๋ฅผ ์๋ฝํ์ง ์์ผ๋ ค๊ณ ํ๋ค.
ํด๋ฌ์คํฐ๋ ์ด์ ๋ถ์์ ๊ฐ๋ฐ ๋ถ์์์ ๊ณต์ ํ๋ค. ํ๋ก๋์ ์ํฌ๋ก๋๊ฐ ์ต๋ 8GiB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ๋๋ก ํ๋ ค๋ฉด, ๊ฐ๋ฐ ์ํฌ๋ก๋๋ฅผ 512MiB๋ก ์ ํํด์ผ ํ๋ค. ํ๋ก๋์ ๋ฐ ๊ฐ๋ฐ์ ์ํด ๋ณ๋์ ๋ค์์คํ์ด์ค๋ฅผ ๋ง๋ค๊ณ , ๊ฐ ๋ค์์คํ์ด์ค์ ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ ์กฐ๊ฑด์ ์ ์ฉํ๋ค.
์ ๋ฆฌ
๋ค์์คํ์ด์ค๋ฅผ ์ญ์ ํ๋ค.
kubectl delete namespace constraints-mem-example
๋ค์ ๋ด์ฉ
ํด๋ฌ์คํฐ ๊ด๋ฆฌ์๋ฅผ ์ํ ๋ฌธ์
๋ค์์คํ์ด์ค์ ๋ํ ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ์์ฒญ๋๊ณผ ์ํ ๊ตฌ์ฑ
๋ค์์คํ์ด์ค์ ๋ํ ๊ธฐ๋ณธ CPU ์์ฒญ๋๊ณผ ์ํ ๊ตฌ์ฑ
๋ค์์คํ์ด์ค์ ๋ํ CPU์ ์ต์ ๋ฐ ์ต๋ ์ ์ฝ ์กฐ๊ฑด ๊ตฌ์ฑ
๋ค์์คํ์ด์ค์ ๋ํ ๋ฉ๋ชจ๋ฆฌ ๋ฐ CPU ์ฟผํฐ ๊ตฌ์ฑ