Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Настройка конфигурации узла позволяет настраивать параметры операционной системы или параметры 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"
}
}
Создание кластера AKS с помощью пользовательских файлов конфигурации
Примечание.
При создании нового кластера AKS следует учитывать следующие сведения при использовании пользовательских файлов конфигурации:
- Если при создании кластера указать конфигурацию, конфигурация применяется только к узлам в начальном пуле узлов. Все параметры, не настроенные в JSON-файле, сохраняют значения по умолчанию.
-
CustomLinuxOsConfigне поддерживается для типа ОС Windows.
Создайте новый кластер, используя пользовательские файлы конфигурации и команду az aks create, и укажите ваши файлы конфигурации для параметров --kubelet-config и --linux-os-config. В следующем примере команды создается новый кластер с пользовательскими ./linuxkubeletconfig.json и ./linuxosconfig.json файлами:
az aks create --name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json --linux-os-config ./linuxosconfig.json
Добавление пула узлов с помощью пользовательских файлов конфигурации
Примечание.
При использовании пользовательских файлов конфигурации при добавлении нового пула узлов в существующий кластер AKS следует учитывать следующие сведения:
- При добавлении пула узлов Linux в существующий кластер можно указать конфигурацию kubelet, конфигурацию ОС или оба. При добавлении пула узлов Windows в существующий кластер можно указать только конфигурацию kubelet. Если при добавлении пула узлов указать конфигурацию, конфигурация применяется только к узлам в новом пуле узлов. Все параметры, не настроенные в JSON-файле, сохраняют значения по умолчанию.
-
CustomKubeletConfigподдерживается для пулов узлов Linux и Windows.
Создайте новый пул узлов Linux с помощью команды az aks nodepool add, указав файлы конфигурации для параметров --kubelet-config и --linux-os-config. Следующая команда создает новый пул Linux-узлов с кастомизированным файлом ./linuxkubeletconfig.json.
az aks nodepool add --name <node-pool-name> --cluster-name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json
Были применены параметры подтверждения
После применения настраиваемой конфигурации узла можно подтвердить применение параметров к узлам, подключившись к узлу и убедившись sysctl , что изменения конфигурации были внесены в файловую систему.
Поддерживаемые настраиваемые параметры конфигурации
Настраиваемая конфигурация kubelet для Linux
| Параметр | Допустимые значения или интервал | По умолчанию. | Описание |
|---|---|---|---|
cpuManagerPolicy |
нет, статический | ничего | Статическая политика позволяет контейнерам в гарантированных модулях с целочисленными запросами ЦП получить доступ к эксклюзивным ЦП на узле. |
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 по умолчанию для контейнеров. Этот параметр находится в предварительной версии.
Зарегистрируйте флаг компонента 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 с помощью соглашения о написании в формате camelCase.
Например, если изменить vm.max_map_count setting, необходимо переформатировать файл JSON конфигурации как vmMaxMapCount.
Ограничения дескриптора файлов Linux
При обслуживании большого количества трафика этот трафик обычно поступает из большого количества локальных файлов. Вы можете настроить следующие параметры ядра и встроенные ограничения, чтобы обрабатывать больше задач, за счёт некоторого объёма системной памяти.
В следующей таблице перечислены ограничения дескриптора файлов, которые можно настроить для каждого пула узлов:
| Настройка | Допустимые значения или интервал | По умолчанию Ubuntu 22.04 | По умолчанию Ubuntu 24.04 | Azure Linux 3.0 по умолчанию | Описание |
|---|---|---|---|---|---|
fs.file-max |
8192 - 9223372036854775807 | 9223372036854775807 | 9223372036854775807 | 9223372036854775807 | Максимальное количество файловых дескрипторов, которые выделяет ядро Linux. Это значение имеет максимально возможное значение (2^63-1), чтобы предотвратить исчерпание дескриптора файлов и обеспечить неограниченные системные дескрипторы файлов для контейнерных рабочих нагрузок. |
fs.inotify.max_user_watches |
781250–2097152 | 1048576 | 1048576 | 1048576 | Максимальное количество наблюдений за файлами, разрешенное системой. Каждое контрольное значение занимает примерно 90 байт на 32-разрядном ядре и примерно 160 байт на 64-разрядном ядре. |
fs.aio-max-nr |
65536–6553500 | 65536 | 65536 | 65536 | Значение aio-nr показывает текущее количество асинхронных запросов на ввод-вывод в системе. Значение aio-max-nr определяет максимальное значение, до которого может увеличиться aio-nr. |
fs.nr_open |
8192–20000500 | 1048576 | 1048576 | 1073741816 | Максимальное число дескрипторов файлов, которые может выделить процесс. |
Примечание.
Параметр fs.file-max имеет значение 9223372036854775807 (максимальное значение для подписанного 64-разрядного целого числа) в Ubuntu и Azure Linux на основе вышестоящих значений по умолчанию. Эта конфигурация:
- Предотвращает атаки типа "отказ в обслуживании ", основанные на исчерпании дескрипторов на уровне системы.
- Гарантирует, что рабочие нагрузки контейнеров никогда не перегружены ограничениями на количество дескрипторов файлов на уровне системы.
-
Обеспечивает безопасность с помощью ограничений для каждого процесса (
fs.nr_openиulimit), которые по-прежнему применяются к отдельным процессам. - Оптимизирует для платформ контейнеров, где многие контейнеры могут выполняться одновременно, и каждый из них потенциально может открыть множество файлов и сетевых подключений.
Настройка сокета Linux и сети
Для узлов агента, которые, как ожидается, обрабатывают большое количество одновременных сеансов, можно использовать следующие параметры TCP и сети и настроить их на пул узлов:
| Настройка | Допустимые значения или интервал | По умолчанию Ubuntu 22.04 | По умолчанию Ubuntu 24.04 | Azure Linux 3.0 по умолчанию | Описание |
|---|---|---|---|---|---|
net.core.somaxconn |
4096–3240000 | 16384 | 16384 | 16384 | Максимальное количество запросов на подключение, которые могут быть поставлены в очередь для любого заданного слушающего сокета. Верхний предел значения параметра невыполненной работы, передаваемого в функцию listen(2). Если аргумент невыполненной работы больше somaxconn, то он усекается до этого предела без уведомления. |
net.core.netdev_max_backlog |
1000–3240000 | 1000 | 1000 | 1000 | Максимальное количество пакетов, поставленных в очередь на стороне ввода, когда интерфейс получает пакеты быстрее, чем ядро может их обработать. |
net.core.rmem_max |
212992–134217728 | 1048576 | 1048576 | 212992 | Максимальный размер буфера сокета приема в байтах. |
net.core.wmem_max |
212992–134217728 | 212992 | 212992 | 212992 | Максимальный размер буфера сокета отправки в байтах. |
net.core.optmem_max |
20480–4194304 | 20480 | 131072 | 20480 | Максимальный размер вспомогательного буфера (буфера памяти параметров) для каждого сокета. Память параметров сокета используется в некоторых случаях для хранения дополнительных структур, относящихся к использованию сокета. |
net.ipv4.tcp_max_syn_backlog |
128–3240000 | 16384 | 16384 | 16384 | Максимальное количество запросов на подключение в очереди, которые не получили подтверждение от подключающегося клиента. Если это число превышено, ядро начинает удаление запросов. |
net.ipv4.tcp_max_tw_buckets |
8000–1440000 | 262144 | 262144 | 131072 | Максимальное число сокетов timewait, поддерживаемых системой одновременно. Если это число превышено, сокет TIME-WAIT немедленно уничтожается и выводится предупреждающее сообщение. |
net.ipv4.tcp_fin_timeout |
5–120 | 60 | 60 | 60 | Время, в течение которого осиротевшее соединение (более не используемое ни одним приложением) остается в состоянии FIN_WAIT_2, прежде чем оно будет прервано на локальной стороне. |
net.ipv4.tcp_keepalive_time |
30–432000 | 7200 | 7200 | 7200 | Частота отправки сообщений keepalive протоколом TCP, если включена функция keepalive. |
net.ipv4.tcp_keepalive_probes |
1–15 | 9 | 9 | 9 | Число проб keepalive, отправляемых протоколом TCP, пока он не определит, что подключение разорвано. |
net.ipv4.tcp_keepalive_intvl |
10 - 90 | 75 | 75 | 75 | Частота отправки проб. Если умножить это значение на tcp_keepalive_probes, получится время завершения подключения, которое не отвечает, после запуска проб. |
net.ipv4.tcp_tw_reuse |
2 | 2 | 2 | Разрешение повторно использовать сокеты TIME-WAIT для новых подключений, если они безопасны с точки зрения протокола. |
|
net.ipv4.ip_local_port_range |
Первое: 1024 - 60999 и Последний: 32768 - 65535] | Первый: 32768, последний: 60999 | Первый: 32768, последний: 60999 | Первый: 32768, последний: 60999 | Диапазон локальных портов, используемых для выбора локального порта при передаче трафика TCP и UDP. Состоит из двух чисел: первое число — это первый локальный порт, разрешенный для трафика TCP и UDP на узле агента, а второе число — номер последнего локального порта. |
net.ipv4.neigh.default.gc_thresh1 |
128–80000 | 4096 | 4096 | 4096 | Минимальное количество записей, которые могут находиться в кэше ARP. Сборка мусора не активируется, если количество записей ниже этого параметра. |
net.ipv4.neigh.default.gc_thresh2 |
512–90000 | 8192 | 8192 | 8192 | Максимальное мягкое количество записей, которые могут находиться в ARP кэше. Этот параметр, возможно, является наиболее важным, так как сборка мусора ARP инициируется примерно через 5 секунд после достижения этого мягкого предела. |
net.ipv4.neigh.default.gc_thresh3 |
1024–100000 | 16384 | 16384 | 16384 | Строгое максимальное количество записей в кэше ARP. |
net.netfilter.nf_conntrack_max |
131072 - 2097152 | Динамическое вычисление | Динамическое вычисление | Динамическое вычисление |
nf_conntrack — это модуль, отслеживающий записи подключения для NAT в Linux. Модуль nf_conntrack использует хэш-таблицу для сохранения записи установленного подключения протокола TCP.
nf_conntrack_max — максимальное количество узлов в хэш-таблице, то есть максимальное число подключений, поддерживаемое модулем nf_conntrack, или размер таблицы отслеживания подключений.
Значение по умолчанию динамически вычисляется на основе системной памяти с помощью формулы: RAM_in_bytes / 16384 (или RAM_in_MB * 64). Например, виртуальная машина с 8 ГБ ОЗУ имеет примерно 524 288 подключений. Фактические значения зависят от размера виртуальной машины и доступной памяти. |
net.netfilter.nf_conntrack_buckets |
65536 - 524288 | Динамическое вычисление | Динамическое вычисление | Динамическое вычисление |
nf_conntrack — это модуль, отслеживающий записи подключения для NAT в Linux. Модуль nf_conntrack использует хэш-таблицу для сохранения записи установленного подключения протокола TCP.
nf_conntrack_buckets — размер хэш-таблицы.
Значение по умолчанию динамически вычисляется на основе системной памяти с помощью формулы: RAM_in_bytes / 16384с не менее чем 1024 контейнерами и максимум 262 144 контейнерами. По умолчанию nf_conntrack_max обычно установлено на nf_conntrack_buckets * 4. Фактические значения зависят от размера виртуальной машины и доступной памяти. |
Ограничения рабочей роли Linux
Как и в случае с пределами дескрипторов файлов, количество рабочих процессов или потоков, которые может создать процесс, ограничено параметром ядра и предельным числом пользователей. Предельное число пользователей в AKS не ограничено. В следующей таблице перечислены параметры ядра, которые можно настроить для каждого пула узлов:
| Настройка | По умолчанию Ubuntu 22.04 | По умолчанию Ubuntu 24.04 | Azure Linux 3.0 по умолчанию | Описание |
|---|---|---|---|---|
kernel.threads-max |
Динамическое вычисление | Динамическое вычисление | Динамическое вычисление | Процессы могут запускать рабочие потоки. Максимальное число создаваемых потоков задается параметром ядра kernel.threads-max.
Значение по умолчанию вычисляется динамически на основе системной памяти с помощью формулы( total_ram_pages / 4 где каждая страница обычно составляет 4 КБ). Фактические значения зависят от размера виртуальной машины и доступной памяти. |
Виртуальная память Linux
В следующей таблице перечислены параметры ядра, которые можно настроить для каждого пула узлов, чтобы оптимизировать работу подсистемы виртуальной памяти (VM) ядра Linux и writeout переноса грязных данных на диск:
| Настройка | Допустимые значения или интервал | По умолчанию Ubuntu 22.04 | По умолчанию Ubuntu 24.04 | Azure Linux 3.0 по умолчанию | Описание |
|---|---|---|---|---|---|
vm.max_map_count |
65530 | 1048576 | 1048576 | Этот файл содержит максимальное количество областей карты памяти, которые может иметь процесс. Области таблицы распределения памяти используются как следствие вызова malloc непосредственно функциями mmap, mprotect и madvise, а также при загрузке общих библиотек. |
|
vm.vfs_cache_pressure |
1 - 100 | 100 | 100 | 100 | Это процентное значение управляет тенденцией освобождения ядром памяти, которая используется для кэширования объектов directory и inode. |
vm.swappiness |
0–100 | 60 | 60 | 60 | Этот элемент управления используется для определения того, насколько агрессивно ядро переключает страницы памяти. Более высокие значения повышают агрессивность, более низкие значения уменьшают объем обмена. Значение 0 указывает ядру не начинать своп, пока количество свободных и сохраненных в файл страниц не будет меньше порога в зоне. |
swapFileSizeMB |
1 МБ — размер временного диска (/dev/sdb) | нет | нет | нет | SwapFileSizeMB указывает размер в МБ файла буфера, который необходимо создать на узлах агента из этого пула узлов. |
transparentHugePageEnabled |
always
madvise
never
|
always |
always |
madvise |
Прозрачные огромные страницы — это функция ядра Linux, предназначенная для повышения производительности благодаря более эффективному использованию аппаратного обеспечения для сопоставления памяти вашего процессора. Если включено, ядро пытается выделить hugepages всякий раз, когда возможно, и любой процесс Linux получает страницы размером 2 МБ, если регион размером 2 МБ имеет естественное выравнивание. В некоторых случаях, когда hugepages включены по всей системе, приложения могут в конечном итоге выделять больше ресурсов памяти. Приложение может mmap выделять большой регион, но использовать только 1 байт из него; в таком случае страница размером 2 МБ может быть выделена вместо страницы размером 4 КБ без серьезной необходимости. В этом сценарии можно отключить функцию hugepages для всей системы или использовать ее только в регионах MADV_HUGEPAGE madvise. |
transparentHugePageDefrag |
always, , deferdefer+madvise, madvisenever |
madvise |
madvise |
madvise |
Это значение определяет, должно ли ядро агрессивно применять сжатие памяти для повышения доступности hugepages. |
Связанный контент
- Узнайте, как настроить кластер AKS.
- Узнайте, как обновить образы узлов в кластере.
- Сведения о том, как обновить кластер до последней версии Kubernetes, см. в статье Обновление кластера Службы Azure Kubernetes (AKS).
- Посмотрите список часто задаваемых вопросов об AKS, чтобы найти ответы на некоторые распространенные вопросы об AKS.