Поделиться через


Настройка конфигурации узла для пулов узлов Службы Azure Kubernetes (AKS)

Настройка конфигурации узла позволяет настраивать параметры операционной системы или параметры kubelet в соответствии с потребностями рабочих нагрузок. При создании кластера AKS или добавлении пула узлов в кластер можно настроить подмножество часто используемых параметров ОС и kubelet. Чтобы настроить параметры за пределами этого подмножества, можно использовать демон-сет для настройки необходимых конфигураций без потери поддержки AKS для узлов.

Создание кластера AKS с настраиваемой конфигурацией узла

Создание файлов конфигурации

Изменения конфигурации ОС и kubelet требуют создания нового файла конфигурации с параметрами и вашими желаемыми настройками. Если значение параметра не указано, значение по умолчанию будет задано.

Конфигурация Kubelet

Создайте файл linuxkubeletconfig.json со следующим содержимым.

{
 "cpuManagerPolicy": "static",
 "cpuCfsQuota": true,
 "cpuCfsQuotaPeriod": "200ms",
 "imageGcHighThreshold": 90,
 "imageGcLowThreshold": 70,
 "topologyManagerPolicy": "best-effort",
 "allowedUnsafeSysctls": [
  "kernel.msg*",
  "net.*"
],
 "failSwapOn": false
}

Конфигурация ОС

Создайте файл linuxosconfig.json со следующим содержимым.

{
 "transparentHugePageEnabled": "madvise",
 "transparentHugePageDefrag": "defer+madvise",
 "swapFileSizeMB": 1500,
 "sysctls": {
  "netCoreSomaxconn": 163849,
  "netIpv4TcpTwReuse": true,
  "netIpv4IpLocalPortRange": "32000 60000"
 }
}

Создание кластера с помощью пользовательских файлов конфигурации

При создании кластера можно использовать настраиваемые файлы конфигурации, созданные на предыдущих шагах, чтобы указать конфигурацию kubelet, конфигурацию ОС или оба.

Примечание.

Если при создании кластера указать конфигурацию, то эта конфигурация будет применена только к узлам в начальном пуле узлов. Для всех параметров, не настроенных в JSON-файле, будет использовано значение по умолчанию. CustomLinuxOsConfig не поддерживается для типа ОС: Windows.

Создайте новый кластер с помощью пользовательских файлов конфигурации с помощью az aks create команды и укажите файлы конфигурации. В следующем примере команды создается новый кластер с пользовательскими ./linuxkubeletconfig.json и ./linuxosconfig.json файлами:

az aks create --name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json

Добавление пула узлов с помощью пользовательских файлов конфигурации

При добавлении пула узлов в кластер можно использовать настраиваемый файл конфигурации, созданный на предыдущем шаге, чтобы указать конфигурацию kubelet. CustomKubeletConfig поддерживается для пулов узлов Linux и Windows.

Примечание.

При добавлении пула узлов Linux в существующий кластер можно указать конфигурацию kubelet, конфигурацию ОС или оба. При добавлении пула узлов Windows в существующий кластер можно указать только конфигурацию kubelet. Если при добавлении пула узлов указать конфигурацию, то эта конфигурация будет применена только к узлам в новом пуле узлов. Для всех параметров, не настроенных в JSON-файле, будет использовано значение по умолчанию.

az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --kubelet-config ./linuxkubeletconfig.json

Устранение неполадок конфигураций пользовательских узлов

Подтвердите, что параметры применены

После применения настраиваемой конфигурации узла можно подтвердить применение параметров к узлам, подключившись к узлу и убедившись sysctl , что изменения конфигурации были сделаны в файловой системе.

Поддерживаемые параметры конфигурации пользовательского узла

Пользовательская конфигурация kubelet

Настраиваемая конфигурация Kubelet поддерживается для пулов узлов Linux и Windows. Поддерживаемые параметры отличаются и описаны ниже.

Настраиваемая конфигурация Linux Kubelet

