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

от автора

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

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 

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

[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 

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


ссылка на оригинал статьи https://habr.com/ru/articles/747118/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *