Kubernetes에서 스왑을 비활성화하는 이유


35

는 Kubernetes 1.8 이후, 내가 비활성화 내 노드에서 스왑 (또는 설정해야 할 것 같습니다 --fail-swap-onfalse).

Kubernetes가 스왑 비활성화를 주장하는 기술적 이유를 찾을 수 없습니다. 성능상의 이유입니까? 보안 이유? 이유가 문서화되지 않은 이유는 무엇입니까?

답변:


28

kubernetes의 아이디어는 인스턴스를 최대한 100 %에 가깝게 묶는 것입니다. 모든 배포는 CPU / 메모리 제한으로 고정해야합니다. 따라서 스케줄러가 포드를 머신에 보내면 스왑을 전혀 사용하지 않아야합니다. 속도가 느려지기 때문에 교환하고 싶지 않습니다.

주로 성능을위한 것입니다.


2
나중에 아이디어는 노드에 3gig 만 무료로 사용할 수 있고 새 포드가 4 ..
Mike

이것은 나에게별로 이해가되지 않습니다 .OS가 눈에 띄지 않는 방식으로 성능을 손상시키지 않고 자주 사용하지 않는 메모리 페이지를 스왑에 넣도록하여 노드를 조금 더 꾸밀 수 있습니까?
Frederik Baetens

13

내가 이해하는 것처럼 kubelet은 스왑 상황을 처리하도록 설계되지 않았으며 Kubernetes 팀은 포드가 호스트의 메모리에 적합해야한다는 목표로 이것을 구현하지 않을 것이기 때문입니다.

에서 이 문제

스왑 지원은 쉽지 않습니다. 보장 된 포드는 절대 스왑이 필요하지 않습니다. 버스트 가능한 포드는 스왑없이 요청을 충족시켜야합니다. BestEffort 포드는 보증하지 않습니다. kubelet은 이제 포드 전체에서 적절한 양의 예측 가능한 동작을 제공 할 수있는 스마트 한 기능이 없습니다.


10

스왑을 올바르게 사용하지 않는 TL; DR은 게으른 해킹 일 뿐이며 메모리 하위 시스템에 대한 이해가 부족하고 기본적인 시스템 관리 기술이 부족함을 보여줍니다. 인프라 서비스를 설계하고 이러한 시스템을 이해하지 못하는 것은 실패로 끝날 것입니다.

그래서 이것에 대한 논평이 있습니다. 이것은 기능이나 요구 사항보다는 게으름처럼 보입니다. 스왑을 제대로 처리하고 메모리를 분석하며 스왑을 누르지 않고 메모리 하위 시스템을 올바르게 활용하는 방법을 결정하는 것이 절대적으로 가능합니다. 이 도구에는 다양한 도구가 내장되어 있으며 프로세스가 스왑을 매우 쉽게 활용하지 못하므로 성능 포인트가 잘못되었음을 보장 할 수 있습니다. 이 계측기를 사용하지 않는 것은 단순히 게으른 코딩이며 스왑을 완전히 제거하면 시스템 성능이 저하됩니다. 여기서 핵심은 올바르게 사용하는 것입니다. 포드를 디스크로 교체하면 성능에 영향을 미치지 만 디스크 로 교체 해야 할 사항 이 많이 있습니다.

또한 Linux 커널은 스왑을 사용하도록 설계되었으며 완전히 비활성화하면 부정적인 결과가 발생합니다. 이것을 처리하는 더 좋은 방법은 포드를 메인 메모리에 고정하고 디스크로 스왑 할 수 없도록하고 vfs 캐시 압력을 줄여 절대적으로 필요한 경우가 아니라면 스왑되지 않도록하는 것입니다. 주 메모리가 소진되면 MALLOC이 실패합니다.

컨테이너의 프로세스가 실패하거나 컨테이너를 OOM 킬러 (kill killer)로 죽인 프로세스에 따라 약간 비참한 결과가 발생할 수 있습니다. 그러나 이러한 컨테이너에서 실행되는 프로세스는 상태 비 저장 상태와 임시 상태 여야하지만 20 년 동안 실행 된 시스템에서 모든 사람이 의도 한 디자인을 100 % 문자 그대로 따르는 것을 보지 못했습니다.

또한 이것은 비 휘발성 메모리와 같은 미래 기술과 하이브리드 디스크 / 메모리 시스템을 사용하여 주 메모리를 크게 확장하는 데 사용할 수있는 인텔 xpoint와 같은 최신 메모리 시스템을 고려하지 않습니다. 이러한 유형의 시스템을 사용하면 보조 주 메모리로 직접 사용하거나 스왑 파일을 사용하여 성능에 미치는 영향이 거의없는 주 메모리를 확장 할 수 있습니다.


2
나는 kubernetes 프로젝트의 관리자가 게으른 것으로 의심합니다. 쿠 버네 티스에서 운영되는 컨테이너화 된 생태계의 맥락에서 의도 된 주장은없는 것 같습니다.
spuder

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.