Commit Graph
5940 Commits
Author SHA1 Message Date
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
MohammadReza b1881b5a3e chore(deps): bump runc to 1.5.2 (#13622) 2026-10-08 19:39:59 +00:00
ERIK d74d180c09 reset: unmount calico cgroup2 fs before deleting /run/calico (#13592)
Signed-off-by: bo.jiang <bo.jiang@daocloud.io>
2026-10-08 12:17:58 +00:00
Ali Afsharzadeh d98540de2c Add etcd_feature_gates and restore the etcd 3.5 flag names (#13569)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-10-08 03:41:59 +00:00
MohammadReza 5eae65cc2a chore(deps): bump nerdctl to 2.4.1 (#13617) 2026-10-08 02:44:00 +00:00
MohammadRezaandAli Afsharzadeh 622a1666ed Remove upgrade shims shipped in 2.31.0 and 2.32.0 (#13598)
* chore: remove upgrade shims shipped in 2.31.0 and 2.32.0

* fix(validate_inventory): anchor every name in the removed_vars regex

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

---------

Co-authored-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-10-04 10:00:23 +00:00
Farshad Asadpour c58f0aff41 [argocd] Bump ArgoCD version to 3.5.3 (#13591)
Argo CD publishes its tested Kubernetes versions at
https://argo-cd.readthedocs.io/en/stable/operator-manual/tested-kubernetes-versions/

3.5.3 is the latest available Argo CD release. Its matrix covers v1.33
through v1.36, which does not include the v1.37.1 shipped by this
branch, so this is the best available option rather than a combination
upstream has marked as tested. The 2.14 series is no longer listed on
that matrix.

argocd_version is derived from the first entry of
argocd_install_checksums, so adding the checksum for 3.5.3 at the top
of the list selects it.
2026-10-04 07:20:20 +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
Kay Yan ebf1560fc0 Revert EL8 Python bootstrap and Calico CI (#13596)
This reverts commit e19d1c9a55.

Allow further maintainer discussion without introducing additional changes.

Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-09-30 08:20:38 +00:00
Kay Yan e19d1c9a55 Enable AlmaLinux 8 and Rocky Linux 8 Calico CI with Python 3.12 bootstrap (#13593)
* Enable AlmaLinux 8 and Rocky Linux 8 Calico CI

Install Python 3.12 with yum before gathering facts when the interpreter
selected by Ansible is missing or older than Python 3.9, and add
bootstrap_os_install_python to control distribution-specific Python
bootstrap installation.

EL8 only ships the libselinux Python bindings for the distribution
Python 3.6, so ansible.posix.selinux fails once Kubespray runs with
Python 3.12. Keep using the module when the bindings are importable and
otherwise set the policy in /etc/selinux/config and apply the runtime
state with setenforce.

Enable rockylinux8-calico in regular PR CI, add almalinux8-calico as a
manual job, and document the RHEL 8 family lifecycle.

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

* Fix EL8 containerd compatibility and SELinux runtime transitions

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

---------

Signed-off-by: Kay Yan <kay.yan@daocloud.io>
2026-09-29 10:32:14 +00:00
MohammadReza d5190f6071 refactor: resolve ansible-core 2.19 TODOs now that 2.21 is the minimum (#13588) 2026-09-28 21:35:32 +00:00
MohammadReza ec07470009 Bump registry to 3.1.2 (#13531)
* chore(deps): bump registry to 2.8.3

* chore(deps): bump registry to 3.1.2
2026-09-28 12:36:35 +00:00
Max Gautier cad55c82c6 Cleanup leftover variables from yq removal (#13582) 2026-09-28 08:22:32 +00:00
Dasmat Hansda a9c2b73d31 fix: ensure consistent etcd certificate permissions on first etcd node (#13367)
* fix(etcd): ensure consistent certificate permissions on first etcd node

The etcd certificate generation script runs on the first etcd node and
creates certs with default ownership and permissions. Subsequent copy
tasks set explicit ownership and permissions on the remaining etcd
nodes, resulting in inconsistent permissions across the cluster.

This can cause issues such as etcd backup jobs failing on the first
node due to missing read access to certificate files.

Add an ansible.builtin.file task after cert generation to explicitly
set the correct ownership and permissions on the first etcd node.

* fix(etcd): guard client certificate permissions

* fix(etcd): set certificate permissions during installation
2026-09-28 07:32:33 +00:00
Ali Afsharzadeh baf68247eb Fix network range asserts on Ansible 2.19 (#13575)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-26 15:04:28 +00:00
Dasmat Hansda e62c778293 fix: correct CiliumBGPNodeConfigOverride CRD wait condition and deprecate legacy BGP Peering Policy (#13366)
* fix: correct CiliumBGPNodeConfigOverride CRD wait condition and deprecate legacy BGP Peering Policy

- Fix copy-paste bug where cilium_bgp_advertisements was used instead of
  cilium_bgp_node_config_overrides when waiting for the
  CiliumBGPNodeConfigOverride CRD. This caused the CRD readiness check
  to be skipped when only node config overrides were configured.
- Add deprecation notices across docs, sample inventory, and defaults
  to guide users away from the legacy v2alpha1 CiliumBGPPeeringPolicy
  toward the supported BGP v2 API variables.

* fix(cilium): simplify BGP node override condition
2026-09-26 10:00:27 +00:00
Mehrdad Biukian d75f23cba3 fix(container-engine/cri-o): flush Restart crio handler inside the role (#13416)
* fix(container-engine/cri-o): flush Restart crio handler inside the role

During a Kubernetes upgrade (e.g. 1.32 -> 1.33) the cri-o systemd service is
not restarted even though the new cri-o binaries are deployed. This leaves the
node running the old cri-o version (reported as crio://1.32.x after kubelet is
upgraded to 1.33.x); a manual 'systemctl restart crio' fixes it.

The cri-o role notifies 'Restart crio' from several tasks (binary copy,
registries, proxy drop-in, service file, etc.) but never flushes the handler
itself. The handler only fired when the kubernetes/node role ran its own
'meta: flush_handlers' later in the same play. That cross-role dependency is
fragile during upgrades: if kubernetes/node is skipped, tagged out, or the
flush is reordered, the restart is silently dropped.

Route every restart through the single handler: crio.conf and config.json now
notify 'Restart crio' and the ad-hoc 'trigger service restart only when needed'
task is dropped (its restart duplicated what the handler already does, and a
restarted unit also starts a stopped one). Then add 'meta: flush_handlers'
right after the service start task so the pending handlers run as part of this
role regardless of any downstream role's flush timing.

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

* test(youki): run youki before cri-o in molecule converge

The converge ran container-engine/cri-o before container-engine/youki, the reverse of the order used by the container-engine role, which installs the runtime roles (kata-containers, gvisor, crun, youki) before the container manager role.

With cri-o flushing its restart handler inside the role, cri-o is now restarted while /usr/local/bin/youki does not exist yet: CRI-O skips the runtime whose binary is missing, so the youki runtime handler is never registered and the verify step fails with 'failed to find runtime handler youki from runtime list map[crun:...]'. Running the roles in the playbook order puts the youki binary in place before cri-o starts.

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

---------

Signed-off-by: Mehrdad Biukian Naeini <mehrdadbiukian@gmail.com>
2026-09-26 09:50:28 +00:00
Ali Afsharzadeh ac72c82651 Compare the ip var with local IPs as addresses (#13577)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-26 09:36:28 +00:00
Ali Afsharzadeh 90f7c2505f Set priorityClassName and priority on static pods (#13578)
With priority only (#13490), the API server rejects the mirror pods
and the kubelet does not give the pods the node-critical OOM score.
Set both fields, like kubeadm does for its static pods.

Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-26 08:46:28 +00:00
Ali Afsharzadeh 49c7a478e1 Compare Calico pool CIDRs as networks (#13576)
The check compares the Calico IP pool CIDR with the inventory as
strings, so the same network in a different notation fails, for
example fd85:ee78:d8a6:202::1:0000/112 and fd85:ee78:d8a6:202::1:0/112.
Use ipaddr('net') on the two sides.

Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-26 07:28:27 +00:00
Max Gautier 58be448c63 Remove yq as it's no longer needed
After removing it's use in argocd install, yq is no longer used
anywhere.

Remove it everywhere.
2026-09-25 19:46:04 +02:00
Max Gautier 88b827e58d argocd: simplify manifests apply
ArgoCD upstream manifests do not include namespace for the objects, so
there is no need to override it, and simply using kubectl flags allow to
set it.

Use the upstream file directly , considerably simplifying the argocd
install.

ansible-lint: the refactor apparently newly exposes the password hash
filter to ansible and this needs passlib, so add it to the pre-commit
dependencies.
2026-09-25 19:45:58 +02:00
Max Gautier 7462b8b93b download: hardcode artifacts mode & owner (#13570)
The artifacts acquisition does not need particular owner or mode, it
only needs to be readable by other parts of kubespray actually installing
the artefacts where needed.

Thus, remove all mode / owner specific maniulation in download and
hardcode to 0644/0755 for file/directory.
2026-09-25 13:02:30 +00:00
Ali Afsharzadeh cc65b8d9e3 Upgrade etcd to 3.7 for Kubernetes 1.37 (#13363)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-25 06:16:30 +00:00
Max Gautier 327e7fde9c collection: rename helm-apps to helm_apps (#13553)
needed for compatibily with Galaxy
2026-09-24 16:40:17 +00:00
Ali Afsharzadeh 6e06a10613 Update youki to 0.7.0 and download the static musl build (#13564)
Add the 0.6.0 and 0.7.0 checksums, drop 0.4.x, and move youki back
into the blocking molecule matrix. The seccomp bug behind the old
FIXME (youki#3479) is fixed in 0.7.0.

The 0.7.0 gnu tarball is linked against glibc 2.39, because cross-rs
moved its base image to Ubuntu 24.04 and youki installs cross from
git. It does not run on EL9, Amazon Linux 2023, Ubuntu 22.04 or
Debian 12, and it needs libseccomp on the host.

The musl tarball is static, has the same default features and no
runtime requirements. It is the build upstream recommends in its
setup docs.

Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-24 12:18:20 +00:00
Max Gautier c943bcadf6 downloads: separate etcd and etcd_container (#13555)
Mixing two semantically distincts artefacts makes things harder to read
and to consume from other code.

Needed for clean filtering on container / file.
2026-09-24 10:42:17 +00:00
Ali Afsharzadeh 635d996c2c Support Kubernetes 1.37 (#13561)
Signed-off-by: Ali Afsharzadeh <afsharzadeh8@gmail.com>
2026-09-24 10:22:20 +00:00
Max Gautier 0cbb6f38bf downloads: pre-filter the loop instead of using when (#13563)
This prevent evaluation of the whole item even if not used, and the
tasks scheduling of skipped tasks.
Preventing evaluation in particular helps avoiding irrelevant errors,
like when an unused downloads member has undefined members.
2026-09-24 09:00:21 +00:00
Shuu 0839383414 fix: skip None resolvconf paths on Ansible Core 2.19 (#13548)
Empty base/head facts render to None on Ansible Core 2.19, which
difference(['']) does not remove. Use select to drop both.
2026-09-24 03:54:14 +00:00
Max Gautier caba976460 collection: rename bastion-ssh-config role (#13554)
Needed for compatibility with Galaxy
2026-09-23 19:44:16 +00:00
Max Gautier 1cfdc51bb3 Remove compat roles incompatible with galaxy collection (#13551) 2026-09-23 19:04:19 +00:00
Max Gautier ef3ca1aa0e remove_node: rename role to galaxy naming convention (#13552) 2026-09-23 18:56:20 +00:00
kubernetes-prow[bot] 7e6c39baf5 Merge pull request #13523 from VannTen/container_merge_repo_tag
downloads/container: merge repo and tag
2026-09-23 17:10:15 +00:00
Max Gautier 2f42f98d22 Update docs and offline scripts for merged repo + tag in downloads 2026-09-23 15:35:00 +02:00
Max Gautier 6ff47af1ce download: Remove checksums for all container
The pull by digest hasn't been working since 800c84dcc (download: use
full hash form (including hash alg), 2025-01-14), where the key was
renamed to checksum, but the download_container still checked sha256.

Stop pretending we pull by digest.
2026-09-23 13:18:50 +02:00
Max Gautier e013507027 download/container: adapt to single key repo+tag -> image_name
This code will be deleted for the rework of the download role, for now
we minimally adapt it to the new structure of downloads.
2026-09-23 13:18:49 +02:00
Max Gautier 164f7fbf40 download: merge repo and tag key in downloads container dict
Those key are only used as part of the downloads role which will be
removed, and it's more convenient to use a single key directly in Jinja
pipelines.
2026-09-23 13:18:43 +02:00
Kay Yan 9751ea6f63 fix: use boolean conditions in control-plane recovery (#13541)
Signed-off-by: Kay Yan <kay.yan@daocloud.io>
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
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