当默认的kubelet配置无法满足业务需求时,您可以在节点池维度自定义节点的kubelet参数配置,调整节点行为。例如,您可以调整集群资源预留以调配资源用量、自定义节点压力驱逐阈值以缓解集群资源不足、调整拓扑管理器策略以提高系统性能等。
使用限制
集群版本不满足限制条件时可能会出现非预期现象。
注意事项
自定义kubelet参数按批次变更节点配置。节点池中已有节点将即时生效,新增节点也会使用新配置。生效时,kubelet进程将重启,可能影响节点和工作负载的运行。请在业务低峰期操作。
如果未配置evictionHard、kubeReserved或systemReserved,系统则会使用默认值配置资源预留。默认值的计算方式,请参见节点资源预留策略。
资源预留配置的改变,可能会造成节点的可分配资源变少。对于资源水位较高的节点,可能会触发节点驱逐。
强烈不建议您通过黑屏操作自行定义控制台不支持的kubelet参数。黑屏操作存在很大的稳定性风险,需要您自行保证Userdata文件内容的正确性和兼容性,避免因配置错误或者配置被新版本弃用时导致节点不可用。
kubelet 启动时会遵循特定的优先级来合并不同配置来源。如果同一配置项通过多种方式配置,优先级高的配置会将优先级低的配置覆盖。
通过控制台自定义节点池kubelet参数
自定义kubelet参数生效时会重启kubelet进程,可能会对业务产生一定影响。请在业务低峰期进行操作。
登录容器服务管理控制台,在左侧导航栏选择集群列表。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在节点池列表页面,单击目标节点池操作列下的
> Kubelet配置。
仔细阅读当前页面上的注意事项,单击自定义参数选择需要配置的参数,指定待升级的节点,设置每批次的最大并行数,然后单击提交,按照页面指引完成操作。
配置每批次的最大并行数后,kubelet配置将按批次对节点生效。执行需要一定时间,可在事件列表区域查看执行进度,并控制执行过程,例如暂停、继续、取消等。
您可以使用暂停功能对已升级的节点进行验证。执行暂停操作时,正在配置中的节点会继续完成执行;尚未执行的节点在任务继续前不会被执行自定义配置。
说明建议尽快完成自定义配置任务。处于暂停状态的任务将在7天后自动取消,相关的事件和日志信息也会被清理。
除控制台外,您也可以通过ModifyNodePoolNodeConfig接口自定义kubelet参数。下文介绍ACK支持自定义的kubelet参数。
支持自定义的kubelet参数
字段 | 说明 | 默认值 | 建议取值范围 |
allowedUnsafeSysctls | 设置允许使用的非安全的sysctl或sysctl通配符(以 重要 使用此参数前,请仔细评估相关风险并自行保证可用性。 | 不涉及 | 支持下述前缀的 sysctl 配置:
|
containerLogMaxFiles | 容器的日志文件个数上限,需大于等于2,且容器运行时需为containerd。 | 10 | [2, 10]。 |
containerLogMaxSize | 容器日志文件轮换生成新文件的最大阈值。容器运行时需为containerd。 | 100Mi | 不涉及。 |
cpuCFSQuota | 允许为设置了CPU限制的容器实施CPU CFS配额约束。 | true | 可选值:
|
cpuCFSQuotaPeriod | 设置CPU CFS配额周期值。 需确保CustomCPUCFSQuotaPeriod特性门控已被启用 | 100ms | 介于1毫秒和1秒之间,包含1毫秒和1秒。 |
cpuManagerPolicy | CPU管理器策略。 | none | 可选值:
|
eventBurst | 事件记录的个数的突发峰值上限。 | 10 | [1, 100],且取值必须大于等于 |
eventRecordQPS | 每秒可生成的事件数量。 | 5 | [1, 50]。 |
evictionHard | 触发Pod驱逐操作的一组硬性门限。 | imagefs.available<15%,memory.available<300Mi,nodefs.available<10%,nodefs.inodesFree<5% | 无。 |
evictionSoft | 设置一组驱逐阈值。 | 无 | 无。 |
evictionSoftGracePeriod | 设置一组驱逐宽限期。 说明 需已设置evictionSoft。 | 无 | 无。 |
featureGates | 实验性特性的特性开关组。每个开关以 重要
| 不涉及 | 不涉及。 |
imageGCHighThresholdPercent | 配置镜像的磁盘用量百分比阈值,一旦镜像用量超过此阈值,镜像垃圾收集会一直运行。 配置时,此值需大于imageGCLowThresholdPercent取值。 | 85 | [60, 95]。 |
imageGCLowThresholdPercent | 配置镜像的磁盘用量百分比阈值,镜像用量低于此阈值时不会执行镜像垃圾收集操作。 配置时,此值需小于imageGCHighThresholdPercent取值。 | 80 | [30, 90]。 |
kubeAPIBurst | 每秒发送到APIServer的突发请求数量上限。 | 10 | [1, 100],且取值必须大于等于 |
kubeAPIQPS | 与APIServer通信的每秒查询个数。 | 5 | [1, 50]。 |
kubeReserved | Kubernetes系统预留的资源配置。 | 默认自动计算,详细信息请参见节点资源预留策略。 | 不涉及。 |
maxPods | Node能运行的Pod最大数量。 重要 修改maxPods的值不会影响节点上能分配的IP数量。maxPods取值过大可能导致使用非HostNetwork模式的Pod无法分配到IP地址,从而造成Pod启动失败。 | 不涉及。取决于机器规格和容器网络规划等物理资源配置。 | 不涉及。 |
memoryManagerPolicy | 内存管理器需要使用的策略。 | None | 可选值:
|
podPidsLimit | 每个Pod中可使用的PID个数上限。 | 16384 | 无。 |
readOnlyPort | kubelet无鉴权只读端口。 |
| 0 关于开放kubelet容器监控只读端口(10255)的风险,请参见【产品变更】迁移低版本ACK集群监控端口至鉴权端口。 |
registryBurst | 突发性镜像拉取的个数上限。 | 10 | [1, 100],且取值必须大于等于 |
registryPullQPS | 镜像仓库的QPS上限。 | 5 | [1, 50]。 |
reservedMemory | NUMA节点内存预留列表。 | 无。 | 无。 |
serializeImagePulls | 串行拉取镜像。 | False | 可选值:
|
systemReserved | 系统预留的资源配置。 | 默认自动计算,详细信息请参见节点资源预留策略。 | 不涉及。 |
topologyManagerPolicy | 拓扑管理器策略。借助NUMA架构,数据可以被分配到相同的NUMA节点,以减少跨节点访问,提高系统性能。拓扑管理器可以作出与拓扑结构相对应的资源分配决定。更多信息,请参见控制节点上的拓扑管理策略。 | none |
|
containerLogMonitorInterval | 集群版本需为1.30及以上。 检测容器日志执行轮转操作的间隔时间。 | 10s | [3s,60s] |
containerLogMaxWorkers | 集群版本需为1.30及以上。 执行日志轮换操作的并发工作程序的最大数量。 | 1 | [1,20] |
tracing | 为集群控制面或数据面组件启用链路追踪。 操作文档,请参见链路追踪管理。 | 无 |
|
FAQ
自定义配置会被弃用吗?
随着Kubernetes版本的演进,可能会有部分参数或FeatureGate被标记弃用或者从代码移除。如果受ACK管理的自定义参数在新的版本不再适用时,相关配置会在集群升级期间被移除弃用。
如何启用配置文件的方式管理kubelet?
容器服务 Kubernetes 版会根据社区的最佳实践调整kubelet配置的管理方式。在1.20版本之后,逐步将已经被标记弃用的kubelet启动命令(Command-Line Flags)改为配置文件。更多信息,请参见Kubelet Configuration (v1beta1)。
新增节点(新创建的节点和新添加的节点)会同时保留配置文件和原有的配置方式;存量节点不受影响。如需将节点统一为配置文件管理的方式,您可以参见支持自定义的kubelet参数触发自定义配置,以统一节点池内全量节点的配置。
想要修改的 kubelet 参数不在支持列表,应该如何修改?
ACK允许将自定义参数写入至/etc/kubernetes/kubelet-customized-args.conf,该文件用于存储 kubelet 的自定义启动参数和配置选项。写入到该配置文件的 kubelet 参数会在节点重启时优先生效,覆盖通过节点池自定义 kubelet 配置功能写入的参数值。
调整 kubelet 参数可能导致节点注册失败、Pod无法调度等,影响业务正常运行。请在操作前请充分评估变更风险。
(推荐)对于节点池未来扩容的节点,可将对自定义参数配置文件的写入脚本配置到节点池实例自定义数据中,以确保新增节点可默认使用这些自定义参数值。
在节点池配置中的实例自定义数据中的配置以下内容。其中,
${kubelet_key}
和${kubelet_value}
需替换为实际值。mkdir -p /etc/kubernetes echo 'KUBELET_CUSTOMIZED_ARGS="--${kubelet_key}=${kubelet_value}"' > /etc/kubernetes/kubelet-customized-args.conf systemctl daemon-reload systemctl restart kubelet
操作入口,请参见创建和管理节点池。
对于节点池中的存量节点,可登录节点修改该自定义参数配置文件,同时手动执行以下命令使配置生效。
systemctl daemon-reload systemctl restart kubelet