Настройка конфигурации узла для пулов узлов Службы 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 , , madvise never |
always |
Transparent Hugepages — это компонент ядра Linux, предназначенный повысить производительность за счет более эффективного использования аппаратных средств распределения памяти процессора. Если этот параметр включен, то ядро пытается выделять память hugepages по мере возможности, и любой процесс Linux получает страницы по 2 МБ, если для области mmap задано естественное выравнивание по 2 МБ. В некоторых случаях, когда функция hugepages включена для всей системы, приложения могут в конечном итоге выделить больше ресурсов памяти. Приложение может выделить большую область с помощью mmap , но использовать в ней только 1 байт. В этом случае явно не стоит выделять страницу размером в 2 МБ, а не 4 КБ. В этом сценарии можно отключить функцию hugepages для всей системы или использовать ее только в регионах MADV_HUGEPAGE madvise . |
transparentHugePageDefrag |
always , , defer defer+madvise , madvise never |
madvise |
Это значение определяет, должно ли ядро агрессивно применять сжатие памяти для повышения доступности hugepages . |
Следующие шаги
- Узнайте, как настроить кластер AKS.
- Узнайте, как обновить образы узлов в кластере.
- Сведения о том, как обновить кластер до последней версии Kubernetes, см. в статье Обновление кластера Службы Azure Kubernetes (AKS).
- В списке вопросов и ответов об AKS собраны самые популярные рекомендации.
Azure Kubernetes Service