MSA기반으로 여러 개의 작은 프로세스를 실행하게 되면 노드 하나에 여러개의 파드를 실행하는 일이 자주 존재한다. 이 때 자원사용량이 많은 파드가 노드 하나에 모여있다면 다음과 같은 문제점들이 발생한다.
이런 문제점을 해소하기 위하여 실행되는 파드와 컨테이너에 자원사용량을 설정할 수 있다.
템플릿파일에 requests
와 limits
으로 자원사용량을 설정할 수 있는데 이 둘의 차이점은 무엇인가?
requests는 파드 및 컨테이너에 필요한 최소한의 리소스 양을 요청할 수 있다.
만약 여유자원이 없다면 Pending
상태로 실행되며 클러스터안에 여유가 생길때 까지 대기한다.
limits는 파드 및 컨테이너에 사용할 수 있는 최대한의 리소스 양을 제한한다.
OOMKilled(Out Of Memory)
에러를 예방할 수 있음.
쿠버네티스에서 자원사용량을 제한하거나 할당할 때의 단위와 표기법을 알아보자. 우선 간략하게 선요약을 하자면 아래와 같다.
아래의 Deployment를 생성하는 템플릿을 예시로 들겠다. 해당하는 Pod에 리소스를 제한하려고 하면 .spec.containers[ ].resources.
에 requests
혹은 limits
을 추가하여 자원사용량을 설정할 수 있다.
# nginx-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
resources:
requests:
cpu: 0.1
memory: 200M
CPU는 리소스 본인이 사용할 수 있는 CPU의 코어개수로 표시한다.
위의 예제코드에서 requests.cpu
는 0.1
이다. 이 표현은 100m
(백 밀리코어)와 동일한 표현이다.
소수점 혹은 m을 붙여서 밀리코어로 설정하거나 둘 중하나의 표현방식을 선택하면 되는데 소수점으로 설정하게 되면 정밀하게 설정하기에는 조금 복잡할 수 있어서 100m
같은 형식이 선호될 수도 있다.
메모리는 별도의 기호를 사용하지 않으면 바이트(Byte)단위로 측정된다.
위의 예제코드에서는 200M
으로 표기하였으므로 200 메가 바이트를 설정한 것이다.