더듬이

[Kubernets] kubelet실행시 왜 swap 메모리를 꺼야하나요? (부제 : Swap 메모리란? ) 본문

카테고리 없음

[Kubernets] kubelet실행시 왜 swap 메모리를 꺼야하나요? (부제 : Swap 메모리란? )

dbhang 2022. 2. 9. 18:34

가끔 vm 이나 장비 리부트 이후에 kubelet start안되는 경우가 있다.  (K8s 1.8X 기준)

이런경우에 로그를 보면 

 

running with swap on is not supported 라는 문구를 자주 확인 있다.

 

Kubelet 켜려는데 Swap메모리가 활성화 되어있어서 킬수 없다는 뜻이다.

그럼 swapoff -a. 이후에 실행 하면 실행됨을 확인 있다.

 

 

여기서 swap 메모리가 무엇인지 먼저 짚고 넘어가려한다.

메모리는 이름을 번역하면 기억장치이며 실제로도 정보를 기억하는 역할을 한다 . 

우리가 보통 메모리라고생각하는 것은 주기억장치 하나인 RAM이다 모든 정보를 전기신호로 담아두기때문에 빠른 연산이 가능하다는 장점이 있는 휘발성 메모리이다 .

그럼 swap memory 뭐일까?

 

일단 RAM 비싸고 모든 리소스가 그렇듯 제한이 있다. 만약 연산에 필요한 데이터는 17기가이고 우리의 RAM 16기가 짜리라고 보면 

물리적으로 사용할수 있는 메모리가 부족해 진다.

이때 hdd 메모리 이용하여 일부를 hdd 저장해놓고 ram 메모리 블럭이 자리가 나면 다시 이동시키는 식으로 데이터의 저장위치를 교환해가며 16기가램으로 17기가의 메모리가 필요한 연산을 진행할 있다. 이따 사용하는 메모리 공간을 swap memory 공간이라고한다.

 

 

이렇게 swap memroy 를 사용하는 방법은 원래 가진 memory 보다 더 많은 메모리를 사용할수 있게 하는 유용한 방법이지만 kubernetes에서는 현재 지원하고 있지는 않다. 

그 이유는

  • 컨테이너의 속도가 변동적이다. (swap메모리를 어떤 컨테이너가 쓰면서 느려지는지 예측할 수없다 . )
  • swap을 지원하게 개발하려면 고려사항이 많다.
  • 개발 우선순위가 낮다.

등등을 언급했다. 

자세한 내용은 아래 issues 에서 토론 내용을 보면 된다 

https://github.com/kubernetes/kubernetes/issues/7294#issuecomment-240608755

 

결론:  kubernetes 에서 swap메모리를 지원하지 않는 이유는 kubernetes 개발팀의 swap 메모리를  지원에 대한 우선순위가 낮기 때문으로 보인다 . 

 

내 생각에도 api container를 kubernetes에 띄웠는데 갑자기 스왑메모리 사용을 위해서 api 응답 속도가 느려진다면 별로 일 것 같긴하다.

하지만!! 나는 사용자이기때문에! node 몇개에만 swap을 켜놓고 node-label로 관리하면서 처리속도 중요하지 않은 애들만 모아놓을 수 있으면 좋을것 같은데 ㅠㅠ 

나처럼 원하는 사람이 많으니 언젠가 지원해 줄 것 처럼 보이니 기다려야겠다. >< 

 

 

 

 Kubernetes v1.22 부터 swap memory 지원에 대한 내용이 나왔다 !! (존버는 승리한다)

https://kubernetes.io/blog/2021/08/09/run-nodes-with-swap-alpha/