Параметр Допустимые значения или интервал По умолчанию. Описание
cpuManagerPolicy none, static ничего Статическая политика позволяет контейнерам в гарантированных pod с запросами целочисленных ресурсов ЦП обращаться к ЦП с монопольным доступом на узле.
cpuCfsQuota истина, ложь true Включить/отключить применение квоты CFS для ЦП для контейнеров с установленными ограничениями ЦП.
cpuCfsQuotaPeriod Интервал в миллисекундах (мс) 100ms Задает значение периода квоты CFS для центрального процессора.
imageGcHighThreshold 0–100 85 Процент использования дискового пространства, после достижения которого всегда выполняется очистка ненужных данных образов. Минимальное использование диска, активирующее сборку мусора. Для отключения автоматического удаления изображений установите 100.
imageGcLowThreshold 0–100, не больше imageGcHighThreshold 80 Процент дискового пространства, до достижения которого сборка ненужных образов никогда не выполняется. Минимальное заполнение диска, которое может активировать сборку мусора.
topologyManagerPolicy отсутствует, прилагается максимум усилий, ограниченный, один узел NUMA ничего Оптимизация выравнивания узлов NUMA, дополнительные сведения см. здесь.
allowedUnsafeSysctls kernel.shm*, , kernel.msg*kernel.sem, fs.mqueue.*net.* нет Разрешенный список ненадежных sysctls или ненадежных шаблонов sysctls.
containerLogMaxSizeMB Размер в мегабайтах (МБ) 50 Максимальный размер (например, 10 МБ) файла журнала контейнера до его ротации.
containerLogMaxFiles ≥ 2 5 Максимальное количество файлов журнала контейнера, которое может присутствовать для контейнера.
podMaxPids — от -1 до предела PID ядра -1 (∞) Максимальное количество идентификаторов процессов, которые могут работать в Pod
seccompDefault Unconfined, RuntimeDefault Unconfined Задает профиль seccomp по умолчанию для всех рабочих нагрузок. RuntimeDefault использует профиль seccomp по умолчанию контейнера, ограничивающий определенные системные вызовы для повышения безопасности. Ограниченные системные вызовы будут вызывать ошибку. Unconfined не накладывает ограничений на системные вызовы, и разрешены все системные вызовы, что снижает уровень безопасности. Более подробную информацию см. в профиле seccomp по умолчанию containerD. Этот параметр находится в предварительной версии. Зарегистрируйте флаг функции "KubeletDefaultSeccompProfilePreview" с помощью команды az feature register с пространством имен --namespace "Microsoft.ContainerService".

Настраиваемая конфигурация Windows Kubelet

Параметр Допустимые значения или интервал По умолчанию. Описание
imageGcHighThreshold 0–100 85 Процент дискового пространства, после заполнения которого всегда выполняется сборка мусора образов. Минимальное использование диска, активирующее сборку мусора. Для отключения автоматической очистки образов установите значение 100.
imageGcLowThreshold 0–100, не больше imageGcHighThreshold 80 Процент дискового пространства, до заполнения которого сборка мусора образов не вообще выполняется. Минимальное заполнение диска, которое может активировать сборку мусора.
containerLogMaxSizeMB Размер в мегабайтах (МБ) 10 Максимальный размер (например, 10 МБ) файла журнала контейнера до его ротации.
containerLogMaxFiles ≥ 2 5 Максимальное количество файлов журнала контейнера, которое может присутствовать для контейнера.

Параметры конфигурации пользовательской ОС Linux

Внимание

Чтобы упростить поиск и удобочитаемость, параметры ОС отображаются в этой статье по их именам, но их следует добавлять в JSON-файл конфигурации или API AKS, используя соглашение верблюжьего регистра.

Например, если изменить параметр vm.max_map_count, необходимо переформатировать значение vmMaxMapCount в файле JSON конфигурации.

Ограничения для дескрипторов файлов

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

