728x90
Resources
apiVersion: v1
kind: Pod
metadata:
name: resource-limits-example
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
memory: "64Mi" # 최소 보장 메모리 64Mi
cpu: "250m" # 최소 보장 CPU 0.25 vCPU
limits:
memory: "128Mi" # 최대 메모리 128Mi
cpu: "500m" # 최대 CPU 0.5 vCPU
- requests.memory와 requests.cpu: 컨테이너가 배치될 때 스케줄러는 이 Pod가 64Mi 메모리와 0.25 vCPU가 필요한 것으로 간주하고 배치할 노드를 선택한다.
- limits.memory와 limits.cpu: 컨테이너는 최대 128Mi 메모리와 0.5 vCPU까지만 사용할 수 있다. 이를 초과하는 자원을 사용하려고 하면 메모리 부족으로 종료되거나 CPU 사용량이 자동으로 줄어든다.
CPU와 메모리의 단위
- CPU: 1은 전체 CPU(1 vCPU)를 의미하고, 500m은 0.5 vCPU를 의미한다.
- Memory: 메모리의 단위는 Mi, Gi 같은 이진 표기법(1 MiB = 1024 KiB)을 사용해. 64Mi는 64 MiB를 의미한다.
Resources 설정의 중요성
- 클러스터 안정성 보장: Pod가 과도한 자원을 사용하지 않도록 제어해 다른 Pod에 영향을 주지 않도록 할 수 있다.
- 스케줄링 최적화: Requests를 설정하면 스케줄러가 Pod를 적절한 노드에 배치할 수 있다.
- 자원 낭비 방지: 불필요한 자원 소비를 줄여서 클러스터 전체의 자원 효율성을 높일 수 있다.
LimitRange
apiVersion: v1
kind: LimitRange
metadata:
name: resource-limits
namespace: my-namespace
spec:
limits:
- type: Container
max:
cpu: "1" # 최대 1 vCPU
memory: "512Mi" # 최대 512Mi 메모리
min:
cpu: "100m" # 최소 0.1 vCPU
memory: "128Mi" # 최소 128Mi 메모리
default:
cpu: "500m" # 기본값 0.5 vCPU
memory: "256Mi" # 기본값 256Mi 메모리
defaultRequest:
cpu: "200m" # 기본 요청값 0.2 vCPU
memory: "200Mi" # 기본 요청값 200Mi 메모리
- type: Pod
max:
memory: "1Gi" # Pod 전체에 대한 최대 메모리 1Gi
min:
memory: "200Mi" # Pod 전체에 대한 최소 메모리 200Mi
- type: Container 또는 Pod로, Container 타입은 개별 컨테이너에 대한 리소스 제한을, Pod 타입은 전체 Pod에 대한 제한을 설정할 수 있다.
- max: 설정 가능한 최대 리소스로, 이 값을 초과하는 설정을 방지한다.
- min: 설정 가능한 최소 리소스로, 너무 낮은 자원 설정을 방지한다.
- default: 리소스 요청/제한 값이 명시되지 않은 경우 적용될 기본값
- defaultRequest: 리소스 요청(requests)에 대해 별도로 설정하지 않을 때 사용할 기본 요청값을 설정한다.
LimitRange를 설정하는 이유
- 네임스페이스 자원 관리: 네임스페이스 내에서 모든 리소스가 과도하게 설정되지 않도록 통제할 수 있어.
- 자원 낭비 방지: 필요 이상의 자원을 요청하지 못하게 하여 효율적인 자원 사용을 유도해.
- 예상치 못한 장애 방지: 각 컨테이너와 Pod가 적정한 자원을 사용할 수 있도록 해, 클러스터 안정성을 높여.
kubectl get pod [pod name] -o yaml > pod-definition.yaml
728x90
반응형
'데브옵스 > Orchestration' 카테고리의 다른 글
[Kubernetes] 19. Static Pod (0) | 2024.11.09 |
---|---|
[Kubernetes] 18. DaemonSet (0) | 2024.11.08 |
[Kubernetes] 16. Node Selector, Node Affinity (0) | 2024.11.06 |
[Kubernetes] 15. Taints, Tolerations (0) | 2024.11.06 |
[Kubernetes] 14. Label, Selector, Annotation (0) | 2024.11.06 |