Container/Kubernetes

쿠버네티스에서는 스왑이 기본적으로 비활성화 된다?

검정비니 2023. 12. 31. 23:27
728x90
반응형

알다시피, 운영체제는 더 많은 프로세스들이 메모리를 더 안정적으로 사용할 수 있도록 하기 위해 덜 사용되는 데이터를 메모리에서 디스크로 옮기는 스왑(swap)을 지원한다.

이를 통해 서버는 더 안정적으로 메모리를 관리할 수 있게 되는 것이다.

 

그런데, 쿠버네티스의 경우 기본 정책 상 swap을 비활성화시키도록 정책이 설정되어 있다.

물론 23년 8월 경에 알파 릴리스의 형태로 swap이 활성화된 형태로 파드를 생성할 수 있게 하는 설정이 추가되긴 했으나 아직은 프로덕션 환경에서 사용하기에는 시기상조로 보인다.

 

쿠버네티스에서 스왑 비활성화를 더 선호하는 이유는 "보안"이 가장 큰 이유로 볼 수 있다.

별도의 네임스페이스를 만들어서 마운트시킨 쿠버네티스 환경에서 굳이 격리된 데이터를 디스크로 스왑하는 작업은 "격리"로 인해 얻을 수 있는 많은 이익을 포기하게 만들 수 있기 때문이다.

 

그럼에도 swap 활성화에 대한 설정이 개발 시작된 이유는 파드마다 특성이 다르기 때문일 것이다.

Guaranteed pod의 경우에는 swap을 전혀 필요로 하지 않겠지만, Burstable pod나 Besteffort pod는 상황에 따라 swap이 필요할 수도 있다는 의견이 쿠버네티스 커뮤니티에서 자주 제기되었고, GitHub 이슈를 통해 많은 엔지니어들이 수많은 토론 끝에 swap이 필요한 경우에는 제한적으로 활성화시킬 수 있도록 하는 방법으로 결론이 나게 되었다.

 

최신 버전의 쿠버네티스에서는 kubelet 설정에 "memorySwap"을 아래와 같이 추가하고, "failSwapOn" 설정을 비활성화시키게 되면 파드에 swap을 활성화시키는 것이 가능해지게 되었다.

# this fragment goes into the kubelet's configuration file
memorySwap:
  swapBehavior: UnlimitedSwap

 

모든 기술이 그렇듯 개발 초기에는 안정적이지 않거나 발견되지 않은 사이드이팩트가 있을 수 있으니, 곧바로 production 환경에 적용하기 보다는 개발 환경 등에서 실험적으로 사용을 해보면서 추이를 보는 것이 좋을 것 같다.

 

 

참고자료

https://github.com/kubernetes/kubernetes/issues/53533

https://discuss.kubernetes.io/t/swap-off-why-is-it-necessary/6879

https://kubernetes.io/blog/2023/08/24/swap-linux-beta/

 

반응형