Swap 메모리?
- Swap은 물리 메모리(RAM) 부족 시 하드 디스크의 일부 공간을 메모리처럼 사용하는 것
- 하드 디스크 메모리를 이용하여 일부를 하드디스크에 저장하고 RAM에 메모리 블럭 자리가 생기게 되면 다시 RAM으로 이동시키는 식으로 데이터의 저장 위치를 교환해가며 16GB의 램으로 17GB의 메모리가 필요한 연산을 진행 할 수 있다.
- 이 동작은 swap in, swap out으로 구분할 수 있다.
swap out
- 만약 메모리에 최대 100개의 프로세스가 실행될 수 있는데, 101번째 프로세스가 추가로 실행해야 할 경우 swap out은 100개의 실행된 프로세스 중 101번째 프로세스를 잠시 swap partition으로 이동시켜 놓는 것을 의미한다.
swap in
- swap in은 swap으로 이동한 프로세스에서 이벤트가 올 경우, 다시 메모리 영역으로 이동시키는 것을 의미한다.
Swap off를 해야하는 이유
- Kubernetes의 컴포넌트 kubelet은 이러한 상황을 처리하도록 설계 되지 않았기 때문에, 안정화된 쿠버네티스에서는 지원하지 않는다.(v1.22 alpha version, v1.27 beta version swap 지원)
- 쿠버네티스에서 pod를 생성할 때, 필요한 만큼의 리소스를 할당 받아 사용하는 구조인데, 쿠버네티스에서는 메모리 스왑을 고려하지 않고 설계되었기 때문에 Kubernetes Cluster Node들의 swap 메모리를 비활성화 해주어야 한다.
- swap 기능은 본래 가용된 메모리보다 더 큰 메모리 할당을 가능하도록 하는 것이다 쿠버네티스는 주어진 노드의 자원을 100%에 가깝게 사용하는것이 목적이기에 swap 사용은 노드 자원이 일관 되지 않아 swap off를 권장한다.
- 컨테이너의 속도는 변동적인데 swap 메모리를 어떤 컨테이너가 쓰며, 느려지고 있는지 예측할 수 없다.
swap off 하기
- kubernets가 swap을 관리하므로, filesystem에 적용된 swap을 off 해야한다.
- swap off를 하지않은 상태에서 reboot을 하게 되면
running with swap on is not supported 문구가 출력된다.
- kubelet을 동작시키기 위해서 swap 메모리를 비활성화 하여야한다.
sudo swapoff -a
$ sudo sed -i '/ swap / s/^/#/' /etc/fstab