Недавно у нас была буря 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 капсул? Установите значения так, чтобы у вас не закончилось место.