kubeflow를 배우기 전에 먼저 쿠버네티스 구축을 해야하는데, 스왑메모리를 꼭 끄라는 설명이 있어 왜 그런지 호기심이 생겼다.
이 궁금증을 해결하면서 스왑 메모리가 무엇인지도 제대로 알아보고 쿠버네티스와 스왑 메모리의 관계도 알아보려 한다.
swap 메모리란
우선 swap 메모리가 무엇인지부터 간단하게 살펴보자. 스왑(swap)이란 물리 메모리(RAM)의 용량이 부족할 때 하드 디스크의 일부 공간을 메모리처럼 사용하는 것이다.
이러한 동작은 swap in과 swap out으로 구분할 수 있다. 현재 메모리에 최대 100개의 프로세스가 올라갈수 있는데 이때, 101번째 프로세스가 추가로 올라가야 할 경우를 생각해보자.
swap out은 100개의 실행된 프로세스중 특정 프로세스를 잠시 Swap Partition으로 이동시켜 놓는 것을 말한다. 반대로 swap in은 스왑으로 이동했던 프로세스에서 이벤트가 올 경우, 다시 메모리 영역으로 이동시키는 것을 말한다.
왜 스왑 메모리를 꺼놓아야 할까
설명만으로는 스왑 메모리가 굉장히 좋은 기능을 하는 것 같은데 왜 쿠버네티스를 구축할 때는 이 기능을 꺼놓아야할까? 이유는 쿠버네티스의 kubelet이 이러한 상황을 처리하도록 만들어지지 않았기 때문이다.
쿠버네티스는 Pod를 생성할 때, 필요한 만큼의 리소스를 할당 받아서 사용하는 구조이다. 따라서 메모리 Swap을 고려하지 않고 설계되었기 때문에, 쿠버네티스 클러스터 Node들은 모두 Swap 메모리를 비활성화 해줘야 한다.
정리해보면, Swap 기능은 본래 가용된 메모리보다 더 큰 메모리 할당을 가능하도록 하기 위함인데, 쿠버네티스 철학은 주어진 인스턴스의 자원을 100% 가깝게 사용하는 것이 목표인데, 스왑 메모리를 켜놓으면 인스턴스 자원이 일관되지 않아 이러한 철학에 부합되지 않는 것이다.
참고
쿠버네티스 클러스터 구축 - Docker & 쿠버네티스 클러스터 설치
'Docker & Kubernetes' 카테고리의 다른 글
Kubernetes context의 역할 알아보기 (0) | 2023.08.27 |
---|---|
Docker in Docker 사용해보기 (0) | 2023.07.31 |
JSON과 비교를 통한 YAML 알아보기 (0) | 2022.03.31 |
kubeadm란? 쿠버네티스에서의 클러스터/역할 (2) | 2022.03.28 |
우분투를 도커에서 실행할 때 착각할 수 있는 점 (0) | 2022.02.02 |