2016-11-11 12 views
1

私はいくつかのラボマシンでKubernetes 1.2.0を実行しています。マシンはスワップを有効にしています。マシンは他の目的にも使用されるため、私はグローバルにスワップを無効にすることはできません。kubeletのスワップを無効にする

私は次の問題を抱えています。メモリー制限付きのポッドを開始すると、コンテナーはメモリー限界に達した後にスワップを開始します。私は容器が殺されることを期待する。

this issueによれば、この問題は修正されていますが、それでもKubernetes 1.2.0で発生します。稼働中のコンテナをdocker inspectで確認すると、MemorySwap = -1MemorySwappiness = -1が表示されます。メモリの制限が低いポッドを起動すると、ほぼすぐにスワップが開始されます。

私はいくつかのアイデアを持っていたが、私はこれらのいずれかを実行する方法を見つけ出すことができませんでした:

  • 変更にドッカーのデフォルト設定をので、何のコンテナがにパラメータを追加
  • を交換することが許可されていませんKubernetesコンテナの設定には、ドッキングウィンドウのcgroup内で--memory-swappiness=0
  • フィドルを渡し、私はスワップを開始するコンテナを防ぐことができますどのようにグループ

のためにスワップ禁止して?

答えて

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ではデフォルトでスワップが無効になっていることを確認できます。

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

私のテスト画像をドッカーに出力をフラッシュするために加えてthis small programに基づいています:例えばローカルドッカーコンテナ、set memory-swap == memory、それをテストするには

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

あなたはすることができますまた、docker-compose uponly 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

関連する問題