Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В Azure Kubernetes Service (AKS) узлы одной конфигурации группируются в пулы node. Пулы узлов содержат базовые виртуальные машины , которые запускают приложения. Пулы системных узлов и пулы узлов пользователей — это два разных режима пула узлов для кластеров AKS. В этой статье объясняется, как управлять пулами системных узлов в AKS. Сведения об использовании нескольких пулов узлов см. в разделе "Создание пулов узлов".
-
Пулы системных узлов: основная цель — размещение критически важных системных подов, таких как
CoreDNSиmetrics-server. Пулы системных узлов не должны использоваться для запуска приложения. Пулы системных узлов используют Ubuntu Linux или Azure Linux. - Пулы узлов пользователей: Основная цель заключается в размещении подов приложений и изоляции приложений от пула системных узлов. Эта изоляция запрещает приложению вызывать нестабильность в пуле системных узлов кластера. Пулы узлов пользователей могут использовать Ubuntu Linux, Azure Linux или Windows.
Рабочий кластер AKS с одним пулом системных узлов должен содержать по крайней мере два узла. Рекомендация для рабочего кластера AKS с одним пулом системных узлов — иметь по крайней мере три узла для повышения отказоустойчивости и зон доступности. Например, az aks create число узлов по умолчанию команды составляет три и создает новый кластер с одним пулом системных узлов Linux и тремя узлами Linux.
Не рекомендуется, но возможно, планировать поды приложений в пуле системных узлов, если в вашем кластере AKS только один пул узлов. Рекомендуется создать пул узлов для пользователей для вашего приложения.
Перед тем как начать
У вас должна быть установлена и настроена Azure CLI версии 2.31 или более поздней. Чтобы найти версию, выполните команду az --version. Если необходимо установить или обновить, см. раздел Install Azure CLI.
Вам потребуется Azure PowerShell версии 7.5.0 или более поздней версии. Чтобы найти версию, выполните команду Get-InstalledModule -Name Az. Если необходимо установить или обновить, см. раздел Install Azure PowerShell.
Перед началом работы убедитесь, что у вас есть следующие предварительные требования:
- Активная подписка Azure.
- Terraform установлен локально.
- Azure CLI установлен и вошел в систему.
- Разрешения на создание ресурсов AKS и управление ими.
Задайте подписку:
az account set --subscription <subscription-id>
Limitations
Следующие ограничения применяются при создании кластеров AKS и управлении ими, поддерживающих пулы системных узлов.
- См. сведения о квотах, ограничениях размера виртуальной машины и доступности регионов в AKS.
- Для задания режима пула узлов необходимо использовать версию
2020-03-01API или более поздней версии. Кластеры, созданные в версиях API старше, чем2020-03-01содержат только пулы пользовательских узлов, но их можно перенести, чтобы содержать пулы системных узлов, выполнив действия в режиме обновления пула. - Имя пула узлов может содержать только строчные буквенно-цифровые символы и начинаться с строчной буквы. Для пулов узлов Linux длина должна составлять от 1 до 12 символов. Для пулов узлов Windows длина должна составлять от одного до шести символов.
- Режим пула узлов является обязательным свойством и должен быть явно задан при использовании шаблонов ARM или прямых вызовов API.
Пулы системных и пользовательских узлов
Для пула системных узлов AKS автоматически назначает метку kubernetes.azure.com/mode: system своим узлам. Это приводит к тому, что AKS предпочитает размещать системные Pod в пулах узлов, содержащих эту метку. Эта метка не препятствует планированию подов приложений на системных узловых пулах. Но рекомендуется изолировать критически важные системные pods от pods приложений, чтобы предотвратить неправильно настроенные или неконтролируемые pods приложений от случайного удаления системных pods.
Это поведение можно применить, создав выделенный пул системных узлов. Используйте таинт CriticalAddonsOnly=true:NoSchedule, чтобы предотвратить планирование pod-модулей приложений в пулах системных узлов.
Пулы системных узлов имеют следующие ограничения:
- Пулы системных узлов должны поддерживать не менее 30 модулей pod, как описано в формуле минимального и максимального значения для модулей pod.
- Системные пулы
osTypeдолжны быть Linux. - Пулы узлов пользователей
osTypeмогут быть Linux или Windows. - Системные пулы должны содержать по крайней мере два узла, но рекомендация — три узла. Пулы узлов пользователей могут содержать ноль или больше узлов.
- Для пулов системных узлов требуется SKU виртуальной машины не менее 4 виртуальных процессоров и 4 ГБ памяти.
- Виртуальные машины серии B не поддерживаются для пулов системных узлов.
- Рекомендуется использовать минимум три узла с 8 vCPU или два узла с не менее 16 vCPU (например, Standard_DS4_v2), особенно для крупных кластеров (Pod-реплики CoreDNS, 3-4+ дополнения и т. д.).
- Пулы точечных узлов требуют пулов узлов пользователей.
- Добавление другого пула системных узлов или изменение определения системного пула узлов не приводит к автоматическому перемещению системных подов. Системные pods могут продолжать работать на том же пуле узлов, даже если вы измените его на пользовательский пул узлов. При удалении или уменьшении масштаба пула узлов под управлением системных модулей pod, которые ранее были пулом системных узлов, эти системные модули pod повторно развертываются с предпочтительным планированием в новом пуле системных узлов.
Вы можете выполнять следующие операции с пулами узлов:
- Создание выделенного пула системных узлов (предпочитайте планировать системные поды в пулы узлов
mode:system) - Измените пул системных узлов, чтобы он был пулом пользовательских узлов, если у вас есть другой системный пул узлов для его размещения в кластере AKS.
- Измените пул узлов пользователя, чтобы он был пулом системных узлов.
- Удалить пулы пользовательских узлов.
- Вы можете удалить пулы системных узлов, если у вас есть другой пул системных узлов, который будет размещаться в кластере AKS.
- Кластер AKS может иметь несколько пулов системных узлов и требует по крайней мере одного пула системных узлов.
- Если вы хотите изменить различные неизменяемые параметры в существующих пулах узлов, можно создать новые пулы узлов для их замены. Одним из примеров является добавление нового пула узлов с новым
maxPodsпараметром и удаление старого пула узлов. - Используйте привязку узлов, чтобы запрашивать или отдавать предпочтение узлам, которые можно запланировать на основе меток узлов. Можно задать
keyдляkubernetes.azure.com,operatorдляIn, аvaluesотuserилиsystemв ваш YAML, применяя это определение с помощьюkubectl apply -f yourYAML.yaml.
Создание кластера AKS с пулом системных узлов
При создании нового кластера AKS начальный пул узлов по умолчанию использует режим типа System. При создании новых пулов узлов с az aks nodepool add эти пулы являются пользовательскими, если вы не указали параметр mode явным образом.
Создайте переменные для группы ресурсов, имени кластера и расположения команд, используемых в этой статье. В этой статье указаны значения или вы можете использовать собственные значения.
export RESOURCE_GROUP="myResourceGroup"
export CLUSTER_NAME="myAKSCluster"
export LOCATION="eastus"
export NEW_SYSTEM_NP="systempool"
export NEW_NODE_POOL="mynodepool"
В следующем примере создается группа ресурсов с именем myResourceGroup в регионе eastus .
az group create --name $RESOURCE_GROUP --location $LOCATION
Выполните команду az aks create, чтобы создать кластер AKS. В следующем примере создается кластер с именем myAKSCluster с одним выделенным системным пулом, содержащим два узла. Для ваших производственных рабочих нагрузок убедитесь, что вы используете пулы системных узлов минимум с тремя узлами. Эта операция занимает несколько минут.
az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 2 --generate-ssh-keys
При создании нового кластера AKS начальный пул узлов по умолчанию использует режим типа system. При создании новых пулов узлов с помощью New-AzAksNodePool, эти пулы узлов становятся пользовательскими. Режим пула узлов можно обновлять в любое время.
Создайте переменные для группы ресурсов, имени кластера и расположения команд, используемых в этой статье. В этой статье указаны значения или вы можете использовать собственные значения.
$ResourceGroup="myResourceGroup"
$ClusterName="myAKSCluster"
$Location="eastus"
$NewSystemNP="systempool"
$NewNodePool="mynodepool"
В следующем примере создается группа ресурсов с именем myResourceGroup в регионе eastus .
New-AzResourceGroup -ResourceGroupName $ResourceGroup -Location $Location
Используйте командлет New-AzAksCluster для создания кластера AKS. В следующем примере создается кластер с именем myAKSCluster с одним выделенным системным пулом, содержащим два узла. Для ваших производственных рабочих нагрузок убедитесь, что вы используете пулы системных узлов минимум с тремя узлами. Операция занимает несколько минут.
New-AzAksCluster -ResourceGroupName $ResourceGroup -Name $ClusterName -NodeCount 2 -GenerateSshKey
Используйте следующую конфигурацию Terraform, чтобы создать кластер AKS с пулом системных узлов.
Создание файла конфигурации Terraform
Создайте файл с именем main.tfи добавьте следующую общую конфигурацию:
terraform {
required_version = ">= 1.0"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
provider "azurerm" {
features {}
}
Создайте группу ресурсов
Добавьте следующую конфигурацию группы ресурсов:
resource "azurerm_resource_group" "rg" {
name = "aks-system-pool-rg"
location = "East US"
}
Группа ресурсов используется для организации Azure ресурсов и управления ими.
Создание кластера AKS.
Добавьте следующую конфигурацию для создания кластера AKS. Исходный пул узлов создается в качестве пула системных узлов и необходим для операции кластера.
resource "azurerm_kubernetes_cluster" "aks" {
name = "aks-system-pool-cluster"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
dns_prefix = "akssystempool"
default_node_pool {
name = "systemnp"
vm_size = "Standard_D4s_v5"
node_count = 2
min_count = 2
max_count = 3
max_pods = 30
enable_auto_scaling = true
}
identity {
type = "SystemAssigned"
}
network_profile {
network_plugin = "azure"
load_balancer_sku = "standard"
}
}
Добавление выделенного пула системных узлов в существующий кластер AKS
Вы можете добавить один или несколько пулов системных узлов в существующие кластеры AKS. Рекомендуется размещать podы приложений в пользовательских пулах узлов и выделять системные пулы узлов только для критически важных системных подов. Это изолирование предотвращает случайное удаление системных подов из-за действий подов приложений-изгоев. Примените это поведение с помощью CriticalAddonsOnly=true:NoScheduletaint для пулов системных узлов.
Следующая команда добавляет выделенный пул узлов типа System режима с тремя узлами. Команда az aks nodepool add добавляет три узла по умолчанию, но используется --node-count параметр для указания нужного количества узлов.
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $NEW_SYSTEM_NP \
--node-count 3 \
--node-taints CriticalAddonsOnly=true:NoSchedule \
--mode System
Вы можете добавить один или несколько пулов системных узлов в существующие кластеры AKS. Рекомендуется размещать podы приложений в пользовательских пулах узлов и выделять системные пулы узлов только для критически важных системных подов. Добавление дополнительных пулов системных узлов предотвращает случайное удаление системных pod из-за неправильного поведения pod приложений. Примените свойство CriticalAddonsOnly=true:NoScheduletaint для пулов ваших системных узлов.
Следующая команда добавляет выделенный пул узлов типа System режима с тремя узлами.
$systempoolparams = @{
ResourceGroupName = $ResourceGroup
ClusterName = $ClusterName
Name = $NewSystemNP
Count = 3
Mode = 'System'
NodeTaint = 'CriticalAddonsOnly=true:NoSchedule'
}
New-AzAksNodePool @systempoolparams
Добавьте второй пул узлов, настроенный в качестве пула системных узлов, чтобы изолировать критически важные системные рабочие нагрузки.
resource "azurerm_kubernetes_cluster_node_pool" "system_pool" {
name = "systempool"
kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
vm_size = "Standard_D4s_v5"
node_count = 3
mode = "System"
max_pods = 30
node_taints = [
"CriticalAddonsOnly=true:NoSchedule"
]
}
Эта конфигурация применяет метку CriticalAddonsOnly=true:NoSchedule так, чтобы рабочие нагрузки приложений не планировались в выделенном пуле системных узлов.
Добавьте пул узлов пользователя
Чтобы разделить рабочие нагрузки приложений от системных компонентов, добавьте пул узлов пользователя.
resource "azurerm_kubernetes_cluster_node_pool" "user_pool" {
name = "userpool"
kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
vm_size = "Standard_D4s_v5"
node_count = 2
mode = "User"
max_pods = 30
enable_auto_scaling = true
min_count = 2
max_count = 4
}
Пулы узлов пользователей предоставляют выделенную среду для модулей pod приложений.
Окончательная проверка перед развертыванием
Ваш main.tf должен включать:
- Конфигурация Terraform и поставщика
- Группа ресурсов
- Кластер AKS с пулом системных узлов по умолчанию
- Пул выделенных системных узлов
- Необязательный пул пользовательских узлов, если требуется
Завершенная конфигурация выглядит примерно так:
terraform {
required_version = ">= 1.0"
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 4.0"
}
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg" {
name = "aks-system-pool-rg"
location = "East US"
}
resource "azurerm_kubernetes_cluster" "aks" {
name = "aks-system-pool-cluster"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
dns_prefix = "akssystempool"
default_node_pool {
name = "systemnp"
vm_size = "Standard_D4s_v5"
node_count = 2
min_count = 2
max_count = 3
max_pods = 30
enable_auto_scaling = true
}
identity {
type = "SystemAssigned"
}
network_profile {
network_plugin = "azure"
load_balancer_sku = "standard"
}
}
resource "azurerm_kubernetes_cluster_node_pool" "system_pool" {
name = "systempool"
kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
vm_size = "Standard_D4s_v5"
node_count = 3
mode = "System"
max_pods = 30
node_taints = [
"CriticalAddonsOnly=true:NoSchedule"
]
}
resource "azurerm_kubernetes_cluster_node_pool" "user_pool" {
name = "userpool"
kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
vm_size = "Standard_D4s_v5"
node_count = 2
mode = "User"
max_pods = 30
enable_auto_scaling = true
min_count = 2
max_count = 4
}
Проверка конфигурации
Выполните следующие команды, чтобы отформатировать, инициализировать и проверить конфигурацию:
terraform fmt
terraform init
terraform validate
Просмотр плана выполнения
Выполните следующую команду, чтобы просмотреть план выполнения перед развертыванием:
terraform plan
Применение конфигурации
Выполните следующую команду, чтобы создать пулы кластеров и узлов AKS:
terraform apply
Проверка развертывания
Проверьте конфигурацию пула выделенных системных узлов:
az aks nodepool show \
--resource-group aks-system-pool-rg \
--cluster-name aks-system-pool-cluster \
--name systempool
Просмотрите выходные данные и убедитесь, что пул узлов настроен с параметром mode, установленным в System.
Подключитесь к кластеру и выведите список узлов:
az aks get-credentials \
--resource-group aks-system-pool-rg \
--name aks-system-pool-cluster
kubectl get nodes
Показать сведения о пуле узлов
Вы можете проверить детали пула узлов с помощью следующей команды.
az aks nodepool show \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $NEW_SYSTEM_NP \
--query "{Count:count, Mode:mode, NodePool:name, NodeTaint:nodeTaints, ResourceGroup:resourceGroup}"
Режим типа System определяется для пулов системных узлов, а для пулов узлов пользователей определен режим типа User . Для системного пула убедитесь, что свойство nodeTaints установлено на CriticalAddonsOnly=true:NoSchedule, что предотвращает планирование модулей приложений на этом пуле узлов.
{
"Count": 3,
"Mode": "System",
"NodePool": "systempool",
"NodeTaint": [
"CriticalAddonsOnly=true:NoSchedule"
],
"ResourceGroup": "myResourceGroup"
}
Вы можете проверить детали пула узлов с помощью следующей команды.
Get-AzAksNodePool -ResourceGroupName $ResourceGroup -ClusterName $ClusterName -Name $NewSystemNP |
Select-Object -Property Count, Mode, Name, NodeTaints
Режим типа System определяется для пулов системных узлов, а для пулов узлов пользователей определен режим типа User . Для системного пула убедитесь, что таинт установлен как CriticalAddonsOnly=true:NoSchedule, что предотвращает планирование под-ов приложений в данной пуле узлов.
Count Mode Name NodeTaints
----- ---- ---- ----------
3 System systempool {CriticalAddonsOnly=true:NoSchedule}
Этот шаг был включен в шаг Проверка развертывания в предыдущем разделе.
Режим типа System определяется для пулов системных узлов, а для пулов узлов пользователей определен режим типа User . Для системного пула убедитесь, что свойство nodeTaints установлено на CriticalAddonsOnly=true:NoSchedule, что предотвращает планирование модулей приложений на этом пуле узлов.
Обновление существующих пулов узлов кластера и пользовательских узлов
Примечание
Для установки режима пула системных узлов необходимо использовать версию 2020-03-01 API или более поздней версии. Кластеры, созданные в версиях API старше, чем 2020-03-01 содержат только пулы пользовательских узлов в результате. Чтобы получить функциональные возможности и преимущества пула системных узлов в старых кластерах, обновите режим существующих пулов узлов следующими командами в последней версии Azure CLI.
Режимы можно изменить как для пулов системных узлов, так и для пулов пользовательских узлов. Пул системных узлов можно изменить на пул пользовательских узлов, только если другой системный пул узлов уже существует в кластере AKS.
Выполните эту команду, чтобы создать пул узлов в системном режиме.
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $NEW_NODE_POOL \
--node-count 3 \
--mode System
Вы можете проверить режим с помощью следующей команды.
az aks nodepool show \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $NEW_NODE_POOL \
--query mode --output tsv
System
Выполните эту команду, чтобы изменить пул системных узлов на пул пользовательских узлов.
az aks nodepool update \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $NEW_NODE_POOL \
--mode User
Вы можете проверить измененный режим с помощью следующей команды.
az aks nodepool show \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $NEW_NODE_POOL \
--query mode --output tsv
User
Примечание
Для установки режима пула системных узлов необходимо использовать версию 2020-03-01 API или более поздней версии. Кластеры, созданные в версиях API старше, чем 2020-03-01 содержат только пулы пользовательских узлов в результате. Чтобы получить функциональные возможности и преимущества пула системных узлов в старых кластерах, обновите режим существующих пулов узлов следующими командами в последней версии Azure PowerShell.
Режимы можно изменить как для пулов системных узлов, так и для пулов пользовательских узлов. Пул системных узлов можно изменить на пул пользовательских узлов, только если другой системный пул узлов уже существует в кластере AKS.
Выполните эту команду, чтобы создать пул узлов в системном режиме.
$newpoolparams = @{
ResourceGroupName = $ResourceGroup
ClusterName = $ClusterName
Name = $NewNodePool
Count = 3
Mode = 'System'
}
New-AzAksNodePool @newpoolparams
Вы можете проверить режим с помощью следующей команды.
Get-AzAksNodePool -ResourceGroupName $ResourceGroup -ClusterName $ClusterName -Name $NewNodePool |
Select-Object -Property Mode
Mode
----
System
Выполните эту команду, чтобы изменить пул системных узлов на пул пользовательских узлов.
$updateuserpoolparams = @{
ResourceGroupName = $ResourceGroup
ClusterName = $ClusterName
Name = $NewNodePool
Mode = 'User'
}
Update-AzAksNodePool @updateuserpoolparams
Вы можете проверить режим с помощью следующей команды.
Get-AzAksNodePool -ResourceGroupName $ResourceGroup -ClusterName $ClusterName -Name $NewNodePool |
Select-Object -Property Mode
Mode
----
User
Чтобы изменить режим существующего пула узлов, обновите mode параметр в конфигурации Terraform и повторно выполните развертывание.
Например, следующая конфигурация изменяет user_pool пул узлов в системный пул узлов.
resource "azurerm_kubernetes_cluster_node_pool" "user_pool" {
name = "userpool"
kubernetes_cluster_id = azurerm_kubernetes_cluster.aks.id
vm_size = "Standard_D4s_v5"
node_count = 2
mode = "System"
max_pods = 30
enable_auto_scaling = true
min_count = 2
max_count = 4
}
После обновления конфигурации выполните следующую команду:
terraform plan
terraform apply
Чтобы изменить выделенный пул системных узлов на пул узлов пользователя, обновите значение mode для system_poolUser и повторно примените конфигурацию.
Удаление пула системных узлов
Примечание
Чтобы использовать пулы системных узлов в кластерах AKS до версии 2020-03-01API, добавьте новый пул системных узлов, а затем удалите исходный пул узлов по умолчанию.
Перед удалением одного из них необходимо иметь по крайней мере два пула системных узлов в кластере AKS.
az aks nodepool delete \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $NEW_NODE_POOL
После удаления пула системных узлов у вас должен остаться исходный пул системных узлов, созданный вместе с кластером, и пул системных узлов, который вы создали в разделе добавить выделенный пул системных узлов в существующий кластер AKS.
az aks nodepool list \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--query "[].{Name:name, Mode:mode}" --output table
Примечание
Чтобы использовать пулы системных узлов в кластерах AKS до версии 2020-03-01API, добавьте новый пул системных узлов, а затем удалите исходный пул узлов по умолчанию.
Перед удалением одного из них необходимо иметь по крайней мере два пула системных узлов в кластере AKS.
Следующая команда запрашивает ваше подтверждение для удаления пула узлов. Для подтверждения введите Y.
Remove-AzAksNodePool $ResourceGroup -ClusterName $ClusterName -Name $NewNodePool
После удаления пула системных узлов у вас должен остаться исходный пул системных узлов, созданный вместе с кластером, и пул системных узлов, который вы создали в разделе добавить выделенный пул системных узлов в существующий кластер AKS.
Get-AzAksNodePool -ResourceGroupName $ResourceGroup -ClusterName $ClusterName
Кластер всегда должен содержать по крайней мере один системный пул узлов. Если кластер имеет несколько системных пулов узлов, его можно удалить, удалив его блок ресурсов из конфигурации Terraform и применив это изменение.
Например, удалите блок ресурсов и выполните следующую system_pool команду:
terraform plan
terraform apply
Очистите ресурсы
При удалении группы ресурсов кластера AKS удаляются все ресурсы кластера и связанная группа ресурсов узла.MC_
Чтобы удалить кластер, используйте команду az group delete , чтобы удалить группу ресурсов AKS:
az group delete --name $RESOURCE_GROUP --yes --no-wait
Чтобы удалить кластер, используйте команду Remove-AzResourceGroup для удаления группы ресурсов AKS:
Remove-AzResourceGroup -Name $ResourceGroup -Force
По завершении удалите ресурсы:
terraform destroy
Дальнейшие действия
В этой статье вы узнали, как создавать пулы системных узлов и управлять ими в кластере AKS. Сведения о запуске и остановке пулов узлов AKS см. в разделе "Запуск и остановка пулов узлов AKS".