728x90
■ 쿠버네티스(Kubernetes) NameSpace 메모리 할당
- 네임스페이스에 리소스 쿼터가 설정되어 있는 경우, 메모리 상한에 기본값을 설정하는 것이 좋음.
- 리소스 쿼터가 설정 된 네임스페이스에서 실행되는 모든 컨테이너는 메모리 상한이 있어야 한다 (메모리 상한을 통해 쿠버네티스가 파드 수준 메모리 상한을 추론할 수 있음)
- 메모리 상한은 파드가 스케줄링 될 노드에 리소스 예약을 적용함.
- 네임스페이스의 모든 파드가 실제로 사용하고 있는 메모리 총량은 지정된 상한을 초과하지 않아야 함
- 네임스페이스 생성 및 기본 메모리 요청/상한 설정
# 네임스페이스 생성
kubectl create namespace default-mem-example
# 네임스페이스의 리밋레인지 (LimitRange) 정의
# admin/resource/memory-defaults.yaml
apiVersion: v1
kind: LimitRange
metadata:
name: mem-limit-range
spec:
limits:
- default:
memory: 512Mi
defaultRequest:
memory: 256Mi
type: Container
# 리밋레인지 적용
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults.yaml --namespace=default-mem-example
■ 쿠버네티스(Kubernetes) NameSpace와 Pod 메모리 요청/상한 미설정
- 컨테이너 생성 시 메모리 요청/상한 미설정
- 쿠버네티스 컨트롤 플레인인 네임스페이스의 기본 메모리 요청/상한 정보를 참조하여 할당
# Pod 정의
# admin/resource/memory-defaults-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-mem-demo
spec:
containers:
- name: default-mem-demo-ctr
image: nginx
# default-mem-example네임스페이스에 Pod 생성
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod.yaml --namespace=default-mem-example
# Pod 정보 조회
kubectl get pod default-mem-demo --output=yaml --namespace=default-mem-example
containers:
- image: nginx
imagePullPolicy: Always
name: default-mem-demo-ctr
resources:
limits:
memory: 512Mi
requests:
memory: 256Mi
■ 쿠버네티스(Kubernetes) NameSpace와 Pod 메모리 상한 설정 및 요청 미설정
- 컨테이너 생성 시 메모리 상한 설정 및 요청 미설정
- 네임스페이스에 설정한 값이 아닌 컨테이너 생성 시 정의한 메모리 상한값과 동일하게 요청값이 정의 됨.
# Pod 정의
# admin/resource/memory-defaults-pod-2.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-mem-demo-2
spec:
containers:
- name: default-mem-demo-2-ctr
image: nginx
resources:
limits:
memory: "1Gi"
# Pod 생성
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod-2.yaml --namespace=default-mem-example
# Pod 정보 조회
kubectl get pod default-mem-demo-2 --output=yaml --namespace=default-mem-example
resources:
limits:
memory: 1Gi
requests:
memory: 1Gi
■ 쿠버네티스(Kubernetes) NameSpace와 Pod 메모리 상한 미설정 및 요청 설정
- 컨테이너 생성 시 메모리 상한 미설정 및 요청 설정
- 요청값은 컨테이너 생성 시 정의한 값이 참조되었고, 상한값은 네임스페이스의 기본 메모리 상한값이 정의 되었음.
# Pod 정의
# admin/resource/memory-defaults-pod-3.yaml
apiVersion: v1
kind: Pod
metadata:
name: default-mem-demo-3
spec:
containers:
- name: default-mem-demo-3-ctr
image: nginx
resources:
requests:
memory: "128Mi"
# Pod 생성
kubectl apply -f https://k8s.io/examples/admin/resource/memory-defaults-pod-3.yaml --namespace=default-mem-example
# Pod 정보 조회
kubectl get pod default-mem-demo-3 --output=yaml --namespace=default-mem-example
resources:
limits:
memory: 512Mi
requests:
memory: 128Mi
요청(↓ Request) // 상한( → Limit) | 미설정 | 설정 |
미설정 | ▪ 네임스페이스 리밋레인지 정보를 참조 ▪ K8S 컨트롤러 자동 할당 |
▪ 네임스페이스 기본 요청값 무시 ▪ 요청값 == 상한값 으로 설정 |
설정 | ▪ 네임스페이스 기본 상한값 적용 ▪ 요청값은 명세대로 적용 |
▪ 설정된 값 적용 |
■ 쿠버네티스(Kubernetes) NameSpace 최대 / 최소 메모리 할당
- 컨테이너가 사용하는 메모리의 최소값과 최대값을 설정, 기본값을 지정하지 않아도 자동으로 생성 됨.
- 최대 및 최소 제약 조건은 파드를 생성하거나 업데이트할 때만 적용되며 리밋레인지를 변경해도, 이전에 생성된 파드에는 영향을 미치지 않음.
- Pod가 리밋레인지에 의해 부과된 제약 조건을 충족하지 않으면, 네임스페이스에 생성 될 수 없음. 리밋레인지가 설정되면 해당 네임스페이스에 Pod 생성 시 3단계 검사를 수행 함
- 해당 파드의 어떤 컨테이너도 자체 메모리 요청량(request)과 상한(limit)을 명시하지 않으면, 컨트롤 플레인이 해당 컨테이너에 메모리 요청량과 상한의 기본값(default)을 지정
- 해당 파드의 모든 컨테이너의 메모리 요청량이 리밋레인지의 최소값 이상인지 확인한다.
- 해당 파드의 모든 컨테이너의 메모리 요청량이 리밋레인지의 최대값 이하인지 확인한다.
- 최소값 / 최대값 제약사항을 위반하면 Pod는 생성되지 않는다.
# 네임스페이스 생성
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
limits:
- default:
memory: 1Gi
defaultRequest:
memory: 1Gi
max:
memory: 1Gi
min:
memory: 500Mi
type: Container
- 리밋레인지 최소 / 최대값 제약 조건을 위반할 경우 Pod는 생성되지 않음.
- 최대값 위반:
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.
- 최소값 위반:
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.
- 최소/최대값 제약사항을 위반하게 되면 오류 메시지와 함께 Pod가 생성되지 않는다.
- 최대값 위반:
728x90
'K8S' 카테고리의 다른 글
쿠버네티스(Kubernetes) 중단 (Disruption) (0) | 2024.08.30 |
---|---|
쿠버네티스(Kubernetes) NameSpace CPU 자원 할당 (1) | 2024.08.25 |
쿠버네티스(Kubernetes) Pod Quality of Service (QoS) (0) | 2024.08.23 |
쿠버네티스(Kubernetes) NameSpace (0) | 2024.08.20 |
쿠버네티스(Kubernetes) Label & Annotation (0) | 2024.08.20 |