kubelet 提供了一系列的参数配置,用于定义和调整节点行为。本文介绍配置 kubelet 参数的方法。
Kubernetes 集群中的 kubelet 是一个在集群中每个节点上运行的关键组件,它将节点的详细信息报告给控制平面,并根据控制平面的指令管理容器的生命周期和节点资源。主要包括:
说明
为应对大规模场景下的需求,VKE 已经对节点 kubelet 进行了功能增强和稳定性提升,建议您直接使用 kubelet 的默认参数即可。
如果您需要更改 VKE 集群中 kubelet 的默认参数,需要对 Kubernetes 集群和工作负载有深入的理解。建议在更改任何默认设置之前,充分理解每个参数的作用,并通过测试来评估更改的影响。参数的详细解释,请参见 官方文档。
例如在以下场景下,您可能需要修改 kubelet 的默认值参数:
--max-pods
控制 Pod 的最大数量。--node-labels
来为节点打上指定的标签。topology-manager-policy
指定 Kubernetes 节点上的拓扑管理器(Topology Manager)的行为策略。警告
修改节点 kubelet 参数,需要注意:
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 参数。
对于控制台配置中未涉及的 kubelet 参数,支持通过修改集群 kubelet 参数配置的方法,实现新增节点使用自定义参数的目的。
在集群kube-system
命名空间下,修改名为kubelet-config
的 ConfigMap 中的 KubeletConfiguration 内容。修改完成后,集群中的新增节点即可使用新配置。
说明
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 参数,如果要修改存量节点,操作步骤如下:
${node-name}
为节点名称。kubectl drain ${node-name} --ignore-daemonsets
cp /var/lib/kubelet/config.yaml /var/lib/kubelet/config.yaml_bak
/var/lib/kubelet/config.yaml
中的参数配置。例如:当需要开启 kubelet 序列化拉取镜像时,修改serializeImagePulls
参数的值为true
。vim /var/lib/kubelet/config.yaml
5. 执行以下命令,重启 kubelet 服务。
systemctl daemon-reload systemctl restart kubelet
${node-name}
为节点名称。kubectl uncordon ${node-name}
kubectl get node -owide
kubectl proxy
${node-name}
为节点名称。curl -sSL http://127.0.0.1:8001/api/v1/nodes/${node-name}/proxy/configz |jq