Как стать автором
Обновить

Пример настройки Linux для высоконагруженных кластеров Kubernetes

Время на прочтение5 мин
Количество просмотров9.5K

Довольно часто можно встретить примеры настройки (тюнинга) сетевого стека Linux для высоконагруженных систем, однако некоторые из этих гайдов сильно устарели и не используют рекомендованные подходы к конфигурированию системы. В этом обзоре мы рассмотрим подготовку Linux, для использования в качестве узла плоскости управления Kubernetes.

Tuned

Tuned – это демон, который использует udev для отслеживания подключенных устройств
и статически или динамически настраивает системные настройки используя выбранный профиль.

Tuned устанавливается вместе с коллекцией профилей под определенные типы нагрузки: network-latency, powersave, desktop и другие.

Для установки tuned на дистрибутивах использующих yum/dnf:

yum install -y tuned
systemctl enable --now tuned
systemctl status tuned

Для того, чтобы вывести активный профиль:

tuned-adm active

Current active profile: virtual-host

Для того, чтобы вывести список со всеми доступными профилями tuned:

tuned-adm list
Available profiles:
- accelerator-performance     - Throughput performance based tuning with disabled higher latency STOP states
- aws                         - Optimize for aws ec2 instances
- balanced                    - General non-specialized tuned profile
- desktop                     - Optimize for the desktop use-case
- hpc-compute                 - Optimize for HPC compute workloads
- intel-sst                   - Configure for Intel Speed Select Base Frequency
- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption
- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks
- optimize-serial-console     - Optimize for serial console use.
- powersave                   - Optimize for low power consumption
- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads
- virtual-guest               - Optimize for running inside a virtual guest
- virtual-host                - Optimize for running KVM guests
Current active profile: network-latency

Для того, чтобы активировать профиль «network-latency»:

tuned-adm profile network-latency
tuned-adm active
Current active profile: network-latency

Настройки для профиля «network-latency»:

cat /usr/lib/tuned/network-latency/tuned.conf
#
# tuned configuration
#

[main]
summary=Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance
include=latency-performance

[vm]
transparent_hugepages=never

[sysctl]
net.core.busy_read=50
net.core.busy_poll=50
net.ipv4.tcp_fastopen=3
kernel.numa_balancing=0

[bootloader]
cmdline_network_latency=skew_tick=1

С помощью директивы «include» в этом профиле включены настройки из «latency-performance».

Существуют профили tuned с настройками для высоконагруженных баз данных:

yum search tuned-profiles
yum install -y tuned-profiles-mssql tuned-profiles-oracle

По-умолчанию tuned работает в режиме демона Linux, но это можно поменять добавив daemon = 0 в /etc/tuned/tuned-main.conf.

Создаем кастомный профиль tuned

Профили tuned по-умолчанию находятся в каталоге /etc/tuned/<profile_name>/tuned.conf или в /usr/lib/tuned/<profile_name>/tuned.conf.

Создайте директорию для вашего профиля:

mkdir /usr/lib/tuned/custom

Создайте новый конфиг в директории профиля:

touch /usr/lib/tuned/custom/tuned.conf

Сделайте файл исполняемым:

chmod +x /usr/lib/tuned/custom/tuned.conf

Откройте для редактирования (vim /usr/lib/tuned/custom/tuned.conf) созданный профиль и добавьте следующие строчки:

[main]
summary=Кастомизированный профиль tuned

В списке с доступными профилями должен появится новый пресет:

tuned-adm list | grep custom
- custom                      - Кастомизированный профиль tuned

Скопируйте пример профиля «железного» хоста или виртуальной машины предназначенной для установки узлов плоскости Kubernetes:

[main]
summary=Кастомизированный профиль tuned

[cpu]
governor=performance
energy_perf_bias=performance
min_perf_pct=100

[vm]
transparent_hugepages=never

[net]
nf_conntrack_hashsize=131072

[sysctl]
net.ipv4.ip_forward=1
net.core.busy_read=50
net.core.busy_poll=50

# Увеличиваем значения параметров net.nf_conntrack_max и net.netfilter.nf_conntrack_max,
# отвечающих за максимальное количество сетевых соединений.
net.netfilter.nf_conntrack_max=1048576
net.nf_conntrack_max=1048576

# https://datatracker.ietf.org/doc/html/rfc7413
# https://repository.ihu.edu.gr/xmlui/bitstream/handle/11544/29857/Grendas_Dimitrios_Dissertation_IHU_Cybersecurity_2021.pdf?sequence=1
# Для сборки nginx с поддержкой TCP Fast Open нужно использовать флаг `-DTCP_FASTOPEN=23`
# https://github.com/VKCOM/nginx-quic/issues/1
net.ipv4.tcp_fastopen=3

# https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_for_real_time/7/html/tuning_guide/reduce_tcp_performance_spikes
net.ipv4.tcp_timestamps=0

kernel.sched_autogroup_enabled=0
kernel.sched_migration_cost_ns=5000000
kernel.sched_min_granularity_ns=10000000

# https://github.com/kubernetes-sigs/kubespray/issues/8825
net.ipv4.conf.all.arp_announce=2
net.ipv4.neigh.default.gc_thresh1=8192
net.ipv4.neigh.default.gc_thresh2=32768
net.ipv4.neigh.default.gc_thresh3=65536
net.ipv6.neigh.default.gc_thresh1=8192
net.ipv6.neigh.default.gc_thresh2=32768
net.ipv6.neigh.default.gc_thresh3=65536

fs.inotify.max_user_watches=65536
fs.inotify.max_user_instances=8192

# Разрешаем больше SYN соединений
net.ipv4.tcp_max_syn_backlog=100000
# И больше запросов на сокет
net.core.somaxconn=100000

# Увеличиваем значения по-умолчанию для сокетов TCP. Три значения: minimum, default, maximum.
net.ipv4.tcp_wmem='4096 12582912 16777216'
net.ipv4.tcp_rmem='4096 12582912 16777216'

# Расширяем диапазон динамических портов
net.ipv4.ip_local_port_range='10240 65535'

vm.max_map_count=262144

[sysfs]
/sys/module/nvme_core/parameters/io_timeout=4294967295
/sys/module/nvme_core/parameters/max_retries=10

Примените данный профиль в системе:

tuned-adm profile custom

Для того, чтобы проверить работу tuned выполните следующую команду:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
performance

Благодаря scaling_governor, можно выбрать оптимальную схему управления частотой процессора, что влияет на потребление электроэнергии и производительность:

cpupower -c all frequency-info

Теперь если вы поменяете значение scaling_governor на powersave (режим энергосбережения) и снова выполните команду:

cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
powersave

Полезные ссылки

Теги:
Хабы:
Всего голосов 9: ↑7 и ↓2+5
Комментарии1

Публикации