通过自定义节点配置,可以调整操作系统(OS)设置或 kubelet 参数,以满足工作负荷的需求。 创建 AKS 群集或向群集添加节点池时,你可以自定义一个常用 OS 和 kubelet 设置的子集。 若要配置此子集之外的设置,请使用 DaemonSet 自定义所需的配置,同时不失去 AKS 对节点的支持。
先决条件
随着该服务开始支持新的设置和 kubelet 参数,可能需要注册预览功能标志。 如果需要预览标志, 自定义节点配置参数引用 将调用它。
kubeReserved、hardEvictionThreshold、softEvictionThresholdsoftEvictionGracePeriod和 evictionMaxPodGracePeriodInSeconds kubelet 设置处于预览状态,需要CustomNodeConfigPreview功能标志。 通过这些设置,可以自定义资源预留和逐出阈值,而这些也由 AKS 节点强化进行配置。 有关注册步骤、默认值和示例,请参阅 AKS 中的节点强化(预览)。
为 AKS 节点池创建自定义节点配置文件
若要更改 OS 和 kubelet 配置,请使用所需的参数和设置创建新的配置文件。 如果未为参数指定值,则使用默认值。
注意
以下示例显示了常见的配置设置。 修改设置以满足工作负荷要求。 有关支持的自定义配置参数的完整列表,请参阅 AKS 的自定义节点配置参数。
Kubelet 配置
创建具有以下内容的 linuxkubeletconfig.json 文件:
{
"cpuManagerPolicy": "static",
"cpuCfsQuota": true,
"cpuCfsQuotaPeriod": "200ms",
"imageGcHighThreshold": 90,
"imageGcLowThreshold": 70,
"topologyManagerPolicy": "best-effort",
"allowedUnsafeSysctls": [
"kernel.msg*",
"net.*"
],
"failSwapOn": false
}
若要自定义 Linux 节点池上的 kube-reserved 资源和逐出阈值,请参阅 自定义节点强化设置。
OS 配置
创建具有以下内容的 linuxosconfig.json 文件:
{
"transparentHugePageEnabled": "madvise",
"transparentHugePageDefrag": "defer+madvise",
"swapFileSizeMB": 1500,
"sysctls": {
"netCoreSomaxconn": 163849,
"netIpv4TcpTwReuse": true,
"netIpv4IpLocalPortRange": "32000 60000"
}
}
使用自定义配置文件创建 AKS 群集
注意
创建新 AKS 群集时使用自定义配置文件时,请记住以下信息:
- 如果在创建群集时指定配置,则配置仅适用于初始节点池中的节点。 群集保留 JSON 文件中未配置的任何设置的默认值。
-
CustomLinuxOsConfig不支持 Windows OS 类型。 - 预览
kubeReserved和逐出阈值 kubelet 设置仅适用于 Linux 节点池,并且需要CustomNodeConfigPreview功能标志。 有关注册步骤,请参阅 AKS 中的节点强化(预览版)。
通过运行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 配置和/或 OS 配置。 将 Windows 节点池添加到现有群集时,仅可以指定 kubelet 配置。 如果在添加节点池时指定配置,则配置仅适用于新节点池中的节点。 节点池保留 JSON 文件中未配置的任何设置的默认值。
-
CustomKubeletConfig在 Linux 和 Windows 节点池中受到支持。 - 预览
kubeReserved和逐出阈值 kubelet 设置仅适用于 Linux 节点池,并且需要CustomNodeConfigPreview功能标志。 有关注册步骤,请参阅 AKS 中的节点强化(预览版)。
使用 az aks nodepool add 命令创建新的 Linux 节点池,并为 --linux-os-config 和 --kubelet-config 参数指定配置文件。 以下示例命令使用自定义 ./linuxkubeletconfig.json 文件创建新的 Linux 节点池:
az aks nodepool add --name <node-pool-name> --cluster-name <cluster-name> --resource-group <resource-group-name> --kubelet-config ./linuxkubeletconfig.json
确认已应用设置
应用自定义节点配置后,可以通过 连接到主机 并验证 sysctl 或配置更改文件系统来确认这些设置已应用到节点。
查看支持的自定义配置参数
有关支持的 kubelet 和 Linux OS 配置参数、允许的值、默认值和说明的完整列表,请参阅 AKS 的自定义节点配置参数。
自定义节点配置的注意事项
自定义节点配置时,请记住以下注意事项:
- 节点映像升级会重新应用自定义节点配置。
- 横向扩展操作保留自定义节点配置。
- AKS 不会对每个自定义节点配置参数或值执行预检验证。 确保支持的自定义节点配置参数和值有效,以避免群集节点的潜在问题。
- 预览
kubeReserved和逐出阈值 kubelet 设置仅在 Linux 节点池上可用。 如果对其进行配置,请在 自定义节点配置参数引用中使用受支持的范围、单位和配对规则。 - 自定义节点配置参数的默认值通常随新的操作系统版本而更改。 应用自定义节点配置时,请查看要配置的参数的默认值,以确保自定义设置适用于群集节点的 OS 版本。
- 限制有权修改自定义节点配置的人员数,以防止群集稳定性和性能产生意外后果。 请考虑对 Kubernetes API 使用 Microsoft Entra ID 授权 来限制对群集配置设置的访问。
- 将具有自定义配置的节点池与没有自定义配置的节点池分开,以防止对某些配置更改敏感的工作负荷产生意外后果。 例如,如果你有需要特定 kubelet 设置的关键工作负荷,请考虑将该工作负荷隔离到具有必要自定义 kubelet 配置的专用节点池。
相关内容
- 了解如何配置 AKS 群集。
- 了解如何升级群集中的 节点映像 。
- 若要了解如何将群集升级到最高版本的 Kubernetes,请参阅升级 Azure Kubernetes 服务 (AKS) 群集。
- 若要查找有关一些常用 AKS 问题的答案,请参阅 AKS 常见问题解答。