You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
节点和节点池
自定义集群 kubelet 参数
复制全文
下载 pdf
自定义集群 kubelet 参数
kubelet 提供了一系列的参数配置,用于定义和调整节点行为。本文介绍配置 kubelet 参数的方法。​
说明​
容器服务支持在控制台上,配置节点的常见 kubelet 参数,实现节点池下新增节点和存量节点参数的修改。详情请参见 配置节点 kubelet 参数。​
背景信息​
什么是 kubelet​
Kubernetes 集群中的 kubelet 是一个在集群中每个节点上运行的关键组件,它将节点的详细信息报告给控制平面,并根据控制平面的指令管理容器的生命周期和节点资源。主要包括:​
  • 容器生命周期管理:kubelet 负责根据从 API Server 接收到的 PodSpec(Pod 的描述信息)来启动、停止和维护容器的运行状态。确保容器按照用户定义的规格运行。​
  • 健康检查:kubelet 定期对容器进行健康检查,以确保应用程序正常运行。如果检查失败,kubelet 可以重启容器,保持应用的稳定性和可用性。​
  • 资源管理:kubelet 负责管理节点资源的使用,例如 CPU、内存等。它确保每个容器都能获得其需要的资源,同时避免资源的过度分配。​
  • 节点状态报告:kubelet 定期向 Kubernetes 的 Master 节点报告自己所在节点的状态,包括资源利用率、运行的容器等信息,这有助于 Kubernetes 调度器做出更好的调度决策。​
kubelet 更改原则​
说明​
为应对大规模场景下的需求,VKE 已经对节点 kubelet 进行了功能增强和稳定性提升,建议您直接使用 kubelet 的默认参数即可。​
如果您需要更改 VKE 集群中 kubelet 的默认参数,需要对 Kubernetes 集群和工作负载有深入的理解。建议在更改任何默认设置之前,充分理解每个参数的作用,并通过测试来评估更改的影响。参数的详细解释,请参见 官方文档。​
例如在以下场景下,您可能需要修改 kubelet 的默认值参数:​
  • 资源限制:如果节点有特定的资源限制或者特别的资源需求,需要调整与资源管理相关的参数,例如通过--max-pods控制 Pod 的最大数量。​
  • 自定义调度:如果需要在特定的节点上运行特定的工作负载,需要调整 kubelet 的标签或污点,例如通过--node-labels来为节点打上指定的标签。​
  • 特定的性能优化:为了针对特定的工作负载进行性能优化,特别是对于具有特定硬件需求的工作负载,如使用高性能计算、人工智能、机器学习、数据科学的应用。可能需要调整一些高级参数,例如通过topology-manager-policy指定 Kubernetes 节点上的拓扑管理器(Topology Manager)的行为策略。​
操作前须知​
警告​
  • 修改集群的 kubelet 参数,可能导致集群和业务不稳定。因此操作前,请务必阅读本小节的内容,并谨慎操作!​
修改节点 kubelet 参数,需要注意:​
  • 可能会导致集群不稳定,可能导致的后果包括但不限于:节点 NotReady、节点上运行的容器发生重启或被驱逐等。建议修改前明确相关参数的含义,并在测试环境充分验证后,再操作。​
  • 如果有多套环境(例如测试环境、预发布环境、生产环境),建议先从测试环境开始验证参数修改。验证成功后,再进入下一个环境。重复此过程,直至修改生产环境中的参数配置。​
VKE 集群扩容节点时会根据节点规格和功能配置,在节点安装时初始化 kubelet 系统配置,并将系统配置保存在节点的/var/lib/kubelet/kubeadm-flags.env文件中,包括:​
注意​
集群节点升级时会根据此文件进行参数覆盖,请勿直接修改该文件及相关参数。​
​
参数名称​
参数含义​
eviction-hard​
硬驱逐门限。​
kube-reserved​
Kubernetes 节点预留资源配置。​
max-pods​
单节点最大 Pod 数量。​
system-reserved​
系统预留资源配置。​
node-labels​
节点初始化时的标签。​
topology-manager-policy​
拓扑管理策略。​
topology-manager-scope​
拓扑管理策略的资源粒度。​
feature-gates​
特性门控开关。​
​
前提条件​
  • 已创建集群,且集群和节点均处于 运行中 状态。​
  • 选择合适的操作时间,建议在集群业务处于低峰期操作。​
通过控制台配置​
容器服务支持在控制台上,配置节点的常见 kubelet 参数,实现节点池下新增节点和存量节点参数的修改。详情请参见 配置节点 kubelet 参数。​
通过 CLI 配置​
配置新增节点参数​
对于控制台配置中未涉及的 kubelet 参数,支持通过修改集群 kubelet 参数配置的方法,实现新增节点使用自定义参数的目的。​
在集群kube-system命名空间下,修改名为kubelet-config的 ConfigMap 中的 KubeletConfiguration 内容。修改完成后,集群中的新增节点即可使用新配置。​
说明​
  • 在kubelet-config中修改 kubeReserved、systemReserved、maxPods 或 evictionHard 参数不会生效。系统会根据节点规格自动计算这些参数的默认值。如需调整,请通过控制台修改,详情请参见 配置节点池 Kubelet 参数。​
  • 修改集群参数后,对于存量节点,即使重启也不会改变节点已有的 kubelet 参数配置。如有需求,请参见 修改存量节点参数。​
  • 后续若集群进行了控制面升级,且升级了 Kubernetes 次要版本,则可能存在参数不兼容的情况,因此在控制面升级完成后需要重新配置kubelet-config ConfigMap 的自定义参数,以保证集群中新增节点使用期望的自定义配置。集群升级相关信息,请参见 升级集群。​