Настройка Допустимые значения или интервал По умолчанию. Описание
fs.file-max 8192–12000500 709620 Максимальное количество дескрипторов файлов, выделяемых ядром Linux. Увеличение этого значения позволяет увеличить максимально допустимое число открытых файлов.
fs.inotify.max_user_watches 781250–2097152 1048576 Максимальное количество наблюдений за файлами, разрешенное системой. Каждое контрольное значение занимает примерно 90 байт на 32-разрядном ядре и примерно 160 байт на 64-разрядном ядре.
fs.aio-max-nr 65536–6553500 65536 Значение aio-nr показывает текущее количество асинхронных запросов на ввод-вывод в системе. Значение aio-max-nr определяет максимальное значение, до которого может увеличиться aio-nr.
fs.nr_open 8192–20000500 1048576 Максимальное число дескрипторов файлов, которые может выделить процесс.

Настройка сокетов и сети

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

Настройка Допустимые значения или интервал По умолчанию. Описание
net.core.somaxconn 4096–3240000 16384 Максимальное количество запросов на подключение, которые могут быть поставлены в очередь для любого заданного слушающего сокета. Верхний предел значения параметра невыполненной работы, передаваемого в функцию listen(2). Если аргумент невыполненной работы больше somaxconn, то он усекается до этого предела без уведомления.
net.core.netdev_max_backlog 1000–3240000 1000 Максимальное количество пакетов, поставленных в очередь на стороне ввода, когда интерфейс получает пакеты быстрее, чем ядро может их обработать.
net.core.rmem_max 212992–134217728 212992 Максимальный размер буфера сокета приема в байтах.
net.core.wmem_max 212992–134217728 212992 Максимальный размер буфера сокета отправки в байтах.
net.core.optmem_max 20480–4194304 20480 Максимальный размер вспомогательного буфера (буфера памяти параметров) для каждого сокета. Память параметров сокета используется в некоторых случаях для хранения дополнительных структур, относящихся к использованию сокета.
net.ipv4.tcp_max_syn_backlog 128–3240000 16384 Максимальное количество запросов на подключение в очереди, которые еще не получили подтверждение от подключающегося клиента. При превышении этого числа ядро начнет удалять запросы.
net.ipv4.tcp_max_tw_buckets 8000–1440000 32768 Максимальное число сокетов timewait, поддерживаемых системой одновременно. Если это число превышено, сокет TIME-WAIT немедленно уничтожается и выводится предупреждающее сообщение.
net.ipv4.tcp_fin_timeout 5–120 60 Период времени, в течение которого потерянное (т. е. не указанное ни в одном из приложений) подключение остается в состоянии FIN_WAIT_2, прежде чем оно будет прервано на локальной стороне.
net.ipv4.tcp_keepalive_time 30–432000 7200 Частота отправки сообщений keepalive протоколом TCP, если включена функция keepalive.
net.ipv4.tcp_keepalive_probes 1–15 9 Число проб keepalive, отправляемых протоколом TCP, пока он не определит, что подключение разорвано.
net.ipv4.tcp_keepalive_intvl 10 - 90 75 Частота отправки проб. Если умножить это значение на tcp_keepalive_probes, получится время завершения подключения, которое не отвечает, после запуска проб.
net.ipv4.tcp_tw_reuse 0 или 1 0 Разрешение повторно использовать сокеты TIME-WAIT для новых подключений, если они безопасны с точки зрения протокола.
net.ipv4.ip_local_port_range Первое: 1024 - 60999 и Последний: 32768 - 65535] Первый: 32768, последний: 60999 Диапазон локальных портов, используемых для выбора локального порта при передаче трафика TCP и UDP. Состоит из двух чисел: первое число — это первый локальный порт, разрешенный для трафика TCP и UDP на узле агента, а второе число — номер последнего локального порта.
net.ipv4.neigh.default.gc_thresh1 128–80000 4096 Минимальное число записей, которые могут находиться в кэше ARP. Сборка мусора не будет активирована, если число записей меньше значения этого параметра.
net.ipv4.neigh.default.gc_thresh2 512–90000 8192 Мягкий максимум количества записей, которые могут находиться в кэше ARP. Этот параметр является наиболее важным, так как сборка мусора ARP будет активирована примерно через 5 секунд после достижения этого нестрогого максимума.
net.ipv4.neigh.default.gc_thresh3 1024–100000 16384 Строгое максимальное количество записей в кэше ARP.
net.netfilter.nf_conntrack_max 131072 - 2097152 131072 nf_conntrack — это модуль, отслеживающий записи подключения для NAT в Linux. Модуль nf_conntrack использует хэш-таблицу для сохранения записи установленного подключения протокола TCP. nf_conntrack_max — максимальное количество узлов в хэш-таблице, то есть максимальное число подключений, поддерживаемое модулем nf_conntrack, или размер таблицы отслеживания подключений.
net.netfilter.nf_conntrack_buckets 65536 - 524288 65536 nf_conntrack — это модуль, отслеживающий записи подключения для NAT в Linux. Модуль nf_conntrack использует хэш-таблицу для сохранения записи установленного подключения протокола TCP. nf_conntrack_buckets — размер хэш-таблицы.

