2016-11-11 2 views
1

저는 많은 실험실 기계에서 Kubernetes 1.2.0을 사용하고 있습니다. 머신은 스왑을 사용할 수 있습니다. 기계가 다른 용도로 사용되기 때문에 전 세계적으로 스왑을 비활성화 할 수 없습니다.kubelet에서 스왑을 비활성화하십시오.

다음과 같은 문제가 발생합니다. 메모리 제한이있는 창을 시작하면 컨테이너가 메모리 한도에 도달 한 후 스와핑을 시작합니다. 나는 컨테이너가 죽길 기대한다.

this issue에 따르면이 문제는 해결되었지만 여전히 Kubernetes 1.2.0에서 발생합니다. 실행중인 컨테이너를 docker inspect으로 확인하면 MemorySwap = -1MemorySwappiness = -1을 볼 수 있습니다. 메모리 제한이 낮은 창을 시작하면 거의 즉시 스왑이 시작됩니다.

나는 몇 가지 아이디어를 가지고 있지만 이들 중 하나를 수행하는 방법을 알아낼 수 없습니다 :

  • 변경 그래서 용기는
  • 가에 매개 변수를 추가 교환 할 수 없습니다 도커의 기본 설정을 이

가 어떻게 스와핑 시작하는 용기를 방지 할 수있는 그룹에 대한 교환 고정 표시기의 cgroup에 함께 --memory-swappiness=0

  • 바이올린을 전달하고 허용하지 않도록 컨테이너 설정을는 Kubernetes?

  • 답변

    1

    Kubernetes, 특히 kubelet, fails if swap is enabled on Linux since version 1.8 (flag --fail-swap-on=true), Kubernetes can't handle swap. 즉, Kubernetes에서 스왑이 기본적으로 비활성화되어 있는지 확인할 수 있습니다.

    지역 도커 용기, set memory-swap == memory 예에서 테스트하려면 :

    내 테스트 이미지는 고정 표시기 출력을 플러시 추가로 this small program을 기반으로

    docker run --memory="10m" --memory-swap="10m" dominikk/swap-test

    :

    setvbuf(stdout, NULL, _IONBF, 0); // flush stdout buffer every time 
    

    당신은 할 수 있습니다 docker-compose up (only works for version <= 2.x)으로 테스트하십시오.

    version: '2' 
    services: 
        swap-test: 
        image: dominikk/swap-test 
        mem_limit: 10m 
        # memswap_limit: 
        #   -1: unlimited swap 
        #   0: field unset 
        #   >0: mem_limit + swap 
        # == mem_limit: swap disabled 
        memswap_limit: 10m 
    
    0

    주위를 놀고 있다면 스왑을 끄지 않아도됩니다. 물건은 계속 실행되지만 자원 격리는 제대로 작동하지 않습니다. Kubernetes를 심각하게 사용하여 리소스를 격리해야하는 경우 시스템에서 다른 작업을해서는 안됩니다.

    +0

    "물건은 계속 실행되지만 리소스 격리는 제대로 작동하지 않습니다"- 이는 사실이 아닙니다. 잠재적으로 스왑이 활성화 된 상태에서 30GB 메모리를 사용하는 작업이 있으며 완료하려면 * 일 *이 걸립니다. 따라서 성능 차이는 엄청납니다. 나는 컴퓨터가 유휴 상태 일 때 작업을 실행하도록 Kubernetes를 설정했습니다. 기계가 사용될 때, 노드는 자동으로 배수됩니다. 이것이 완벽하지는 않지만 교환 문제가 없다면 완벽하게 작동합니다. – morxa