​
apiVersion: v1​
kind: ConfigMap​
metadata:​
name: kubelet-config​
namespace: kube-system​
data:​
kubelet: |​
apiVersion: kubelet.config.k8s.io/v1beta1​
kind: KubeletConfiguration​
address: 0.0.0.0​
authentication:​
anonymous:​
enabled: false​
webhook:​
cacheTTL: 2m0s​
enabled: true​
x509: {}​
authorization:​
mode: Webhook​
webhook:​
cacheAuthorizedTTL: 5m0s​
cacheUnauthorizedTTL: 30s​
cgroupDriver: cgroupfs​
cgroupsPerQOS: true​
clusterDNS:​
- 172.31.0.10​
clusterDomain: cluster.local​
configMapAndSecretChangeDetectionStrategy: Watch​
containerLogMaxFiles: 5​
containerLogMaxSize: 100Mi​
contentType: application/vnd.kubernetes.protobuf​
cpuCFSQuota: true​
cpuCFSQuotaPeriod: 100ms​
cpuManagerPolicy: none​
cpuManagerReconcilePeriod: 10s​
enableControllerAttachDetach: true​
enableDebuggingHandlers: true​
enableServer: true​
enableSystemLogHandler: true​
enforceNodeAllocatable:​
- pods​
eventBurst: 10​
eventRecordQPS: 5​
evictionHard:​
imagefs.available: 15%​
memory.available: 100Mi​
nodefs.available: 10%​
nodefs.inodesFree: 5%​
evictionPressureTransitionPeriod: 5m0s​
failSwapOn: true​
fileCheckFrequency: 20s​
hairpinMode: promiscuous-bridge​
healthzBindAddress: 127.0.0.1​
healthzPort: 10248​
httpCheckFrequency: 20s​
imageGCHighThresholdPercent: 85​
imageGCLowThresholdPercent: 80​
imageMinimumGCAge: 2m0s​
iptablesDropBit: 15​
iptablesMasqueradeBit: 14​
kubeAPIBurst: 10​
kubeAPIQPS: 5​
kubeReserved:​
cpu: 100m​
memory: 500Mi​
logging:​
format: text​
makeIPTablesUtilChains: true​
maxOpenFiles: 1000000​
maxPods: 0​
nodeLeaseDurationSeconds: 40​
nodeStatusMaxImages: 50​
nodeStatusReportFrequency: 5m0s​
nodeStatusUpdateFrequency: 10s​
oomScoreAdj: -999​
podPidsLimit: -1​
port: 10250​
registryBurst: 5​
registryPullQPS: 2​
resolvConf: /etc/resolv.conf​
rotateCertificates: true​
runtimeRequestTimeout: 2m0s​
serializeImagePulls: true​
shutdownGracePeriod: 0s​
shutdownGracePeriodCriticalPods: 0s​
staticPodPath: /etc/kubernetes/manifests​
streamingConnectionIdleTimeout: 4h0m0s​
syncFrequency: 1m0s​
systemReserved:​
cpu: 100m​
memory: 500Mi​
tlsCertFile: /etc/kubernetes/pki/kubelet-tls.crt​
tlsPrivateKeyFile: /etc/kubernetes/pki/kubelet-tls.key​
topologyManagerPolicy: none​
topologyManagerScope: container​
volumePluginDir: /usr/libexec/kubernetes/kubelet-plugins/volume/exec/​
volumeStatsAggPeriod: 1m0s​
​
修改存量节点参数​
说明​
建议使用控制台,配置节点的常见 kubelet 参数,能够更方便地实现存量节点参数修改。详情请参见 配置节点 kubelet 参数。​
对于控制台配置中未涉及的 kubelet 参数,如果要修改存量节点,操作步骤如下:​
  1. 使用 kubectl 连接集群。详情请参见 连接集群。​
  1. 执行以下命令,安全清空目标节点中的工作负载,并禁止新的工作负载调度到该节点上。其中,${node-name}为节点名称。​
​
kubectl drain ${node-name} --ignore-daemonsets​
​
  1. 登录节点,执行以下命令,备份 kubelet 配置文件。​
​
cp /var/lib/kubelet/config.yaml /var/lib/kubelet/config.yaml_bak​
​
  1. 根据需求,修改配置文件/var/lib/kubelet/config.yaml中的参数配置。例如:当需要开启 kubelet 序列化拉取镜像时,修改serializeImagePulls参数的值为true。​
​
vim /var/lib/kubelet/config.yaml​
​
​​​
5. 执行以下命令,重启 kubelet 服务。​
​
systemctl daemon-reload ​
systemctl restart kubelet​
​
  1. 服务重启完成后,执行以下命令,恢复节点调度。其中,${node-name}为节点名称。​
​
kubectl uncordon ${node-name}​
​
结果验证​
  1. 使用 kubectl 连接集群。详情请参见 连接集群。​
  1. 验证 kubelet 参数是否生效。​
  1. 执行以下命令,确认节点名称。​
  • ​
    kubectl get node -o wide ​
    ​
  1. 在节点中启动代理。​
  • ​
    kubectl proxy​
    ​
  1. 打开新的终端页面,执行以下命令,直接访问 kube-apisever,获取已经生效的 kubelet 配置。其中,${node-name}为节点名称。​
  • ​
    curl -sSL http://127.0.0.1:8001/api/v1/nodes/${node-name}/proxy/configz |jq​
    ​
  • ​​​
​
最近更新时间:2026.09.28 14:08:16
这个页面对您有帮助吗?
有用
有用
无用
无用