apiVersion: v1
kind: Namespace
metadata:
name: nm-1
apiVersion: v1
kind: Pod
metadata:
name: pod-1
namespace: nm-1
labels:
app: pod
spec:
containers:
- name: container
image: ubuntu:latest
command: ["/bin/sh", "-ec", "while :; do echo '.'; sleep 5 ; done"]
apiVersion: v1
kind: Namespace
metadata:
name: nm-3
apiVersion: v1
kind: ResourceQuota
metadata:
name: rq-1
namespace: nm-3
spec:
hard:
requests.memory: 1Gi
limits.memory: 2Gi
요청(request): 파드가 최소한으로 필요로 하는 CPU와 메모리의 양을 지정한다. 이 값을 지정하면 쿠버네티스는 파드가 실행될 때 해당 리소스를 할당해야 하는 노드를 선택한다. 파드가 사용할 수 있는 최소한의 자원을 보장한다.
제한(limit): 파드가 사용할 수 있는 최대 CPU와 메모리의 양을 지정한다. 이 값을 지정하면 파드가 할당된 자원을 초과하여 사용할 수 없도록 제한된다. 파드가 사용할 수 있는 최대 자원을 제한한다.
이렇게 해 놓으면, 하나의 네임스페이스에서 메모리를 제한 걸어줘서, 팀마다 자원 할당을 제한해줌.
만약 예를 들어, requests 메모리나 limits 메모리를 넘기는 파드를 생성한다면?
apiVersion: v1
kind: Pod
metadata:
name: my-pod3
spec:
containers:
- name: my-container
image: nginx
resources:
limits:
cpu: "1"
memory: "1.8Gi"
requests:
cpu: "500m"
memory: "1.5Gi"
apiVersion: v1
kind: LimitRange
metadata:
name: lr-1
namespace: nm-3
spec:
limits:
- type: Container
min:
memory: 0.1Gi
max:
memory: 0.4Gi
maxLimitRequestRatio:
memory: 3
defaultRequest:
memory: 0.1Gi
default:
memory: 0.2Gi
apiVersion: v1
kind: Pod
metadata:
name: my-pod3
spec:
containers:
- name: my-container
image: nginx
resources:
limits:
cpu: "1"
memory: "0.4Gi"
requests:
cpu: "500m"
memory: "0.1Gi"
- metadata: LimitRange 리소스의 메타데이터 정보입니다. name은 LimitRange의 이름을, namespace는 해당 LimitRange가 적용될 네임스페이스를 나타냅니다.
- spec: LimitRange 리소스의 구체적인 설정 정보를 나타내는 항목입니다. 여기서는 limits 섹션을 설정하고 있습니다.
- limits: 파드 내의 컨테이너에 대한 제한 정보를 설정하는 섹션입니다.
- type: 설정하는 제한의 유형입니다. Container를 지정하면 컨테이너의 리소스 제한에 대한 설정을 하겠다는 것을 나타냅니다.
- min: 컨테이너에서 사용할 수 있는 최소한의 리소스 값을 나타냅니다. 여기서는 메모리 최소값을 0.1Gi로 설정하고 있습니다.
- max: 컨테이너에서 사용할 수 있는 최대 리소스 값을 나타냅니다. 여기서는 메모리 최대값을 0.4Gi로 설정하고 있습니다.
- maxLimitRequestRatio: maxLimitRequestRatio는 limit과 request 사이에 허용되는 최대 비율을 지정하는 옵션입니다. 즉, 제한된 리소스 양과 요청된 리소스 양 사이의 최대 비율을 설정할 수 있습니다. request와 limit이 최대 3배차이가 나면 안된다는 얘기.
- defaultRequest: 만약 컨테이너에서 요청한 메모리 값이 명시되어 있지 않을 때, 컨테이너에서 사용할 수 있는 기본값을 설정합니다. 여기서는 0.1Gi를 기본값으로 설정하였습니다.
- default: 만약 컨테이너에서 요청한 메모리 값과 제한한 메모리 값이 명시되어 있지 않을 때, 컨테이너에서 사용할 수 있는 기본값을 설정합니다. 여기서는 limit을 0.2Gi를 기본값으로 설정하였습니다.