Назад | Перейти на главную страницу

как прилично настроить net.ipv4.neigh.default.gc_thresh_n

Недавно у нас была буря kernel: neighbour: arp_cache: neighbor table overflow! ошибки на некоторых узлах нашего кластера кубернетов.

После исследования мы выяснили, что нам нужно поднять наши серверы. net.ipv4.neigh.default.gc_thresh{1,2,3} чтобы соответствовать потребностям некоторых новых приложений, которые недавно были добавлены в наш кластер.

Проведя некоторое исследование, я не смог найти достойного способа вычислить, какие значения лучше всего подходят для этого.

Как понять, что там поставить?

Вот что я в итоге сделал:

Собраны данные со всех серверов:

for n in ip netns; do echo -en "$n: "; sudo ip netns exec $n arp -an|wc -l; done 2>&1 | grep -v 'No such file or directory' > /tmp/arp.log

count=0for i in cat /tmp/arp.log|awk '{ print $2 }'; do count=expr $count + $i; done

echo $count

rm -f /tmp/arp.log

Выяснил мою максимальную ценность, удвоил ее, и это число является моим новым gc_thresh3.

НОТА: В последних командах не учитывается то, что некоторые контейнеры используют хост-сеть, поэтому фактическое количество записей в таблице, вероятно, меньше. Поскольку попадание в оперативную память незначительное, меня это не волновало.

Посмотрим на документация:

neigh/default/gc_thresh1 - INTEGER
    Minimum number of entries to keep.  Garbage collector will not
    purge entries if there are fewer than this number.
    Default: 128

neigh/default/gc_thresh2 - INTEGER
    Threshold when garbage collector becomes more aggressive about
    purging entries. Entries older than 5 seconds will be cleared
    when over this number.
    Default: 512

neigh/default/gc_thresh3 - INTEGER
    Maximum number of non-PERMANENT neighbor entries allowed.  Increase
    this when using large numbers of interfaces and when communicating
    with large numbers of directly-connected peers.
    Default: 1024

Чтобы переполнить таблицу соседей, у вас должно быть более gc_thresh3 записи таблицы соседей. В этом случае модули Kubernetes, поскольку каждый модуль имеет собственное сетевое пространство имен с уникальным интерфейсом и уникальным MAC-адресом.

Это много контейнеров!

То, как вы настраиваете эти значения, зависит от рабочей нагрузки, которую вы ожидаете обслуживать. Было ли это разовое? Ничего не делать. Не знаете, что делать? Удвойте все и подождите, чтобы увидеть, что произойдет. Вы знаете, что у вас 5000 капсул? Установите значения так, чтобы у вас не закончилось место.