Commit Graph
8963 Commits
Author SHA1 Message Date
Kay Yan 9751ea6f63 fix: use boolean conditions in control-plane recovery (#13541)
Signed-off-by: Kay Yan <kay.yan@daocloud.io>
v2.32.0
2026-09-22 04:26:09 +00:00
Ali Afsharzadeh b1b5c3689c Bump helm to v3.22.0 (#13535)
Add the checksums for 3.22.0, 3.21.x and 3.20.x.
Remove the checksums for 3.16.x, 3.17.x and 3.18.x, so that the list
keeps the three latest minor versions.

Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-22 03:16:11 +00:00
MohammadReza d6611c65ee chore(deps): bump cluster-proportional-autoscaler to v1.10.3 (#13529) 2026-09-21 06:38:00 +00:00
Kay Yan 52be0d6956 Bump Gateway API to v1.6.2 (#13534)
Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-09-21 06:26:00 +00:00
Kay Yan ce6f5fe886 feat: add openSUSE MicroOS support (#13449)
Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-09-20 13:45:57 +00:00
2af9b1cc94 docs: pass boolean extra-vars as JSON for Ansible 12 compatibility (#13526)
* docs: pass boolean extra-vars as JSON for Ansible 12 compatibility

Ansible 12 no longer accepts boolean values passed with -e var=true; the
value is treated as a string, which breaks conditionals that expect a
boolean. Update all documentation examples to use JSON syntax for boolean
extra-vars and link to the Ansible 12 porting guide.

Signed-off-by: Shashank Varma <324153016+shashankvarma499@users.noreply.github.com>

* docs: clarify Ansible boolean types and configuration examples

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

---------

Signed-off-by: Shashank Varma <324153016+shashankvarma499@users.noreply.github.com>
Signed-off-by: Kay Yan <kay.yan@daocloud.io>
Co-authored-by: Shashank Varma <324153016+shashankvarma499@users.noreply.github.com>
Co-authored-by: Kay Yan <kay.yan@daocloud.io>
2026-09-20 06:05:59 +00:00
MohammadReza b8ad8289a8 Bump local-path-provisioner to v0.0.37 (#13525)
* chore(deps): bump local-path-provisioner to v0.0.37

Includes the fix for GHSA-7fxv-8wr2-mfc4, a high-severity HelperPod
template injection issue fixed in v0.0.36, where a user able to edit
the local-path-config ConfigMap could cause unsafe HelperPods to be
created. v0.0.36 adds template validation for this; Kubespray's
helperPod template already passes it (no privileged containers,
hostPath volumes or unsafe pod security settings).

Also syncs two gaps in the vendored manifests, verified against
upstream's v0.0.37 chart RBAC and deploy/local-path-storage.yaml:

- ClusterRole: grant update on persistentvolumeclaims (rancher/
  local-path-provisioner#530) and read access to pods/log, which the
  provisioner needs to read helper pod output. Note the existing
  pods: ["*"] rule does not cover the pods/log subresource.
- helperPod: add priorityClassName system-node-critical and a
  toleration for node.kubernetes.io/disk-pressure, so cleanup pods
  can still be scheduled onto a node that is under disk pressure.

* fix(local-path-provisioner): add health probes and config env vars
2026-09-18 10:20:44 +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
Max Gautier 66f8da3f04 CI/molecule: use common vars as well and simplify run (#13520)
The molecule_run.sh isn't really needed since the switch to gitlab-ci
matrix runs.

Also use the inventory variables pattern for kata-containers.
2026-09-17 09:09:23 +00:00
Max Gautier bd20622a16 download: define utility variables (#13521)
local_release_dir has insufficient nuances, as it needs to handle
several cases,
- where to put downloaded artifacts
- where to search for when installing artifacts
- where to search for when using artifacts (passing them via lookup to
  kubectl stdin for instance)

Furthermore, depending on how the user set up download delegation, the
value we want can be on the host the tasks is executing, on the
delegated hosts, etc.

Define variables on top of local_release_dir for differents contexts,
handling which host context to use depending on `download_delegate`.

Mostly, this boils down to choosing the correct `host` for
hostvars[host]['local_release_dir'].
2026-09-17 08:59:23 +00:00
MohammadReza f4eaac3a94 Bump node-feature-discovery to v0.19.0 (#13512)
* chore(deps): bump node-feature-discovery to v0.19.0

Checked all intermediate releases (0.17.0, 0.18.0, 0.19.0) for breaking changes. v0.19.0's RBAC breaking change (nfd-topology-updater needs list+watch on pods) does not apply here: Kubespray does not deploy an nfd-topology-updater workload (only an unused ConfigMap template for it exists in this role). v0.19.0 also removed env/expandenv/getHostByName from NodeFeatureRule templates -- only affects user-authored custom NodeFeatureRule resources, not anything this role ships by default.

* fix(nfd): add missing namespaces RBAC rule and fix nodefeaturegroups typo

* fix(nfd): add missing delete verb to nfd-worker Role

* chore(nfd): sync CRD manifest with upstream v0.19.0

* fix(nfd): drop removed gRPC-era flags/ports from nfd-master

* fix(nfd): remove leftover crd-controller args block

Previous commit added the new args but left the old -crd-controller
and -metrics block in place instead of replacing it.

* fix(nfd): drop removed gRPC-era flags from nfd-worker

* chore(nfd): drop variables no longer read by any template

* fix(nfd): align nfd-worker port naming and add health probes

* fix(nfd): remove obsolete nfd-master Service

* chore(nfd): register removed variables in validate_inventory

* fix(nfd): clean up the obsolete Service manifest on disk

* fix(nfd): add health probes and http port to nfd-gc

* fix(nfd): align nfd-worker env and mounts with upstream
2026-09-17 08:45:26 +00:00
Max Gautier 23f8593cf5 download/calico_crds: use flat manifest path (#13522)
The additional directory is unnecessary.
2026-09-17 07:41:25 +00:00
Ali Afsharzadeh ddb6ee50d9 Upgrade cilium from 1.20.1 to 1.20.2 (#13515)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-16 14:01:23 +00:00
Mohammad Reza Ghahramani cee04a3129 fix: move control-plane reserved resource vars to correct group_vars path (#13518)
* fix: move kube_control_plane reserved vars to correct group_vars location

The file inventory/sample/group_vars/k8s_cluster/kube_control_plane.yml
was being applied to the whole k8s_cluster group instead of only
kube_control_plane. Move it to group_vars/kube_control_plane.yml so the
higher CPU/memory reservations only affect control-plane nodes.

* fix getting-started.md with new kube_control_plane.yml path
2026-09-16 13:27:25 +00:00
MohammadReza 09307ebc37 chore(deps): bump metrics-server to v0.9.0 (#13511)
No breaking changes per upstream release notes (CLI flags, RBAC, and
deployment shape unchanged). metrics-server is image-only in Kubespray
(no checksum pinning to update). Upstream also bumped their own
Kubernetes client deps to v1.36.2, matching what Kubespray currently
targets.
2026-09-15 10:05:22 +00:00
kubernetes-prow[bot] bfdc86965e Merge pull request #13468 from VannTen/ansible_2_19
Upgrade to ansible-core 2.19
2026-09-15 10:01:24 +00:00
Max Gautier 93bd100334 fix: molecule idempotency tests 2026-09-15 10:58:00 +02:00
Max Gautier f5c0336b91 Cleanup after upgrade to 2.19 2026-09-15 10:57:59 +02:00
Max Gautier 535703ea2e Upgrade ansible to 12.*, ansible-core to 2.19.* 2026-09-15 10:57:58 +02:00
Max Gautier 5af06acee1 fix: ansible 2.19: calico resources final evaluation (#13503)
The bgp changes are a bit verbose, because I chose to reproduce the
exact semantics of the current code, so that the manifest handed to
calicoctl does not contain unset fields (instead of just using defaults
value).

It would be more readable to just accept default value in the
manifests, but might be a problem if there is other writer of the same
Calico resources.
2026-09-15 08:55:22 +00:00
longxiucai 53a30aea58 Fix kubelet.conf server line indentation (#13284)
The lineinfile tasks that rewrite the server field in kubelet.conf
replaced the whole line with a hard-coded indentation, corrupting the
file when the existing entry was indented differently. Capture the
original leading whitespace with a group regexp and restore it via
backrefs so the rewrite preserves the surrounding YAML structure.

Signed-off-by: longyuxiang <longyuxiang@kylinos.cn>
2026-09-15 06:37:18 +00:00
Max Gautier b1b01bc579 local_volume_provisioner: match upstream storage class syntax (#13504)
Use the upstream keys without converting them to snake case. This avoids
converting back to camel case when rendering, and aligns ourselves more
with our upstream.
2026-09-14 15:45:22 +00:00
Max Gautier 49ca08fe0d CI: Make tf-elastx_ubuntu24-calico manual (#13508)
This jobs is regularly failing for external reasons (can't provision the
VMs, unable to SSH into them, etc) and is also slower than the rest.

Mkae it manual.
2026-09-14 15:05:22 +00:00
jskrill 6413f2ae5c fix(kubernetes/node): use numeric priority for static pods (#13490)
Signed-off-by: Jules Skrill <julesskrill@gmail.com>
2026-09-14 14:37:20 +00:00
Shruti ca71ebf3d1 facts: continue gathering when a host is unreachable (#13438) 2026-09-14 07:27:22 +00:00
arhuman 8c19dcf51e Bump ansible-static-lint pre-commit hook to v0.5.1 (#13506) 2026-09-14 07:13:18 +00:00
Max Gautier ba14261690 pre-commit: run slow hooks only in CI (#13494)
collection-build-install and check-checksums-sorted have low value for
local development, as what they check isn't likely to be touched by most
contributors
It's also enough to run once pre-commit with --hook-stage manual in CI
to run all hooks (since hooks without a 'stages' applies to all stages)
2026-09-11 15:02:37 +00:00
Max Gautier d2c4885769 Drop debian 13 docker support (#13499)
Debian 13 eliminated apt-key needed to add docker repository.
It needs some work to be supported again.
2026-09-10 14:04:42 +00:00
Max Gautier 3d13ab9e1c CI: put back flatcar in flakey (#13497)
It's sill flakey
2026-09-10 13:48:44 +00:00
Max Gautier 3437dde4b9 fix: ansible 2.19: calico: felix config final evaluation (#13496) 2026-09-10 13:48:36 +00:00
Max Gautier 16ad6da94e fix: ansible 2.19: etcd_events_address final evaluation list (#13498) 2026-09-10 13:40:35 +00:00
Narwhal-fish b99fff7373 CI: add support for Fedora 44 and retire Fedora 42 in CI configurations (#13464)
* ci: add Fedora 44 and retire Fedora 42

Signed-off-by: Narwhal-fish <johnnyfish0221@gmail.com>

* chore: adjust order of fedora-44 in main.yml

---------

Signed-off-by: Narwhal-fish <johnnyfish0221@gmail.com>
2026-09-10 12:52:34 +00:00
Nikhil Kumar cfa983e8c7 Replace injected Ansible fact variables in etcd role (#13338) 2026-09-10 11:24:34 +00:00
longxiucai 5e5b072597 fix(cert_manager): stop deleting the namespace on every upgrade run (#13493)
The "Remove legacy namespace" task unconditionally ran
kubectl delete namespace on every playbook run carrying the upgrade
tag, wiping user-managed resources in the cert-manager namespace (for
example custom Issuer secrets) as well as cert-manager's own state,
before the namespace was recreated and the manifests re-applied.

The legacy addon migration this cleanup was written for dates back to
2018 and no longer applies; the apply path (kube module, state latest)
upgrades cert-manager in place without a namespace reset.

Signed-off-by: longyuxiang <longyuxiang@kylinos.cn>
2026-09-10 09:24:36 +00:00
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