[Kubernetes] # 자원사용량 설정과 표기

empty·2021년 1월 18일
0

Kubernetes

목록 보기
6/7

MSA기반으로 여러 개의 작은 프로세스를 실행하게 되면 노드 하나에 여러개의 파드를 실행하는 일이 자주 존재한다. 이 때 자원사용량이 많은 파드가 노드 하나에 모여있다면 다음과 같은 문제점들이 발생한다.

  • 파드들의 성능이 나빠진다.
  • 전체 클러스터의 자원 사용 효율도 낮아진다.

이런 문제점을 해소하기 위하여 실행되는 파드와 컨테이너에 자원사용량을 설정할 수 있다.

템플릿파일에 requestslimits으로 자원사용량을 설정할 수 있는데 이 둘의 차이점은 무엇인가?

requests (리소스 요청)

requests는 파드 및 컨테이너에 필요한 최소한의 리소스 양을 요청할 수 있다.

  • 설정된 만큼의 자원의 여유가 있는 노드가 있어야 파드를 그곳에서 실행해서 스케줄링한다.

만약 여유자원이 없다면 Pending 상태로 실행되며 클러스터안에 여유가 생길때 까지 대기한다.

limits (리소스 제한)

limits는 파드 및 컨테이너에 사용할 수 있는 최대한의 리소스 양을 제한한다.

  • requests가 설정되어 있다면 그 리소스와 같거나 더 커야한다.

OOMKilled(Out Of Memory)에러를 예방할 수 있음.

자원사용량 표기

쿠버네티스에서 자원사용량을 제한하거나 할당할 때의 단위와 표기법을 알아보자. 우선 간략하게 선요약을 하자면 아래와 같다.

  • CPU는 본인이 사용할 수 있는 자원의 코어개수로 표시
  • 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는 리소스 본인이 사용할 수 있는 CPU의 코어개수로 표시한다.

위의 예제코드에서 requests.cpu0.1 이다. 이 표현은 100m(백 밀리코어)와 동일한 표현이다.

  • 0.1은 CPU코어 하나의 연산능력을 100이라고 하였을 때 10%만큼 할당하겠다는 뜻이다.

❗소수점 or m

소수점 혹은 m을 붙여서 밀리코어로 설정하거나 둘 중하나의 표현방식을 선택하면 되는데 소수점으로 설정하게 되면 정밀하게 설정하기에는 조금 복잡할 수 있어서 100m 같은 형식이 선호될 수도 있다.

Memory

메모리는 별도의 기호를 사용하지 않으면 바이트(Byte)단위로 측정된다.

  • 대용량을 바이트로 표기하기에는 불편하기 때문에 단위용량을 나타내는 기호인 십진법 접두어와 이진법 접두어를 사용할 수도 있다.

위의 예제코드에서는 200M 으로 표기하였으므로 200 메가 바이트를 설정한 것이다.

십진법 접두어

  • E(Exa)
  • P(Peta)
  • T(Tera)
  • G(Giga)
  • M(Mega)
  • K(Kilo)

이진법 접두어

  • Ei(Exbi)
  • Pi(Pebi)
  • Ti(Tebi)
  • Gi(Gibi)
  • Mi(Mebi)
  • Ki(Kibi)

0개의 댓글