Repository navigation
Description
What happened?
We run 100+ Nodes in our kubespray cluster and noticed ETCD was getting hit with repeated PATCH requests for node status updates even though no Node statuses were changing.
This was due to the kubelet's being configured with nodeStatusReportFrequency: 10s.
Kubespray only offers a way to set nodeStatusUpdateFrequency (via ansible var kubelet_status_update_frequency), but not nodeStatusReportFrequency.
Although kubernetes documents that the default nodeStatusReportFrequency is 5m, they also note that when nodeStatusUpdateFrequency is explicitly defined, it's value will be used for the nodeStatusReportFrequency.
Since kubespray explicitly sets nodeStatusUpdateFrequency to 10s, we accidentally inherit a 10s report frequency for our kubelets.
Note that the report frequency is just how often kubelet will report node status when it hasn't changed. When the node has changed status, it will still notify immediately after.
What did you expect to happen?
I expect kubespray to support defining nodeStatusReportFrequency via a different ansible variable like kubelet_status_report_frequency.
I would also expect kubespray to default that ansible variable to the value that matches Kubernetes documentation (5m).
Specifically, would suggest the following changes:
- adding a new
nodeStatusReportFrequencyfield for the kubelet-config.yaml template below this line such as:nodeStatusReportFrequency: "{{ kubelet_status_report_frequency }}" - adding the new ansible variable below this one with something like:
kubelet_status_report_frequency: 5m
How can we reproduce it (as minimally and precisely as possible)?
- Build a kubespray cluster using
localinventory - Run the below and confirm you see
10sas the valuekubectl get --raw /api/v1/nodes/node1/proxy/configz | jq -e '.kubeletconfig.nodeStatusReportFrequency'
OS
Ubuntu 22
Version of Ansible
9.13.0
Version of Python
3.12.12
Version of Kubespray (commit)
v2.28.1
Network plugin used
cni
Full inventory with variables
n/a (can use local or sample inventories)
Command used to invoke ansible
ansible-playbook -i inventory/local/hosts.ini cluster.yml
Output of ansible run
N/a
The issue is how the kubelet config renders.
Anything else we need to know
No response
Activity
guoard commentedon Nov 7, 2026
/triage accepted