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


Настройка конфигурации узла для пулов узлов Службы 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

Другие конфигурации

Для изменения других параметров операционной системы можно использовать следующие параметры:

Сообщение дня

Передайте флаг --message-of-the-day с расположением файла, чтобы заменить сообщение дня на узлах Linux при создании кластера или пула узлов.

az aks create --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt
Создание пула узлов
az aks nodepool add --name mynodepool1 --cluster-name myAKSCluster --resource-group myResourceGroup --message-of-the-day ./newMOTD.txt

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

Проверка применения параметров

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

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

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

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

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

Параметр Допустимые значения или интервал По умолчанию. Description
cpuManagerPolicy none, static ничего Статическая политика позволяет контейнерам в гарантированных pod с запросами целочисленных ресурсов ЦП обращаться к ЦП с монопольным доступом на узле.
cpuCfsQuota true, false true Включение и отключение использования квоты CFS ЦП для контейнеров, задающих ограничения ЦП.
cpuCfsQuotaPeriod Интервал в миллисекундах (мс) 100ms Задает значение периода квоты CFS ЦП.
imageGcHighThreshold 0–100 85 Процент дискового пространства, после заполнения которого всегда выполняется сборка мусора образов. Минимальное заполнение диска, активирующее сборку мусора. Для отключения сборки мусора образов установите значение 100.
imageGcLowThreshold 0–100, не больше imageGcHighThreshold 80 Процент дискового пространства, до заполнения которого сборка мусора образов не вообще выполняется. Минимальное заполнение диска, которое может активировать сборку мусора.
topologyManagerPolicy none, best-effort, restricted, single-numa-node ничего Оптимизация выравнивания узлов 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 команды с пространством имен --nameService Microsoft.ContainerService.

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

Параметр Допустимые значения или интервал По умолчанию. Description
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 конфигурации.

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

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

Параметр Допустимые значения или интервал По умолчанию. Description
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 и сети, которые можно настроить для каждого пула узлов.

Параметр Допустимые значения или интервал По умолчанию. Description
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, поддерживаемых системой одновременно. Если это число превышено, сокет timewait немедленно уничтожается и выводится предупреждение.
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 не ограничено.

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

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

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

Параметр Допустимые значения или интервал По умолчанию. Description
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, , madvisenever 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.

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