2016-11-11 9 views
1

Я запускаю Kubernetes 1.2.0 на ряде лабораторных машин. У машин есть своп. Поскольку машины используются и для других целей, я не могу отключить обмен в глобальном масштабе.Отключить обмен на кубе

Я наблюдаю следующую проблему: если я запускаю контейнер с ограничением памяти, контейнер начинает заменять его после достижения предела памяти. Я ожидаю, что контейнер будет убит.

В соответствии с this issue проблема была исправлена, но она по-прежнему встречается с Kubernetes 1.2.0. Если я проверю работающий контейнер с docker inspect, то я вижу, что MemorySwap = -1 и MemorySwappiness = -1. Если я запустил стручок с низкими пределами памяти, он начнет почти сразу заменять.

У меня были некоторые идеи, но я не мог понять, как сделать любой из них:

  • Изменить настройки по умолчанию в Докер так ни один контейнер не разрешается менять
  • Добавить параметр в Kubernetes контейнер конфигурации, поэтому она передает --memory-swappiness=0
  • скрипки с контрольной группой Докера и запретить подкачку группы

Как я могу предотвратить контейнеры, чтобы начать обмен?

ответ

1

Kubernetes, в частности kubelet, fails if swap is enabled on Linux since version 1.8 (flag --fail-swap-on=true), as Kubernetes can't handle swap. Это означает, что вы можете быть уверены, что обмен по умолчанию отключен на Kubernetes.

Чтобы проверить его в локальном контейнере Докер, set memory-swap == memory, например:

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

Мой тестовый образ основан на this small program с добавлением промывать выход в Докер:

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

«Материал все равно будет работать, но изоляция ресурсов не будет работать» - это не так. У меня есть работа, которая потенциально использует память 30 ГБ, с включенной возможностью обмена, для завершения требуется * дней *. Таким образом, разница в производительности огромна. Я создал Kubernetes для запуска заданий, пока машины не работают; когда машина используется, узел сливается автоматически. Хотя это не идеально, это будет отлично работать, если у меня не будет проблемы с обменом. – morxa

 Смежные вопросы

  • Нет связанных вопросов^_^