본문 바로가기
데브옵스 이야기

K8s의 Memory? (RAM, Storage)

by lakescript 2024. 8. 2.

Memory?

많은 사람들이 메모리와 스토리지를 동일한 것으로 생각하기도 합니다. 아마 지칭하는 단위를 GB를 사용하기 때문이 아닐까 싶은데요.

둘 다 용량을 나타내는 GB단위를 사용하는 이유는 기본적으로 용량을 측정하는 표준 단위이기 때문입니다.

 

엄연히 다른 Memory

우리가 흔히 말하는 메모리에는 크게 RAM이라고 하는 휘발성 메모리, Storage라고 불리는 영구적 메모리 2가지가 존재합니다. 

 

K8s의 Memory

이 두 가지의 차이를 살펴보기 전에 먼저 Pod를 정의하는 manifest file에 선언하는 resource.limit.memory와 resource.request.memory는 무엇을 의미할까요?

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: example-container
    image: example-image
    resources:
      requests:
        memory: "256Mi"
      limits:
        memory: "512Mi"

 

resource.request.memory

...
    resources:
      requests:
        memory: "256Mi"
...

 

컨테이너가 시작될 때 필요한 최소 메모리의 양으로 최소 RAM 메모리의 양입니다. request.memory는 kube-scheduler가 Pod를 어느 노드에 배치할 지 결정할 때 사용되며, 선언된 메모리 양만큼의 메모리가 있는 node를 선택하여 배포됩니다. 하지만 실제로는 이 Pod가 배포될려면 이정도의 메모리는 있어야돼~ 라는 개념이므로 Pod가 실제 사용할 메모리의 양이 아닙니다.

 

resource.limit.memory

...
    resources:
      limit:
        memory: "512Mi"
...

Pod, 정확히는 Container가 사용할 수 있는 최대 RAM 메모리의 양입니다. 이 값을 설정하게 되면 Pod(Container)가 이 값을 초과하여 메모리를 사용하지 못하게 제한합니다. 만약, Pod(Container)가 이 값을 초과하여 메모리를 사용하려고 하면 Kubernetes는 클러스터 전체의 메모리 리소스를 보호하기 위해 OOM을 발생하여 종료시키게 됩니다.

여기서 사용하는 Memory는 EC2 내의 RAM입니다. 

 

Memory가 RAM이야? Storage야?

RAM은 휘발성 메모리로 인스턴스가 중지되거나 재부팅되면 데이터가 삭제되는 특징이 있습니다. 하지만 속도가 매우 빠르며 CPU가 직접 접근하여 데이터를 읽고 쓰는데 사용됩니다. 또한 애플리케이션이 실행 중인 동안 데이터와 명령어를 임시로 저장합니다. 

 

EBS의 Storage는 비휘발성 메모리로 인스턴스가 중지되거나 재부팅되더라도 데이터가 남아있게 됩니다. 하지만 속도가 상대적으로 느리고 네트워크를 통해 데이터를 읽고 쓰기 때문에 RAM보다 접근 속도가 느립니다. 또한, 장지적인 데이터 저장용도로 사용하기 때문에 FileSystem, DB등 영구적 데이터를 저장하는데 적합합니다.

 

예를들면 RAM은 책상 위에 놓여져 있는 작업 중인 문서와 같아서 작업을 처리하기 위해 손이 닿는 곳에 두어 빠르게 작업을 할 수 있고, EBS Storage는 서랍 속에 보관된 파일과 같아서 필요할 때에 꺼내어 사용할 수 있습니다.


왜 Pod는 EC2의 RAM이 필요하지?

RAM은 CPU가 데이터를 빠르게 접근하고 처리할 수 있도록 돕기 때문에 disk에 비해 매우 빠른 속도로 읽기/쓰기 작업이 가능하며 애플리케이션이 실행될 때 필요한 명령어와 데이터를 RAM에 적재함으로 써 CPU가 빠르게 명령어를 실행하고 데이터를 처리할 수 있습니다. 즉, 빠른 데이터 접근, 실시간 처리, 메모리 캐싱, 자원 관리 등 여러 측면에서 RAM은 중요한 역할을 합니다. 이로 인해서 애플리케이션은 최적의 성능을 발휘할 수 있으며, Kubernetes 클러스터는 효율적이고 안정적으로 운영될 수 있습니다.

728x90