You need to enable JavaScript to run this app.
容器服务

容器服务

复制全文
节点和节点池
自定义集群 kubelet 参数
复制全文
自定义集群 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 参数,详情请参见 配置节点池 kubelet 参数

修改节点 kubelet 参数,需要注意:

  • 可能会导致集群不稳定,可能导致的后果包括但不限于:节点 NotReady、节点上运行的容器发生重启或被驱逐等。建议修改前明确相关参数的含义,并在测试环境充分验证后,再操作。
  • 如果有多套环境(例如测试环境、预发布环境、生产环境),建议先从测试环境开始验证参数修改。验证成功后,再进入下一个环境。重复此过程,直至修改生产环境中的参数配置。

VKE 集群扩容节点时会根据节点规格和功能配置,在节点安装时初始化 kubelet 系统配置,并将系统配置保存在节点的/var/lib/kubelet/kubeadm-flags.env文件中,包括:

注意

集群节点升级时会根据此文件进行参数覆盖,请勿直接修改该文件及相关参数。

参数名称参数含义
eviction-hard硬驱逐门限。
kube-reservedKubernetes 节点预留资源配置。
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 参数配置。如有需求,请参见 修改存量节点参数
  • 后续若集群进行了控制面升级,且升级了 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 连接集群。详情请参见 连接集群
  2. 执行以下命令,安全清空目标节点中的工作负载,并禁止新的工作负载调度到该节点上。其中,${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 连接集群。详情请参见 连接集群
  2. 验证 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
    
最近更新时间:2025.01.03 16:18:33
这个页面对您有帮助吗?
有用
有用
无用
无用