Commit Graph
8929 Commits
Author SHA1 Message Date
Max Gautier 2acfd9344a CI: test reset on flatcar (#13492)
This is a good way to validate reset behavior with immutable systems
2026-09-10 09:08:41 +00:00
Max Gautier e4eb65dba2 fix/ansible 2.19: reset: no implicit conditionals (#13485) 2026-09-10 09:04:35 +00:00
W GengandWeigang Geng 65832d2e2e Make any_errors_fatal configurable again (#13488)
The plays carry `any_errors_fatal: "{{ any_errors_fatal | default(true) }}"`,
added in #1201 so the behaviour could be turned off.

`any_errors_fatal` is an Ansible play keyword, and Ansible reserves keyword
names in the variable namespace. Setting it through -e, group_vars or
host_vars is rejected with "Found variable using reserved name:
any_errors_fatal" and the value never reaches the play, so the expression
always falls through to `default(true)`. The knob has been inert since it was
introduced.

Rename the variable to `kubespray_any_errors_fatal`. Default behaviour is
unchanged -- still fatal -- but `-e kubespray_any_errors_fatal=false` now
works as #1201 intended.

This matters most in playbooks/internal_facts.yml, where the fatal bootstrap
play runs ahead of the play that gathers and caches facts: one unreachable
host aborts the run before any facts are cached, the playbook still exits 0,
and a later `scale.yml --limit=...` refuses because the excluded hosts have
no cache entries. roles/network_facts already sets ignore_unreachable: true
for this reason, but it never executes.

Refs #13407

Claude-Session: https://claude.ai/code/session_017RCEoUNR9gthd455d8Anrx

Signed-off-by: Weigang Geng <3356786+gengwg@users.noreply.github.com>
Co-authored-by: Weigang Geng <3356786+gengwg@users.noreply.github.com>
2026-09-10 08:38:36 +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
Kay Yan b7d99749b8 preinstall: generalize minimum-value semantics for managed sysctls (#13224)
* preinstall: generalize minimum-value semantics for managed sysctls

Move the hardcoded sysctl floor map out of 0080-system-configurations.yml
into a default variable, and introduce additional_sysctl_min so users can
declare their own sysctl floors. Floor semantics only apply a managed
value when the node's current value is lower; pre-tuned images (Bottlerocket,
EKS AMIs, OpenShift RHCOS, hardened distros) and newer kernels that
already set higher values are left alone.

Default floors are aligned with prior art from the OpenShift Node Tuning
Operator (TuneD '=>' floor syntax in the openshift / openshift-node
profiles) and kops. None of the floor keys are part of the kubelet
protect-kernel-defaults validation list, so the floor mechanism cannot
interfere with kubelet startup. Keys not present on the running
kernel/distro are skipped without failing.

additional_sysctl (exact-value semantics) is unchanged for backward
compatibility.

Signed-off-by: Kay Yan <kay.yan@daocloud.io>

* preinstall: refine sysctl floor handling

Keep built-in floor values internal while preserving user overrides
through additional_sysctl_min.

Use sysctl --ignore for unknown keys and filter empty results without
masking other read errors.

Signed-off-by: Kay Yan <kay.yan@daocloud.io>

---------

Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-09-10 07:46:33 +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
ERIK 26aa4586e9 fix(flannel): make image tag prefix version-aware (#13476)
Signed-off-by: bo.jiang <bo.jiang@daocloud.io>
2026-09-10 07:12:34 +00:00
Kay Yan fd206a19f5 CI: add Ubuntu 26.04 support and coverage (#13443)
* image-builder: add Ubuntu 26.04 image

Signed-off-by: Kay Yan <kay.yan@daocloud.io>

* CI: add Ubuntu 26.04 support

Add an Ubuntu 26.04 CI job (ubuntu26-calico-all-in-one) to the main PR
matrix, OS-specific node vars, and update the coverage docs.

The VM image is published as quay.io/kubespray/vm-ubuntu-2604.

Signed-off-by: Kay Yan <kay.yan@daocloud.io>

---------

Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-09-10 03:56:33 +00:00
Max Gautier 5be4b0a9fe CI: add helm for kubelet-csr-approver/custom-cni-helm tests (#13457)
Currently this only works because helm_enabled is not actually checked
for some helm installation cases.
2026-09-09 13:36:34 +00:00
Max Gautier 0378060c91 fix/ansible 2.19: ssl_ca_dirs: don't rely on final evaluation (#13477) 2026-09-09 09:13:25 +00:00
Kay Yan 230cd19497 fix(openeuler): add configurable openeuler_repo_baseurl for faster mirrors (#13134)
Add openeuler_repo_baseurl variable to override the default baseurl
(repo.openeuler.org) with a faster mirror. CI uses Huawei Cloud CDN,
reducing package installation from >900s timeout to ~2min.

Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-09-09 07:32:34 +00:00
Max Gautier 8e8751465b fix/ansible-core 2.19: implicit list to bool conversion in download (#13470) 2026-09-09 05:24:34 +00:00
Max Gautier 712d13bd48 fix/ansible 2.19: calico: no implicit conditionals (#13480) 2026-09-09 05:20:36 +00:00
Max Gautierandgithub-actions[bot] 15dab0c60c Patch versions updates (#13458)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-09-09 00:48:32 +00:00
Max Gautier ff19dbd284 fix/ansible 2.19: local vol provisioner: don't rely on final evaluation (#13481)
- also remove mitogen workaround from local_volume_provisioner since
  creating the dirs is handled by kubernetes/preinstall instead
- correct the tag in kubernetes/preinstall as persistent_volumes isn't
  the same thing
2026-09-08 22:46:35 +00:00
Oleksandr Kozmenko 70cb04d9d8 fix: remove redundant cni dependency for flannel/kube-router/macvlan/multus (#12766)
* fix: remove cni dependency for flannel

Inspired by https://github.com/kubernetes-sigs/kubespray/pull/9563.

* fix: remove cni dependency for kube-router/macvlan/multus

It is not needed there since network_plugin meta already has it. For plugins which have reset tasks it is also breaking them since downloaded CNI archive is no longer present.
2026-09-08 22:16:33 +00:00
Meza 1754a6b493 fix(etcd): update etcd-metrics to endpointslice using single subset (#12846)
Signed-off-by: Meza <meza-xyz@proton.me>
2026-09-08 15:18:32 +00:00
Max Gautier 7cd8c41218 fix/ansible 2.19: tests: no implicit conditionals (#13479) 2026-09-08 12:54:33 +00:00
arhuman b7b08b33c4 Add astl for fast local Ansible static linting (#13472) 2026-09-08 12:18:30 +00:00
Max Gautier 6aee13b285 Remove support and CI for EOL Debian 11 (#13483)
- also remove macvlan on debian support since the role works neither on
  debian 12 nor 13
- macvlan is no longer tested in CI as it does not work on rockylinux10
  either
2026-09-08 10:30:31 +00:00
Ali Afsharzadeh bf2727f6fd Skip component releases published without binary artifacts (#13381)
* Skip component releases published without binary artifacts

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

* Don't use intermediate variable

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

* Fail update-hashes when a component only returns 404s

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

---------

Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-08 10:20:32 +00:00
Razvan Petrescu 5ca00279b8 Add contrib/terraform/opennebula: provision Kubespray VMs on OpenNebula (#13390) 2026-09-08 10:16:29 +00:00
Max Gautier c554ee816d fix/ansible-core 2.19: etcd: avoid mutating methods in template (#13474)
2.19 disallow methods with side effects in Jinja. Use a simple loop by
adding all the SANs source in one list.

Also check the sources before hand for failing on CIDR notation.

Link: https://github.com/ansible/ansible/issues/85202
2026-09-08 09:12:32 +00:00
Max Gautier 4b7dfaef87 fix/ansible 2.19: etcd: don't rely on final evaluation (#13475)
Suggested-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-08 08:04:32 +00:00
Sandaru Wijewardhana 2dd05e4841 Bump nerdctl to v2.3.5 (#13437)
Signed-off-by: sandaruwijewardhana <sandaruwijewardhana@gmail.com>
2026-09-08 07:44:30 +00:00
Max Gautier bbad309f41 update-hashes: temporarily exclude gvisor (#13459)
Gvisor changed it's release artefacts, which makes the whole updater
script fail.
Let's exclude them for now.
2026-09-08 07:22:30 +00:00
Nikhil Kumar 33a26fb9e3 openSUSE: add Leap 16.0 support and CI coverage (#13473) 2026-09-07 14:58:29 +00:00
Max Gautier 85cfaa2cef fix/ansible-core 2.19: docker: bool implict conversion (#13471) 2026-09-07 09:00:28 +00:00
Alexander Skiba (MANZ Solutions) 12355b7e0a Fix lint violation: jinja[invalid] to make pre-commit pass (#13337) 2026-09-07 07:24:28 +00:00
Max Gautier 490253f6f0 fix/ansible-core 2.19: ntp_timezone implicit string -> bool (#13469) 2026-09-05 04:46:22 +00:00
Kay Yan e164ca4315 image-builder: add openSUSE Leap 16.0 image (#13453)
Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-09-03 15:04:21 +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
Max Gautier afd33dd657 lint: Disable name-casing (and remove comment) (#13456)
ansible-lint is pretty opiniated, and a lots of its opinion are not
particularly useful for Kubespray, so delete the comment about not
adding skip rule entries.

We should not add them willy-nilly but some stuff just does not make
sense, in that case name[casing] when prefixing tasks name with role
name.
2026-09-03 14:04:22 +00:00
Abhishek Kanyahal cf0e68ee98 Updates in the calico config and template to support disabling ipv4 pools during pure ipv6 deployment (#13225)
* #13157: Updates in the calico config and template to support disabling ipv4 pools during pure ipv6 deployment

Signed-off-by: root <kanyahal.abhishek@gmail.com>

* Updates in the calico config and template to support disabling ipv4 pools during pure ipv6 deployment

* Updates in the calico config and template to support disabling ipv4 pools during pure ipv6 deployment

---------

Signed-off-by: root <kanyahal.abhishek@gmail.com>
2026-09-03 13:10:27 +00:00
Dhakshin Raghav 1daa5c4af0 Bump Flannel version to v0.28.9 (#13436) 2026-09-03 12:32:19 +00:00
ChillRedChilli 8e6673b467 ci: restore molecule tests for kata-containers. (#13452)
- Move kata-containers out of the molecule_full matrix and back to the standard molecule job to run on every PR.
2026-09-03 12:26:20 +00:00
Mehrdad Biukian a369d66c43 fix(calico): make IPv6 pool validation actually run (#13450)
Three defects in the IPv6 branch of check.yml kept the IPv6 pool
assertion from ever executing:

1. 'alico_ipv6 is defined' - typo of calico_ipv6, so the set_fact
   was always skipped (Jinja2 treats the undefined var as False).
2. The set_fact stored the pool as calico_pool_conf, overwriting the
   IPv4 pool fact on dual-stack clusters, while the IPv6 assertion
   gated on calico_pool_ipv6_conf - a name that was never set.
3. The assertion body also read calico_pool_conf, so even with the
   gate fixed it would validate against the IPv4 pool's values.

Store the IPv6 pool as calico_pool_ipv6_conf, gate the set_fact on
the registered calico_ipv6 result, and make the assertion read the
IPv6 fact - mirroring the IPv4 pattern directly above.

Verified with ansible-playbook on mocked calicoctl output:
- old code: set_fact skipped, no validation (reproduces the report)
- new code: mismatched blockSize caught with a clear assertion msg
- matching config passes through unchanged

Signed-off-by: Mehrdad Biukian Naeini <mehrdadbiukian@gmail.com>
2026-09-03 10:32:21 +00:00
Kay Yan 990d3035a1 Fix custom_cni manifest apply failure for multi-namespace resources (#13091)
* fix(custom_cni): make namespace optional

Keep kube-system as the default for existing manifests. An empty custom_cni_namespace omits kubectl's namespace flag so manifests spanning multiple namespaces can be applied without changing legacy behavior.

Signed-off-by: Kay Yan <kay.yan@daocloud.io>

* docs(custom_cni): document multi-namespace manifests

Signed-off-by: Kay Yan <kay.yan@daocloud.io>

---------

Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-09-02 09:38:20 +00:00
dependabot[bot] 9ee6f9b279 build(deps): bump cryptography from 50.0.0 to 50.0.1 (#13439)
Bumps [cryptography](https://github.com/pyca/cryptography) from 50.0.0 to 50.0.1.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/50.0.0...50.0.1)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 50.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-09-01 21:04:15 +00:00
Kay Yan 332387f1ab image-builder: use stable Ubuntu 24.04 image (#13445)
The pinned daily Noble image was pruned and now returns HTTP 404. Use the immutable Ubuntu release build and its matching checksum instead.

Default validate-single-docker to ubuntu-2404 so the presubmit command does not need to repeat the image name.

Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-09-01 16:48:17 +00:00
Mehrdad Biukian f7b0af0d60 fix: render routingMode native when cilium_tunnel_mode is disabled (#13427)
* fix: render routingMode native when cilium_tunnel_mode is disabled

When cilium_tunnel_mode is set to 'disabled', the previous template rendered
'tunnelProtocol: disabled', which Cilium does not recognise and falls back to
vxlan. With native routing this conflicts and agents CrashLoopBackOff.

Render 'routingMode: native' instead when disabled, matching the Cilium Helm
chart API (per maintainer review on #13427 and #13314).

Refs kubernetes-sigs/kubespray#13267

Signed-off-by: Mehrdad Biukian Naeini <mehrdadbiukian@gmail.com>

* fix(cilium): tighten routingMode native render (remove stray blank line)

Per review comment on kubernetes-sigs/kubespray#13427, drop the extra
blank line after the routingMode/tunnelProtocol if-block so the rendered
Helm values file is clean.

Validated by rendering the template for cilium_tunnel_mode in
{disabled, vxlan, geneve}: disabled yields 'routingMode: native' with no
tunnelProtocol; vxlan/geneve yield 'tunnelProtocol: <mode>'.

Signed-off-by: Mehrdad Biukian Naeini <mehrdadbiukian@gmail.com>

---------

Signed-off-by: Mehrdad Biukian Naeini <mehrdadbiukian@gmail.com>
2026-08-31 03:18:08 +00:00
Ali Afsharzadeh 46dbdd3994 Patch versions updates (#13423)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-08-21 10:07:16 +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
Ali Afsharzadeh c2089ae595 Upgrade cilium from 1.20.0 to 1.20.1 (#13419)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-08-21 04:31:14 +00:00
dependabot[bot] aaa75cfa11 build(deps): bump molecule from 26.6.0 to 26.8.0 in the molecule group (#13418)
Bumps the molecule group with 1 update: [molecule](https://github.com/ansible/molecule).


Updates `molecule` from 26.6.0 to 26.8.0
- [Release notes](https://github.com/ansible/molecule/releases)
- [Commits](https://github.com/ansible/molecule/compare/v26.6.0...v26.8.0)

---
updated-dependencies:
- dependency-name: molecule
  dependency-version: 26.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: molecule
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-17 10:16:18 +00:00
ChillRedChilli ed99c2a4cb kata-containers: Update release artifacts to zst format. (#13389)
- Updated download URLs to fetch the kata-static<...>.zst files from github repo.
- Added zstd package in kata-continers role.
- Updated version checksums to match the new release files.

Moved zstd dependency to roles/system_package
2026-08-16 15:04:14 +00:00
Nikhil Kumar bf077e7360 Replace injected Ansible fact variables in network_plugin role (#13382) 2026-08-16 14:24:17 +00:00
dependabot[bot] ddd9ae131b build(deps): bump cryptography from 49.0.0 to 50.0.0 (#13411)
Bumps [cryptography](https://github.com/pyca/cryptography) from 49.0.0 to 50.0.0.
- [Changelog](https://github.com/pyca/cryptography/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pyca/cryptography/compare/49.0.0...50.0.0)

---
updated-dependencies:
- dependency-name: cryptography
  dependency-version: 50.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-11 08:45:17 +00:00
Kay Yan fe0328f38a docs: clarify Kubernetes support window (#13216)
Document the rolling three-minor Kubernetes support window and derive the README minimum version from kube_version_min_required.

Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-08-10 09:46:04 +00:00