kubernetes-sigs/kubespray

unpredictable extra args

Open

#12,021 opened on Mar 5, 2025

View on GitHub
 (12 comments) (0 reactions) (1 assignee)HTML (10,380 stars) (4,419 forks)batch import
help wantedkind/bugtriage/accepted

Description

What happened?

kubespray has ability to add Custom flags to control plane components. But in docs doesnt writes, which extra arg are possible.

E.G. my extra args

kube_kubeadm_controller_extra_args:
  node-monitor-grace-period: 20s
  allocate-node-cidrs: true

kube_kubeadm_apiserver_extra_args:
  default-not-ready-toleration-seconds: 10
  default-unreachable-toleration-seconds: 10

kubelet_config_extra_args:
  nodeStatusUpdateFrequency: 5s 
  nodeStatusReportFrequency: 5s

kubelet is ok

but api-server and controller-manager in generated kubeadmconfig

  - name: default-not-ready-toleration-seconds  DEFAULT VALUES
    value: "300"
  - name: default-unreachable-toleration-seconds
    value: "300"
...
  - name: "default-not-ready-toleration-seconds"   MY ARGS
    value: "10"
  - name: "default-unreachable-toleration-seconds"
    value: "10"

controllerManager:
  extraArgs:
  - name: node-monitor-grace-period DEFAULT
    value: "40s"

...
  - name: "node-monitor-grace-period" DUPLICATE
    value: "20s"
  - name: "allocate-node-cidrs" OK
    value: "True"

I suspect - jinja generete this value from defaut var

{% if kube_apiserver_pod_eviction_not_ready_timeout_seconds is defined %}
  - name: default-not-ready-toleration-seconds
    value: "{{ kube_apiserver_pod_eviction_not_ready_timeout_seconds }}"
{% endif %}
{% if kube_apiserver_pod_eviction_unreachable_timeout_seconds is defined %}
  - name: default-unreachable-toleration-seconds
    value: "{{ kube_apiserver_pod_eviction_unreachable_timeout_seconds }}"
{% endif %}

 - name: node-monitor-grace-period
    value: "{{ kube_controller_node_monitor_grace_period }}"

It is another vars, when classic extra

In this case Add section in docementation about default vars, which opposite extra args or Make default args more obviously, for avoid collision

What did you expect to happen?

extra args added in kubeadm config is expected and planned

How can we reproduce it (as minimally and precisely as possible)?

add some extra args in k8s-cluster.yaml and deploy

OS

Ubuntu 22.04.5 LTS

Version of Ansible

2.16.10

Version of Python

3.10.12

Version of Kubespray (commit)

release-2.27

Network plugin used

calico

Full inventory with variables

.

Command used to invoke ansible

ansible-playbook -i ./inventory/kubetest/hosts.yaml -u *** -b --private-key *** cluster.yml --tags "master"

Output of ansible run

.

Anything else we need to know

No response

Contributor guide