Commit Graph
227 Commits
Author SHA1 Message Date
SEONGHYUN HONGandguoard 4427a95bfe fix(control-plane): fetch discovery kubeconfig when adding control plane nodes with remove_anonymous_access (#13683)
* fix(control-plane): fetch discovery kubeconfig when adding control plane nodes

The 'Get kubeconfig for join discovery process' task is run_once, so its
'when' is evaluated only for the first control plane node. On an existing
cluster that node has already run kubeadm, so the task is skipped for all
hosts and 'Copy discovery kubeconfig' fails on the new control plane nodes
with "'dict object' has no attribute 'stdout'" when
remove_anonymous_access (file discovery) is enabled.

Drop the kubeadm_already_run condition from the run_once fetch. The copy
and join tasks keep their per-host conditions.

Signed-off-by: s3onghyun <s3onghyun.hong@gmail.com>

* control-plane: mark discovery kubeconfig fetch as not changed

Co-authored-by: guoard <guoard@users.noreply.github.com>

---------

Signed-off-by: s3onghyun <s3onghyun.hong@gmail.com>
Co-authored-by: guoard <guoard@users.noreply.github.com>
2026-10-26 03:56:06 +00:00
Frank bebc536fae fix: configure Kubernetes feature gates with dictionaries (#13608)
* fix: configure Kubernetes feature gates with dictionaries

* docs: update feature gate settings to dictionaries
2026-10-15 15:26:39 +00:00
Ali Afsharzadeh 6b3cbe1cbb Rewrite k8s-certs-renew script in Python (#13502)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-10-15 14:06:25 +00:00
Max Gautier 1011c240b4 downloads: split file and containers (#13581)
Splits the definitions into two dicts, while joining then for now to
preserve the downloads dict.

Update all consumers of the variables, which are roughly:
- manual includes of the download role (which will be removed in the
  short future)
- install tasks using the resolved 'dest' to find the artefacts

This will make further division of the downloads role easier.
2026-10-13 09:58:21 +00:00
JaeyungLee 40d5c77c8e reopen PR #12580 (#13162) 2026-10-13 09:52:21 +00:00
Javad a4ac5d1121 Fix anonymous access cleanup during cluster upgrade (#13417) 2026-10-12 09:23:25 +00:00
Dasmat Hansda 38f82cdce9 refactor: unify inconsistent variables in apiserver endpoint (#13392) 2026-10-12 06:25:22 +00:00
Jay.HandAli Afsharzadeh 457217aaa0 Allow setting --service-account-extend-token-expiration for kube-apiserver in hardening.yaml (#13616)
* kube-apiserver: add --service-account-extend-token-expiration

* Update docs/ansible/vars.md

Co-authored-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>

* Update docs/operations/hardening.md

* Update docs/operations/hardening.md

Co-authored-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>

---------

Co-authored-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-10-12 03:57:19 +00:00
Ali Afsharzadeh 15ea3a9bba Upload kubeadm ClusterConfiguration before the control plane upgrade (#13594)
kubeadm upgrade reads ClusterConfiguration only from the kubeadm-config
ConfigMap, so it keeps the old etcd version. The etcd version then
changes on all control plane nodes at the same time, and the control
plane stops. Upload the ClusterConfiguration first. Then kubeadm
upgrades etcd on one node at a time.

Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-30 09:06:38 +00:00
Ali Afsharzadeh 0fd9672b0c Remove obsolete "Flatcar Container Linux by Kinvolk" fact checks (#13528)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-18 10:12:42 +00:00
felipe88alves f6b046bcac feat: add preflight admission readiness check before kubeadm upgrade (#13140)
* feat: add preflight admission readiness check before kubeadm upgrade

  - linked to issue #13139
  - Add opt-in dry-run Job probe to verify the admission pipeline is ready before running kubeadm upgrade apply (workaround for Kubernetes #124237)
  - Gate the check behind kubeadm_upgrade_preflight_check_enabled (default false) with configurable retries and delay
  - Emit a warning instead of failing if the preflight check does not pass

* fix: refine preflight admission check Job and warning

- Use generateName for the dry-run preflight Job to avoid fixed-name collisions
- Expand the Kubernetes issue reference in the warning to a full GitHub URL

Created with AI-assistance
2026-09-10 08:14:36 +00:00
wangsifei99 35f900dd72 Add cleanup kubeadm backups under /etc/kubernetes/tmp (#13415)
* Add cleanup kubeadm backups under /etc/kubernetes/tmp

* Add kubeadm_backup_retention_count=0 to test
2026-09-10 07:42:46 +00:00
Seena Fallah 44ab38baae control-plane: fix kubeadm ops when advertiseAddress cannot be derived from default gateway (#13156)
* download: add apiserver ip in InitConfiguration

In setups where the advertiseAddress cannot be derived from the
default gateway, setting localAPIEndpoint.advertiseAddress will
eliminate the error caused by that. this is like other kubeadm
configs that we have.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

* control-plane: pass kubeadm config when creating token

kubeadm token create subcommand will generate a default config when
nothing as --config is passed. therefore if we have setups that need
the config values to let kubeadm work (like if the ip cannot be derived
by the default gateway) it will fail.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

---------

Signed-off-by: Seena Fallah <seenafallah@gmail.com>
2026-09-10 07:42:37 +00:00
Ali Afsharzadeh e125a30b16 Fix k8s-certs-renew renewing on nodes without super-admin.conf (#13414)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-03 14:30:21 +00:00
Ali AfsharzadehandChengHao Yang ae329ee192 Fix k8s-certs-renew renewing all certificates on every timer run (#13413)
* Fix k8s-certs-renew renewing all certificates on every timer run

Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>

* Strip trailing whitespace from systemd-analyze calendar output

Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>

* Remove issue link

Co-authored-by: ChengHao Yang <17496418+tico88612@users.noreply.github.com>

---------

Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
Co-authored-by: ChengHao Yang <17496418+tico88612@users.noreply.github.com>
2026-08-21 07:07:16 +00:00
ChengHao Yang 80b3345ed8 fix: cri-dockerd doesn't support ExtendWebSocketsToKubelet
Disabled the FG ExtendWebSocketsToKubelet when `container_manager` set `docker`, let CI can passed.
2026-07-06 16:57:50 +08:00
ujstor 7c8f928405 fix-absent-cni-kubeadm-join-control-planes (#13280) 2026-06-02 07:34:59 +05:30
Nikhil Kumar 2ffff07887 Replace injected Ansible fact variables in node and control-plane roles (#13240) 2026-06-02 07:34:51 +05:30
Ali Afsharzadeh 17f270325d Remove deprecated apiserver-count kubeadm config option (#13262)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-05-18 16:17:51 +05:30
Justin Lamp 8c3f6270f8 Add toggle to disable node subnet allocation (#13239)
Signed-off-by: Justin Lamp <justin.lamp@netways.de>
2026-05-16 11:34:34 +05:30
Ali Afsharzadeh 09e9c43570 Disable controller-manager allocate-node-cidrs for cilium cluster-pool ipam (#13148)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-05-06 15:26:22 +05:30
Chad Swenson f81842d0ed Implement structured authentication configuration for API server (#13035) 2026-04-21 08:25:52 +05:30
Srishti Jaiswal ba70ed35f0 Remove kubeadm config api version: v1beta3 for kubeadm config template (#13027) 2026-03-11 20:27:38 +05:30
Chad Swenson 8af9f37b28 Undefined check for apiserver_loadbalancer_domain_name in apiserver_sans (#13009) 2026-02-16 15:22:01 +05:30
Max Gautier a4215cbef9 Remove workaround for kubeadm bug which is no longer necessary (#12991)
Introduced in 14b63ede8 (Fixup kubelet.conf to point to
kubelet-client-current.pem (#7347), 2021-03-09)
2026-02-14 19:37:59 +05:30
Max Gautier bf3fef05fd control-plane: do not adjust apiserver endpoint (#12870)
This essentially revert the functionnality of 9b0f57a0a (Adjust
endpoints for kube-proxy,controller,scheduler to proper ip (#5150),
2019-09-09).

This is no longer needed since kubeadm now default to use the local
kube-apiserver for control plane components (feature gate
"ControlPlaneKubeletLocalMode")

https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#feature-gates
2026-02-13 15:52:01 +05:30
Mohamed Omar Zaian a77221d12b [kubernetes] Support Kubernetes v1.35.0 (#12812) 2026-02-10 14:54:02 +05:30
Max Gautier fcecaf6943 wait for control plane node to become ready after joining (#12794)
When joining a control plane node and "upgrading" the cluster setup (for
example, to update etcd addresses after adding a new etcd) in the same
playbook run, the node can take a bit of time to become ready after
joining.
This triggers a kubeadm preflight check (ControlPlaneNodesReady) in
kubeadm upgrade, which is run directly after the join tasks.

Add a configurable wait for the control plane node to become Ready to
fix this race condition.
2026-01-28 22:15:51 +05:30
Max Gautier df3f0a2341 k8s-certs-renew: fix broken script (#12876)
Unproquer quoting of variable assignment make the shell interpret it as
a command ; since the variable is unused anyway, just delete it.
2026-01-19 22:57:47 +05:30
Max Gautier 6b5cc5bdfb Fix defaults for apiserver_loadbalancer_domain_name
Since we're not longer injecting pseudo DNS into /etc/hosts,
'lb-apiserver.kubernetes.local' (the previous default) won't resolve to
anything.

Instead, default to the loadbalancer IP if defined, or to the node local
loadbalancer if it's in use.

Make the necessary adjustements in use site to deal with ip addresses as
well as hostnames.
2026-01-19 09:43:48 +01:00
Max Gautier 51304d57e2 network_facts: streamline set_fact and setup calls
- invoke setup module only once to gather ipv4 and ipv6 addresses
- eliminate remaining use of `fallback_ip` and `fallback_ip6`, allowing
  us to define (with `set_fact` all the "computed" IPs variable in one
  go, since there is no longer a dependency between them.
2026-01-05 15:54:56 +01:00
Max Gautier 6a517e165e Fix kubeadm init retry (#12785)
We currently always fail on the kubeadm init retry, because of the
remnants of the first try.

Ignore the related errors in the retry to unblock it.
2025-12-25 15:14:31 +05:30
Max Gautier 88df61357b Use run_once for kubeadm init phase upload-certs (#12759)
Before "5ca23e3bf (Changed to use first_kube_control_plane to parse
kubeadm_certificate_key (#11875), 2025-01-14)", kubespray would have
problem adding new control planes when the order of the nodes in kubectl
output and the ansible inventory were not the same.

But the underlying problem is that the operation is fundamentally
something that should be done only once, and recorded for all host in
play.

Since `register` and `sef_fact` when used with `run_once` set the
variable for all the hosts, use it. Also allows to use the variable
directly instead of relying on hostvars to make the task more readable.
2025-12-07 21:07:27 -08:00
Max Gautier 633d39448e Add a default (empty) value for supplementary_addresses_in_ssl_keys (#12761)
Most variables should have a default instead of relying on the default
filter.

(Note that the variable is misnomed, this should be certs and not keys,
but it's not worth breaking compat).
2025-12-04 05:28:57 -08:00
Max Gautier 4d87ac1032 Simplify collection of SubjectAlternativeNames for apiserver (#12507)
Remove a bunch of intermediate variables, which fixes a
"'UndefinedMarker' concatenation" error in ansible-lint v25.8.1.
2025-12-04 02:06:57 -08:00
Seena Fallah 5789dc839c control-plane: fix first_kube_control_plane delegation with kube_override_hostname (#12636)
* control-plane: fix first_kube_control_plane delegation with kube_override_hostname

When kube_override_hostname is configured, the node names reported by
`kubectl get nodes` differ from the inventory_hostname known to Ansible.
This causes delegation failures in subsequent tasks since Ansible cannot
resolve the hostname from kubectl output to an inventory host.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

* control-plane: remove fragile first_control_plane selection logic

Current implementation breaks with kube_override_hostname and has
multiple edge cases. Drop until proper kubectl-based node lookup
can be implemented.

Signed-off-by: Seena Fallah <seenafallah@gmail.com>

---------

Signed-off-by: Seena Fallah <seenafallah@gmail.com>
2025-11-25 08:10:38 -08:00
Hyeonki Hong 56c830713e Fix SAN address collection from ansible_default_ipv{4,6} (#12413)
Signed-off-by: Hyeonki Hong <hhk7734@gmail.com>
2025-08-26 02:40:11 -07:00
Alejandro Macedo e2046749ac Fix: Change "empty" definition for PodSecurity Admission configuration (#12439)
Fixes a bug where `kube-apiserver` fails to start if the PodSecurity
configuration file doesn't have the `apiVersion` and `kind` keys.

Signed-off-by: Alejandro Macedo <alex.macedopereira@gmail.com>
2025-08-19 02:57:36 -07:00
Ho Kim 707616178e feat: add support for custom kubeadm pull image repository (#12128)
Signed-off-by: Ho Kim <ho.kim@ulagbulag.io>
2025-08-13 18:03:06 -07:00
Aman Shrivastava b4d3be482f Make control plane health check retries configurable (#12452) 2025-08-11 02:23:07 -07:00
Psycho Mantys 5b1334102b Remove --auth-anonymous if kube_api_anonymous_auth is undefined. (#12353)
Remove --auth-anonymous if kube_api_anonymous_auth in undefined, to avoid
compatibility errors with other arguments of the kube-apiserver, such as
--authentication-config when anonymous field is configured.
2025-07-26 20:20:27 -07:00
Chad Swenson 1e523a267c Fix kubeadm upgrade node skipPhases with multiple CP nodes (#12367)
Add 1.32 conditional defaults

Restore support for kubeadm upgrade node --skip-phases < 1.32, apply still needs to be restricted
2025-07-07 11:29:26 -07:00
vdveldet 8d7cbe732e Adding proper quotation (#12371)
* Adding proper quotation

* Update file with correct quotes
2025-07-06 02:33:24 -07:00
ERIK 7ead3e2f11 fix(kubeadm): Conditionally add --skip-phases flag for v1.32.0+ (#12351)
Signed-off-by: bo.jiang <bo.jiang@daocloud.io>
2025-06-28 05:12:28 -07:00
_xat_ dca2a5ecb3 Skip kube-proxy addon phase during kubeadm upgrade if disabled (#12306) 2025-06-18 03:48:52 -07:00
Kubernetes Prow Robot ad31de4220 Merge pull request #12132 from tico88612/fix/remove-anonymous-kubeadm-validation
Fix: kubeadm secondary use file discovery validation
2025-06-15 05:48:56 -07:00
ChengHao Yang f77aea13e9 Cleanup: kubeadm-config v1beta4 extra args defined conditions (#12307)
* Cleanup: kubeadm-config v1beta4 extra args defined conditions

Some variables have already been defined, so there is no need to
useconditional statements to check whether they have been defined.

Signed-off-by: ChengHao Yang <17496418+tico88612@users.noreply.github.com>

* Cleanup: cloud-provider extra args

Signed-off-by: ChengHao Yang <17496418+tico88612@users.noreply.github.com>

---------

Signed-off-by: ChengHao Yang <17496418+tico88612@users.noreply.github.com>
2025-06-14 13:38:56 -07:00
ChengHao Yang e618d71f2a Fix: kubeadm secondary use file discovery validation
The validation step is moved to the end to avoid the loss of files that
may lead to verification failure.

Signed-off-by: ChengHao Yang <17496418+tico88612@users.noreply.github.com>
2025-06-12 10:05:58 +08:00
Peter Pan 85b0be144a Fix: check expiry before do breaking renew and container restart actions (#12194)
* Fix: check expiraty before renew

Since certificate renewal and container restarts involve higher risks,
they should be executed with extra caution.

* squash to Fix: check expiraty before renew

* squash to Fix: address more comments from VannTen

Signed-off-by: Peter Pan <Peter.Pan@daocloud.io>

---------

Signed-off-by: Peter Pan <Peter.Pan@daocloud.io>
2025-06-05 01:04:41 -07:00
Imran Ahmed ce26f17e9e fix unquoted san cert causing issues with ips (#12256) 2025-06-02 22:50:38 -07:00