Ограничения работников

Как и в случае с пределами дескрипторов файлов, количество рабочих процессов или потоков, которые может создать процесс, ограничено параметром ядра и предельным числом пользователей. Предельное число пользователей в AKS не ограничено.

Настройка Допустимые значения или интервал По умолчанию. Описание
kernel.threads-max 20–513785 55601 Процессы могут запускать рабочие потоки. Максимальное число создаваемых потоков задается параметром ядра kernel.threads-max.

Виртуальная память

Приведенные ниже параметры можно использовать для настройки работы подсистемы виртуальной памяти ядра Linux и сброса writeout измененных данных на диск.

Настройки Допустимые значения или интервал По умолчанию. Описание
vm.max_map_count 65530–262144 65530 Этот файл содержит максимальное число областей таблицы распределения памяти для процесса. Области таблицы распределения памяти используются как следствие вызова malloc непосредственно функциями mmap, mprotect и madvise, а также при загрузке общих библиотек.
vm.vfs_cache_pressure 1 - 100 100 Это процентное значение управляет тенденцией освобождения ядром памяти, которая используется для кэширования объектов directory и inode.
vm.swappiness 0–100 60 Этот элемент управления позволяет определить, насколько агрессивно ядро будет перемещать страницы памяти. Более высокие значения увеличивают агрессивность, а низкие значения снижают объем переключения. Значение 0 указывает ядру не начинать своп, пока количество свободных и сохраненных в файл страниц не будет меньше порога в зоне.
swapFileSizeMB 1 МБ — размер временного диска (/dev/sdb) нет SwapFileSizeMB указывает размер файла подкачки (в мегабайтах), который будет создан на узлах агента из этого пула узлов.
transparentHugePageEnabled always, madvise, never always Transparent Hugepages — это компонент ядра Linux, предназначенный повысить производительность за счет более эффективного использования аппаратных средств распределения памяти процессора. Если этот параметр включен, то ядро пытается выделять память hugepages по мере возможности, и любой процесс Linux получает страницы по 2 МБ, если для области mmap задано естественное выравнивание по 2 МБ. В некоторых случаях, когда функция hugepages включена для всей системы, приложения могут в конечном итоге выделить больше ресурсов памяти. Приложение может выделить большую область с помощью mmap, но использовать в ней только 1 байт. В этом случае может быть выделена страница размером в 2 МБ вместо 4 КБ без должной причины. В этом сценарии можно отключить функцию hugepages для всей системы или использовать ее только в регионах MADV_HUGEPAGE madvise.
transparentHugePageDefrag always, , deferdefer+madvise, madvisenever madvise Это значение определяет, должно ли ядро агрессивно применять сжатие памяти для повышения доступности hugepages.

Следующие шаги