| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-06-22 | 61.0 kB | |
| v1.5.0 source code.tar.gz | 2026-06-22 | 6.6 MB | |
| v1.5.0 source code.zip | 2026-06-22 | 9.0 MB | |
| openapi.json | 2026-06-22 | 2.6 MB | |
| cozypkg-checksums.txt | 2026-06-22 | 564 Bytes | |
| cozypkg-windows-arm64.tar.gz | 2026-06-22 | 22.9 MB | |
| cozypkg-darwin-amd64.tar.gz | 2026-06-22 | 26.7 MB | |
| cozypkg-darwin-arm64.tar.gz | 2026-06-22 | 24.8 MB | |
| cozypkg-linux-amd64.tar.gz | 2026-06-22 | 25.4 MB | |
| cozypkg-linux-arm64.tar.gz | 2026-06-22 | 22.9 MB | |
| cozypkg-windows-amd64.tar.gz | 2026-06-22 | 25.6 MB | |
| initramfs-metal-amd64.xz | 2026-06-22 | 154.4 MB | |
| kernel-amd64 | 2026-06-22 | 20.4 MB | |
| nocloud-amd64.raw.xz | 2026-06-22 | 347.5 MB | |
| metal-amd64.raw.xz | 2026-06-22 | 347.5 MB | |
| metal-amd64.iso | 2026-06-22 | 540.4 MB | |
| cozystack-operator-hosted.yaml | 2026-06-22 | 2.5 kB | |
| cozystack-operator-generic.yaml | 2026-06-22 | 2.6 kB | |
| cozystack-operator-talos.yaml | 2026-06-22 | 2.6 kB | |
| cozystack-crds.yaml | 2026-06-22 | 20.0 kB | |
| Totals: 20 Items | 1.6 GB | 0 | |
Cozystack v1.5.0
Cozystack v1.5.0 brings Gateway API support via Cilium as an opt-in ingress layer alongside ingress-nginx, TLS for managed databases and messaging (Kafka, NATS, Qdrant, and PostgreSQL external endpoints), backups that work out of the box with a platform-managed default BackupClass, a shared backups bucket, a new etcd backup strategy and a generic Job strategy, the Flux v2.8 upgrade with strict server-side apply and kstatus health checking, a new flux-shard-operator that spreads tenant HelmReleases across helm-controller shards so one noisy tenant can no longer stall the others, operator-provided wildcard certificates for platform and root-tenant ingress, GPU passthrough that works without manual KubeVirt patching, a deletion-protection guardrail for critical platform objects, and runtime-populated dashboard dropdowns via a new Option API. The release also rolls up every fix from v1.4.1 through v1.4.4.
Platform components bumped in this release: Flux v2.7.3 → v2.8.0 (flux-operator/flux-instance charts v0.33.0 → v0.50.0), MetalLB v0.15.2 → v0.16.1 (FRR-K8s is now the default BGP backend), SeaweedFS 4.05 → 4.31, etcd-operator v0.4.3 → v0.4.5, ouroboros v0.7.2 → v0.8.0, seaweedfs-cosi-driver v0.3.1, and the new kuberture system package.
Note: Items marked (backported to v1.4.x) were also shipped in the v1.4.1, v1.4.2, v1.4.3, or v1.4.4 patch releases.
Feature Highlights
Gateway API Support via Cilium
Cozystack-native services can now be exposed through the Gateway API backed by Cilium, as an opt-in alternative to the existing per-tenant ingress-nginx controllers. The feature is materialized per tenant through a new gateway.cozystack.io/v1alpha1 TenantGateway CRD reconciled by cozystack-controller.
Enable it at the platform level with publishing.gateway.enabled=true, then either give a tenant its own Gateway, LoadBalancer IP, and certificate with tenant.spec.gateway=true, or leave it unset and let the tenant inherit the nearest ancestor's Gateway through the same label-based selector model that already drives ingress inheritance. Two certificate solver modes are supported: HTTP-01 (the default — a per-app certificate with zero platform configuration for new apps) and DNS-01 (opt-in — a single wildcard certificate covering an apex, with cloudflare, route53, digitalocean, and rfc2136 providers).
Defaults stay on ingress-nginx, so existing clusters are unchanged. Two things to be aware of: Cilium Envoy / Gateway API is now always enabled (an extra cilium-envoy DaemonSet, roughly 100 MB RAM per node at idle), and cozystack-api now invokes admission (createValidation / deleteValidation) on Create and Delete for apps.cozystack.io/* — so any custom ValidatingAdmissionPolicies or webhooks on those kinds will now fire on all three verbs. See the Gateway API guide (@lexfrei in [#2470]).
TLS for Managed Databases and Messaging
Four managed-app charts gain TLS support driven by a single tls.enabled value with consistent tri-state semantics: when unset it inherits external (TLS auto-on when the service is published externally, off when cluster-internal), and an explicit true/false always wins. In every case the trust anchor is a chart- or operator-managed self-signed CA that clients retrieve and pin — there is no publicly trusted CA. The one upgrade-time behaviour change to plan for: existing instances with external: true flip to TLS-on after upgrade; cluster-internal instances are unaffected.
- Kafka serves TLS on its external LoadBalancer listener (port 9094), with certificates managed end-to-end by the Strimzi operator; clients trust via the operator-published
<release>-cluster-ca-cert/<release>-clients-ca-certsecrets. The external listener is now gated only onexternal: true, decoupled fromtls.enabled(@Arsolitt in [#2681]). - NATS and Qdrant gain TLS via a self-contained cert-manager chain (self-signed Issuer → CA → leaf) rendered in the tenant namespace; NATS covers both client connections and cluster routes, Qdrant covers REST and gRPC. Clients trust the
<release>-casecret (@Arsolitt in [#2684], [#2685]). - PostgreSQL — CNPG already serves TLS unconditionally, so
tls.enabledhere injects the external hostname into the operator-managed server certificate's SANs (whenexternal: true), sosslmode=verify-fullworks against the external endpoint. Clients retrieveca.crtfrom the<release>-credentialssecret (@Arsolitt in [#2686]).
Backups That Work Out of the Box
This release closes the gap between "backup machinery is installed" and "backups actually work without per-app S3 configuration."
A platform-managed default BackupClass (cozy-default) is now shipped, backed by a system bucket (cozy-backups). Apps opt in with a useSystemBucket flag, after which the platform projects shared backup credentials into the tenant namespace (with RBAC isolation and projection metrics) and skips per-release credential Secrets. Default strategies are provided for every backup-capable app — Velero for VMDisk/VMInstance, CNPG for PostgreSQL, MariaDB, Altinity for ClickHouse, FoundationDB, and etcd — and a Velero BackupStorageLocation is wired to the system bucket. The legacy per-tenant S3 fields on Postgres and ClickHouse are deprecated in favour of this default flow (@androndo in [#2716]).
To make that default flow reliable, Velero is now a default system package rather than optional. This fixes a deterministic failure where the default backupstrategy-controller (which hard-depends on Velero) sat in DependenciesNotReady and kept the platform HelmRelease from ever reaching Ready. Existing clusters get Velero in the cozy-velero namespace on upgrade; opt out via bundles.disabledPackages if you do not back up VMs (@myasnikovdaniil in [#2833]).
Two new backup strategies join the catalog: an etcd strategy (cluster-scoped strategy.backups.cozystack.io Etcd CRD, S3-only, with snapshot BackupJob and a destructive in-place RestoreJob), and a generic application-agnostic Job strategy where the operator supplies a Kubernetes Job template that Cozystack renders and runs as a one-shot backup, then re-renders with .Mode == "restore" for recovery — the generic counterpart of the app-specific drivers (@androndo in [#2641], @lllamnyp in [#1721]).
Flux v2.8 Upgrade with Strict Server-Side Apply
Flux is upgraded from v2.7.3 to v2.8.0 across both the embedded management-cluster Flux and the optional tenant Flux addon (flux-operator / flux-instance charts move v0.33.0 → v0.50.0). Flux v2.8's helm-controller v1.5 ships Server-Side Apply with --force-conflicts and kstatus-based health checking by default — so misplaced chart fields that v2.7 silently dropped are now hard errors (fixed here for foundationdb, kafka, kubevirt-instancetypes, vm-instance, and the platform chart), and parent HelmReleases now wait for every child resource to be Ready before reporting Ready themselves.
Action required on upgrade: Kubernetes 1.33+ is now required for the management cluster (and for any tenant cluster enabling the Flux addon). The upgrade.force: true knob is removed, so immutable-field changes (for example StatefulSet volumeClaimTemplates / serviceName) no longer self-heal and must be recreated manually (kubectl delete sts <name> --cascade=orphan). Persistent TPM/EFI is re-enabled for Windows KubeVirt preferences (each affected VM provisions one extra RWO PVC), and FoundationDB imageType is pinned to split to keep upgrades non-disruptive (@myasnikovdaniil in [#2602]).
flux-shard-operator: Tenant helm-controller Sharding
A new flux-shard-operator spreads tenant HelmReleases across multiple helm-controller shards, so one noisy tenant — for example a HelmRelease stuck in infinite remediation — can no longer degrade reconciliation for everyone else. Placement is per-tenant (all of a tenant's HelmReleases share one shard), assigned greedily by least load, with a CREATE-time mutating webhook stamping the shard label on each HelmRelease.
It ships with shardCount: auto by default, which sizes shards from the tenant HelmRelease count: small clusters stay at a single shard (today's behaviour) while large fleets shard out automatically, and an integer pins the count explicitly. The legacy hand-rolled flux-tenants deployment is drained and retired automatically by migration 44 (@kvaps in [#2821]).
Operator-Provided Wildcard Certificates
Operators can now serve platform services and the root tenant's ingress under a pre-existing wildcard TLS certificate instead of minting per-host ACME certificates. Set publishing.certificates.wildcardSecretName to the name of a TLS Secret already created in the publishing namespace (tenant-root by default) — only the Secret name travels over the cozystack-values channel, never the key material.
It works on both ingress paths: with ingress-nginx the controller serves it as --default-ssl-certificate and platform Ingresses drop their cert-manager annotations; with Gateway API a new existingSecret TenantGateway cert mode references the Secret directly and provisions no Issuer or Certificate. Scope is the root tenant only for now; extending wildcard mode to child tenants is a follow-up (@lexfrei in [#2819]).
GPU Passthrough Out of the Box
GPU enablement is wired up across all three paths a GPU can reach a workload, each of which previously needed manual reconciliation.
For tenant Kubernetes, node-groups declaring gpus automatically get the gpu=on kubelet label (so HAMi's device plugin schedules and advertises nvidia.com/gpu), and the tenant gpu-operator loads the driver with NVreg_NvLinkDisable=1, fixing single-SXM-GPU passthrough that previously hung at "Fabric State: In Progress" with CUDA "system not yet initialized." Both defaults are overridable via addons.gpuOperator.valuesOverride (@kvaps in [#2780]).
For KubeVirt VMs, enabling cozystack.gpu-operator now auto-populates the KubeVirt CR — injecting the HostDevices feature gate and filling permittedHostDevices (plus mediatedDevicesConfiguration for vGPU) from shipped NVIDIA default tables — so GPU VMs schedule without a manual kubectl patch. Action required: the bundle now owns spec.configuration.permittedHostDevices, so the first reconcile after upgrade overwrites any hand-edited entries; move custom device entries into .gpu.permittedHostDevices before upgrading and verify each resourceName matches what nodes advertise (@lexfrei in [#2768]). A third gpu-operator container variant is also added for hosts where the NVIDIA driver and container-toolkit are already installed by the OS, exposing GPUs to regular containerized pods via the device plugin only (@lexfrei in [#2766]).
Deletion-Protection Guardrail
A new deletion-protection guardrail blocks DELETE on critical platform objects labeled platform.cozystack.io/no-delete=true, evaluated in-process by the kube-apiserver via a ValidatingAdmissionPolicy — no webhook, DaemonSet, TLS, or extra image. Protected objects in this release include the cozy-system and tenant-root namespaces, the tenant-root HelmRelease, the cozystack-version ConfigMap, the cozystack-packages OCIRepository, the cert-manager ClusterIssuers, the LinstorCluster, and the packages CRDs; a migration backfills the label onto existing resources.
To delete a protected object, remove the label first (kubectl label <kind> <name> platform.cozystack.io/no-delete-). Requires Kubernetes 1.30+ (@myasnikovdaniil in [#2650]).
Runtime-Populated Dashboard Dropdowns
A new generic mechanism powers runtime-populated dropdowns in dashboard create/edit forms, so fields that reference live cluster resources — GPU devices, KubeVirt instancetypes and preferences, Multus networks, VM images, storage pools, storage classes, backup classes and plans — become accurate dropdowns instead of free text or stale static enums. It introduces a namespaced, read-only Option resource (core.cozystack.io/v1alpha1) computed on read by a privileged in-process provider registry, and an x-cozystack-options schema keyword that app charts declare via the cozyvalues-gen @x-cozystack-options directive. Tenants get read-only access to options in their own namespace (from cozy:tenant:view:base upward), so curated lists populate without granting broad cluster reads (@kvaps in [#2778]).
Upgrade Notes and Required Actions
Most operators can take v1.5.0 with no manual action — the in-platform migrations handle config rewrites automatically — but five changes warrant attention.
-
Kubernetes 1.33+ required for the management cluster. With [#2602], Flux jumps v2.7.3 → v2.8.0 and helm-controller v1.5 requires Kubernetes 1.33 or newer on the management cluster (and on any tenant cluster that enables the Flux addon). Upgrade Kubernetes before taking this release if you are below 1.33.
-
upgrade.forceis gone — immutable-field changes no longer self-heal. Also with [#2602], the helm-controllerupgrade.force: trueknob is removed. If a chart upgrade changes an immutable field (StatefulSetvolumeClaimTemplates,serviceName, etc.) the apply now fails instead of silently force-replacing; recreate the object manually withkubectl delete sts <name> --cascade=orphanand let Flux re-reconcile. -
GPU VM operators must move custom host devices before upgrading. With [#2768], when
cozystack.gpu-operatoris enabled the platform takes ownership ofKubeVirt.spec.configuration.permittedHostDevicesand overwrites it on the first reconcile. Move any hand-editedpermittedHostDevices/mediatedDevicesConfigurationentries into the.gpu.permittedHostDevicesvalue before upgrading, and confirm eachresourceNamematches what your nodes advertise. -
MetalLB switches to the FRR-K8s BGP backend; metrics are now HTTPS-only. With [#2699], MetalLB jumps v0.15.2 → v0.16.1 and adopts the upstream-default FRR-K8s backend (the classic FRR mode is deprecated). Metrics endpoints moved from plain HTTP to HTTPS only (kube-rbac-proxy replaced by native TLS + RBAC), so any scrape config pointing at the old HTTP metrics endpoints must be updated. The host-network port denylist is rotated to match the new listener set, including the dedicated
/healthz//readyzprobe port 17472. -
Externally published databases and messaging gain TLS automatically. With [#2681] / [#2684] / [#2685] / [#2686], instances with
external: trueflip to TLS-on after upgrade. Because the trust anchor is a self-signed CA, external clients must retrieve and pin the CA (and PostgreSQL clients usingsslmode=verify-fullbenefit from the new external-hostname SAN). Cluster-internal instances are unaffected.
Platform Components
- Flux: v2.7.3 → v2.8.0 (flux-operator / flux-instance charts v0.33.0 → v0.50.0). helm-controller v1.5 with embedded Helm v4 brings strict Server-Side Apply and kstatus health checking; see Feature Highlights for the upgrade impact. (release notes) (@myasnikovdaniil in [#2602])
- flux-operator gained an optional Flux Status Page Web UI with anonymous or OIDC auth and RBAC-gated actions (suspend/resume, rollout restart, run job, pod delete) — shipped opt-in in the cozystack package (v0.37.0+).
- Security (CVE-2026-23990 / GHSA-4xh5-jcj2-ch8q, v0.40.0): fixed a Web UI impersonation bypass via empty OIDC claims — relevant only if the new Web UI is exposed with OIDC.
ResourceSetInputProvidergained GitLab Environments, Gitea/Forgejo, AWS CodeCommit, and ExternalService provider types;ResourceSetgainedchecksumFrom(rollout restart on external secret/configmap change) andincludeEmptyProviders.-
Breaking: the
--disable-wait-interruptionflag andDISABLE_WAIT_INTERRUPTIONenv var were removed (v0.39.0); flux-operator's CRD migration on Flux minor upgrades was fixed (v0.41.0) and aflux-operator migratecommand added (v0.48.0). -
MetalLB: v0.15.2 → v0.16.1. FRR-K8s is now the default BGP backend (Cozystack vendors the matching
frr-k8ssubchart at v0.0.25); classic FRR mode is deprecated. See Upgrade Notes for the HTTPS-only metrics change. (release notes) (@lexfrei in [#2699]) - New BGP features: per-peer
localASNonBGPPeer, configurable FRR config-reload debounce, and aServiceSelectoron advertisements to target a subset of services. -
v0.15.3 added a
ConfigurationStateCRD to surface configuration errors, NetworkPolicy support in the chart, and fixed CVE-2025-22874 in the images with a hardened pod security context. -
SeaweedFS: 4.05 → 4.31 (chart 4.0.405 → 4.31.0). The bump clears the upstream 4.23 hazard flagged "not safe for erasure coding and multi-disk volume servers" and lands a large batch of S3-API correctness fixes (versioned-object semantics, Hadoop S3A multipart-ETag compatibility, bucket-quota read-only enforcement) plus EC bitrot detection, volume-server write-stall fixes, and new
/healthz//readyzprobes. (release notes) (@lexfrei in [#2834]) -
Follow-up fixes required after the bump (within this release): S3 TLS and the COSI provisioner ServiceAccount were restored (#2916), and the
-lockBucketClass / s3 service name were restored withvolumeSizeLimitMBdropped (#2943). -
etcd-operator: v0.4.3 → v0.4.5. v0.4.4 added an
EtcdBackupStatus.snapshotfield describing the created backup artifact and moved127.0.0.1intoipAddresses; v0.4.5 fixed a broken restore-datadir path (restore was non-functional before this). (release notes) (bumped alongside the etcd backup-strategy controller by @androndo in [#2641]) -
ouroboros: v0.7.2 → v0.8.0. Now logs an explicit reason when its TCP backend readiness check fails — making stuck-proxy situations immediately diagnosable instead of silently
NotReady— and migrates the kubectl sidecar image from Docker Hub tomirror.gcr.ioto avoid anonymous pull rate-limits (backported to v1.4.3 via [#2835]) (@lexfrei in [#2807]). -
seaweedfs-cosi-driver: bumped to v0.3.1 with a stale-socket self-heal — the COSI driver removes any leftover UNIX socket before binding, so the objectstorage provisioner recovers automatically from
CrashLoopBackOffafter a non-graceful exit instead of wedging on "bind: address already in use" (backported to v1.4.3 via [#2827]) (@lexfrei in [#2791]). -
kuberture: new optional system package (v0.1.1). A controller that bridges an external-dns gap (external-dns cannot read EndpointSlices): it watches the
default/kubernetesAPI-server EndpointSlice and emits annotated headless Services that external-dns consumes to publish the Kubernetes API endpoint to DNS. Off by default; enable viabundles.enabledPackagesand declare at least oneconfig.outputsentry. (sources) (@lexfrei in [#2647])
Major Features and Improvements
-
[networking] Gateway API support via Cilium: See Feature Highlights — opt-in
TenantGatewayCRD, platformpublishing.gateway.enabledtoggle, per-tenant opt-in with HTTP-01/DNS-01 cert modes; supersedes [#2213] (@lexfrei in [#2470]). -
[fluxcd] Add flux-shard-operator for tenant helm-controller sharding: See Feature Highlights — spreads tenant HelmReleases across helm-controller shards with
shardCount: auto; retires the hand-rolledflux-tenantsdeployment via migration 44 (@kvaps in [#2821]). -
[flux] Upgrade to Flux v2.8.0: See Feature Highlights and Platform Components — strict SSA + kstatus, chart fixes for foundationdb/kafka/kubevirt-instancetypes/vm-instance/platform, Kubernetes 1.33+ requirement,
upgrade.forceremoved (folds [#2612]) (@myasnikovdaniil in [#2602]). -
[platform] Operator-provided wildcard certificate for platform and tenant ingress: See Feature Highlights —
publishing.certificates.wildcardSecretNameserves a pre-existing wildcard cert on ingress-nginx (--default-ssl-certificate) and Gateway API (existingSecretmode); root tenant only (@lexfrei in [#2819]). -
[platform] Add default backupclass: See Feature Highlights — platform-managed
cozy-defaultBackupClass backed by thecozy-backupssystem bucket,useSystemBucketopt-in with projected shared credentials, default strategies for every backup-capable app (@androndo in [#2716]). -
[platform] Add backup-strategy controller for etcd: See Feature Highlights — cluster-scoped
strategy.backups.cozystack.io EtcdCRD with snapshot BackupJob and in-place RestoreJob; bumps etcd-operator to v0.4.5 (@androndo in [#2641]). -
[backups] Implement Job backup strategy: A generic, application-agnostic
strategy.backups.cozystack.io/Jobstrategy — the operator supplies a Kubernetes Job template that Cozystack renders and runs as a one-shot backup, emitting aBackupartifact on completion; restore re-renders the same template with.Mode == "restore"(cross-namespace restore is not supported) (@lllamnyp in [#1721]). -
[platform] Install velero by default: See Feature Highlights — Velero moves from optional to default so the default
backupstrategy-controllerno longer blocks the platform HelmRelease; opt out viabundles.disabledPackages(@myasnikovdaniil in [#2833]). -
[api] Add Option resource and x-cozystack-options for dynamic form dropdowns: See Feature Highlights — read-only
core.cozystack.io/v1alpha1 Optionresource computed on read,x-cozystack-optionsschema keyword, tenant-scoped read access (@kvaps in [#2778]). -
[api] Expose HelmRelease generation knobs as cozystack-api flags: A follow-up to v1.4.0's [#2509] that brings the same HelmRelease generation knobs to the second HelmRelease-generating path. The
cozystack-apiconvertApplicationToHelmReleasepath previously hardcodedInterval: 5m,Remediation{Retries: -1}, and noStrategy/MaxHistory; it now honours the--helmrelease-interval,--helmrelease-retry-interval,--helmrelease-install-timeout,--helmrelease-upgrade-timeout, and--helmrelease-max-historyflags so the operator-generated and api-generated HelmReleases behave identically (@myasnikovdaniil in [#2571]). -
[platform] Add deletion-protection guardrail via ValidatingAdmissionPolicy: See Feature Highlights —
platform.cozystack.io/no-delete=trueblocks DELETE on critical platform objects in-apiserver; remove the label to delete; requires Kubernetes 1.30+ (@myasnikovdaniil in [#2650]). -
[kafka] Add TLS support via Strimzi listener configuration: See Feature Highlights — TLS on the external listener (9094), Strimzi-managed certs, external listener decoupled from TLS (@Arsolitt in [#2681]).
-
[nats] Add TLS support via cert-manager: See Feature Highlights — self-contained cert-manager chain for client connections and cluster routes (@Arsolitt in [#2684]).
-
[qdrant] Add TLS support via cert-manager: See Feature Highlights — TLS for REST and gRPC endpoints via a single switch (@Arsolitt in [#2685]).
-
[postgres] Add TLS support via CNPG operator-managed certificates: See Feature Highlights — injects the external hostname into the CNPG server certificate SANs so
sslmode=verify-fullworks against the external endpoint (@Arsolitt in [#2686]). -
[kubernetes] Enable GPU passthrough out-of-the-box: See Feature Highlights —
gpu=onkubelet label on GPU node-groups andNVreg_NvLinkDisable=1driver flag fix single-SXM-GPU passthrough (@kvaps in [#2780]). -
[platform] Auto-wire KubeVirt permittedHostDevices and HostDevices feature gate: See Feature Highlights — GPU VMs schedule without manual
kubectl patch; the bundle now ownspermittedHostDevices(see Upgrade Notes) (@lexfrei in [#2768]). -
[gpu-operator] Add container variant for preinstalled host driver: New
containergpu-operator variant for hosts where the NVIDIA driver and container-toolkit are already OS-installed — exposes GPUs to containerized pods via the device plugin only (@lexfrei in [#2766]). -
[rbac] Allow tenants to start/stop/restart their VMs: New RBAC rule grants
updateon thevirtualmachines/start,/stop, and/restartKubeVirt subresources at thecozy:tenant:use:baselevel, so the dashboard's VM power buttons (which previously returned 403 for every tenant role) now work (@kvaps in [#2777]). -
[monitoring] Add tenant overview dashboard: A new "Tenant Overview" Grafana dashboard for platform admins, deployed only to the root/infra Grafana in
cozy-monitoring(never to per-tenant Grafanas, so no cross-tenant data leak). Gives a cross-tenant fleet summary, per-tenant leaderboard, top-N consumers, usage trends, and health signals (@myasnikovdaniil in [#2809]). -
[dashboard] Add cluster-usage RBAC for the new admin page: New
cozystack-dashboard-cluster-usageClusterRole (cluster-wide read on nodes/pods +metrics.k8s.ionodes) bound to thecozystack-cluster-admingroup, backing the new Console → Administration → Cluster Usage page (cluster-wide and per-node utilization, including GPUs). The sidebar entry is fail-closed without the binding (@lexfrei in [#2743]). -
[apps] Mark stateful-app storageClass fields as immutable: 16 stateful apps (clickhouse, foundationdb, harbor, http-cache, kafka, kubernetes, mariadb, mongodb, nats, openbao, opensearch, postgres, qdrant, rabbitmq, redis, vm-disk) declare
storageClassimmutable via anx-kubernetes-validationsrule in their chart schema and the dashboard renders the field read-only on edit forms, because changing storageClass never migrates data (PVCs pinstorageClassNameat creation). Enforcement is UI-only in this release — the aggregated apiserver does not yet evaluate the CEL rule onUpdate, so a directkubectl patchis still accepted; apiserver-level enforcement is tracked in [#2657].kubernetes.nodeGroups[].storageClassis intentionally excluded (@lexfrei in [#2639]). -
[seaweedfs] Bump SeaweedFS to 4.31: See Platform Components — chart 4.0.405 → 4.31.0, clears the 4.23 EC hazard (@lexfrei in [#2834]).
-
[metallb] Bump to v0.16.1 and rotate host-network port denylist: See Platform Components and Upgrade Notes — FRR-K8s default backend, HTTPS-only metrics, rebuilt controller/speaker images, rotated port denylist (@lexfrei in [#2699]).
-
[ouroboros] Bump to v0.8.0: See Platform Components (@lexfrei in [#2807], backported to v1.4.3).
-
[platform] Add kuberture as optional system package: See Platform Components — publishes the Kubernetes API endpoint to DNS via external-dns (@lexfrei in [#2647]).
Bug Fixes
-
[api] Publish open spec as x-kubernetes-preserve-unknown-fields, not additionalProperties:true: Fixes a cluster-wide kube-controller-manager CrashLoopBackOff (nil-pointer panic) that stalled reconciliation and timed out installs/upgrades.
cozystack-apipreviously published the free-form.specofapps.cozystack.ioresources asadditionalProperties: true, whose nil inner schema crashed the VAP type-checker run by KCM. The fix publishesx-kubernetes-preserve-unknown-fields: trueinstead and adds a recursive sanitizer that rewrites any booleanadditionalPropertiesanywhere — including in untrustedApplicationDefinition.openAPISchemainput — closing the whole crash class (@myasnikovdaniil in [#2867]). -
[prometheus-operator-crds] Ship full upstream CRD bundle: The package previously shipped only the four service-discovery CRDs VictoriaMetrics needs. This adds the six previously-stripped CRDs (Alertmanager, AlertmanagerConfig, Prometheus, PrometheusAgent, ScrapeConfig, ThanosRuler), so third-party apps in tenant clusters that ship their own prometheus-operator (e.g. kube-prometheus-stack) can create those CRs, or set
crds.enabled: falseand consume the platform-managed CRDs (which Flux previously kept reverting) (@myasnikovdaniil in [#2660]). -
[info] Use root-host for Keycloak OIDC issuer URL in tenant kubeconfig: The dashboard-issued kubeconfig for non-root tenants built
--oidc-issuer-urlfrom the tenant subdomain, but Keycloak's ingress and TLS cert live only at the root host, sokubectl oidc-loginfailed TLS verification and the kubeconfig was unusable. The issuer now always uses the root host (https://keycloak.<root-domain>/realms/cozy), so non-root tenants can authenticate with the downloaded kubeconfig (@myasnikovdaniil in [#2704]). -
[kubernetes] Add config_path patch for containerd 2.x: Per-registry mirror/credential config (
/etc/containerd/certs.d) did not take effect on containerd 2.x tenant nodes because the CRI plugin config section was renamed and the old single sed was a no-op. The fix runs version-tolerant seds and loosens quote matching (also fixing Ubuntu 24.04, which emits single-quoted section headers), soconfig_pathregistry config works on both containerd 1.x and 2.x without manual patching (@elaugaste in [#2723]). -
[csi] Detach orphan hot-plug volumes when VMI outlives its VM: When a VMI outlives its owning VM, hot-plug volumes were left attached, blocking the volume from being re-attached elsewhere; the CSI wrapper now detaches the orphaned hot-plug volumes so the PVC can be reused (@kvaps in [#2866]).
-
[csi] Route RWX Block volumes to upstream hotplug detach: KubeVirt live-migration disks (RWX Block PVCs) were incorrectly matched by the NFS-cleanup branch in
ControllerUnpublishVolumeand never detached, so a later attach to a different VM was rejected by linstor-csi's anti-split-brain check. A newisNFSVolumepredicate requires bothReadWriteManyandVolumeMode=Filesystem, accurately matching only NFS-backed PVCs, and the same predicate fixes in-VM disk expansion being skipped for RWX Block volumes (backported to v1.4.2 via [#2749]) (@myasnikovdaniil in [#2658]). -
[csi] Verify VMI Ready after kubevirt-csi Publish to surface stuck-PVC failures: Upstream
ControllerPublishVolumehas a fast path that reports success as soon as the volume entry appears inVM.spec.template.spec.volumes, even if the backing PVC is stuckClaimPendingand the hotplug never completed — surfacing later as a confusing kubeletcouldn't find device by serial id. The wrapper now re-readsVMI.Status.VolumeStatusand returnscodes.Unavailablewith the upstream reason if the volume is notVolumeReady, keeping external-attacher retrying and surfacing the real provisioning failure at the CSI layer (backported to v1.4.2 via [#2748]) (@myasnikovdaniil in [#2659]). -
[capi] Add startupProbe to capi-controller-manager to survive cert provisioning delay: The CAPI controller-manager could CrashLoop during initial certificate provisioning because the readiness probe failed while the controller was still booting; a startup probe now gives it room to come up (backported to v1.4.x stabilization) (@myasnikovdaniil in [#2946]).
-
[cluster-api] Fix kamaji OOM and set limits on unset providers: The Kamaji control-plane-provider resource override targeted a container named
manager, but the upstream image names itcontroller, so the intended limits were dropped and the pod OOMKilled (exit 137) on the upstream 128 Mi default. The container name is corrected and modest requests/limits are set for the core, kubeadm-bootstrap, and kubevirt-infrastructure providers that previously ran as BestEffort (backported to v1.4.1 via [#2709]) (@myasnikovdaniil in [#2708]). -
[platform] Migrate ephemeralStorage to diskSize via pre-upgrade hook: The [#2454] rename of
nodeGroups[*].ephemeralStoragetodiskSizeadded a hard{{ fail }}guard that blocked reconciliation of any HelmRelease still carrying the legacy field. A new platform pre-upgrade migration (migration 41) walks allkuberneteses.apps.cozystack.ioApplication CRs cluster-wide and renames the field automatically before chart resources are applied; the migration is idempotent and best-effort (backported to v1.4.1 via [#2712]) (@IvanHunters in [#2688]). -
[postgres] Accept integer values for postgresql.parameters in schema: PostgreSQL parameters such as
max_connectionsare natural integers, but the chart schema declared{type: string}only, so bare integers were rejected at schema-validation time. AnintOrStringalias in cozyvalues-gen now emitsanyOf: [integer, string]plusx-kubernetes-int-or-string: true, making both forms valid; the$dangerousParamsblocklist is also extended witharchive_cleanup_commandandrecovery_end_command(backported to v1.4.1 via [#2715]) (@IvanHunters in [#2687]). -
[kafka] Remove ZooKeeper PVCs on uninstall: The Strimzi
KafkaCR setdeleteClaim: trueon broker JBOD volumes but left ZooKeeper persistent-claim storage atdeleteClaim: false, orphaning the ZooKeeper PVCs on uninstall and requiring manual cleanup before the release name could be reused.deleteClaim: trueis now set on the ZooKeeper storage as well (backported to v1.4.1 via [#2705]) (@Arsolitt in [#2679]). -
[opensearch-operator] Replace deprecated kube-rbac-proxy image: The
gcr.io/kubebuilder/kube-rbac-proxyimage is no longer available since the kubebuilder GCR registry was sunset. It is replaced withquay.io/brancz/kube-rbac-proxy(the source already used by other Cozystack components), applied via avalues.yamlentry instead of a vendored-chart patch (backported to v1.4.1 via [#2695]) (@myasnikovdaniil in [#2689]). -
[platform] Add OpenSearch to PaaS bundle: The OpenSearch packages existed in the repo for several releases but the PaaS bundle template never referenced the two
cozystack.opensearch-*PackageSources, so the operator was never deployed and the dashboard catalog showed no OpenSearch entry. The two missing includes are now added (backported to v1.4.2 via [#2757]) (@myasnikovdaniil in [#2648]). -
[dashboard] Grant tenant dashboard read on cozy-public PVCs: The VM disk source-image dropdown returned 403 and stayed empty even when golden images existed, because the
cozy:tenant:dashboardRole only granted read on Flux HelmRepositories and HelmCharts.get/list/watchon PersistentVolumeClaims is added so tenant identities can list thevm-default-images-*PVCs (backported to v1.4.3 via [#2858]) (@myasnikovdaniil in [#2843]). -
[api] Emit initial-events-end bookmark for core.cozystack.io watches: The
TenantSecret,TenantModule, andTenantNamespaceaggregated API resources never sent thek8s.io/initial-events-endbookmark required by the WatchList protocol, so client-go informers usingWatchListClient(on by default since v1.35) never reachedHasSynced. The bookmark is now emitted after initialADDEDevents (backported to v1.4.3 via [#2844]) (@sunib in [#2786]). -
[networking] Point host ouroboros proxy at the root-tenant ingress: When
publishing.proxyProtocolwas enabled, the host-level ouroboros proxy inherited a default backend FQDN that describes a managed tenant cluster and never resolved on the host. The host ouroborosPackageis now emitted with aproxy.targetoverride derived frompublishing.ingressName(backported to v1.4.3 via [#2846]) (@lexfrei in [#2800]). -
[ingress,platform] Deliver publishing.proxyProtocol to host ingress-nginx: Threads the
publishing.proxyProtocolsetting through to the host ingress-nginx controller so PROXY-protocol mode is actually applied on the host path (@lexfrei in [#2799]). -
[objectstorage-controller] Propagate Bucket readiness to BucketClaim: The vendored COSI controller hardcoded
bucketReady=falseafter dynamic provisioning and never re-read theBucket, soBucketAccesswas never granted and provisioned buckets ended up without credentials. The controller now re-reads the liveBucketand propagates its readiness (backported to v1.4.3 via [#2828]) (@lexfrei in [#2792]). -
[kubernetes] Stamp application lineage labels on worker node VMs: Worker-node VMs created by Cluster API and the KubeVirt provider were never stamped with
apps.cozystack.io/application.{group,kind,name}lineage labels, so the dashboard could not attribute those pods to their owning Kubernetes application. The labels are now applied to theKubevirtMachineTemplate, andapplication.nameis quoted so a purely-numeric cluster name renders as a YAML string (backported to v1.4.3 via [#2790]) (@kvaps in [#2779]). -
[kubernetes] Add spec.timeout to tenant CSI HelmRelease: Adds an explicit
spec.timeoutto the tenant CSI HelmRelease so slow first installs are not classified as failures under the new Flux kstatus waits (@myasnikovdaniil in [#2727]). -
[platform] Add cert-manager dependency to webhook-cert consumers: Adds an explicit
dependsOncert-manager to the HelmReleases that consume webhook certificates, so they no longer race cert-manager during cold install (@myasnikovdaniil in [#2726]). -
[platform] Order cozystack-basics after the APIs its admission policies type-check: Reorders
cozystack-basicsso it installs after the APIs its ValidatingAdmissionPolicies reference, avoiding type-check failures when the referenced APIs are not yet registered (@myasnikovdaniil in [#2842]). -
[dashboard] Unblock token-proxy startup when JWKS is briefly unreachable: The dashboard token-proxy refused to start if the JWKS endpoint was momentarily unreachable; startup is now resilient to a brief JWKS outage so the dashboard comes up and recovers once JWKS is reachable (@lexfrei in [#2745]).
-
[kubevirt-cdi-operator,grafana-operator] Add startupProbes: Adds startup probes to the kubevirt-cdi-operator and grafana-operator so slow boots are not killed by the readiness probe before initialization finishes (@myasnikovdaniil in [#2725]).
-
[seaweedfs] Restore S3 TLS and COSI provisioner SA after 4.31 bump: Restores the S3 TLS configuration and the COSI provisioner ServiceAccount that regressed during the SeaweedFS 4.31 bump (@kvaps in [#2916]).
-
[seaweedfs] Restore -lock BucketClass, s3 service name, and drop volumeSizeLimitMB: Restores the
-lockBucketClass and the s3 service name and drops the now-invalidvolumeSizeLimitMBfield after the 4.31 bump (@myasnikovdaniil in [#2943]). -
[seaweedfs] Bump seaweedfs-cosi-driver to v0.3.1: See Platform Components — stale-socket self-heal (backported to v1.4.3 via [#2827]) (@lexfrei in [#2791]).
-
[backups] Carry dropdown option sources in CRD annotations, not schema: Moves the backup dropdown option sources from the chart schema into CRD annotations so they are consumed by the new
x-cozystack-optionsmechanism without polluting the schema (@lexfrei in [#2823]). -
[backups] Fix CI broken after merge: Repairs the backups test suite that broke after a merge conflict between concurrent backup-strategy PRs (@androndo in [#2762]).
Security
-
[deps] Bump Go to 1.26.4 and x/net to v0.55.0 to close OSV advisories: Bumps the Go toolchain to 1.26.4 and
golang.org/x/netto v0.55.0 to clear reported OSV/Dependabot advisories across the first-party modules (@myasnikovdaniil in [#2852]). -
[ci] Add CodeQL workflow for Go (SAST): Adds a CodeQL static-analysis workflow for the Go codebase so security issues are flagged on PRs (@myasnikovdaniil in [#2851]).
-
[ci] Add OpenSSF Scorecard workflow: Adds the OpenSSF Scorecard workflow to track and publish the project's supply-chain security posture; a follow-up pins the Scorecard workflow actions by SHA (@tym83 in [#2720], [#2721]).
-
[platform] Deletion-protection guardrail: See Feature Highlights — blocks accidental DELETE of critical platform objects in-apiserver (@myasnikovdaniil in [#2650]).
System Configuration
-
[platform] Velero installed by default: See Feature Highlights — Velero moves to a default system package; opt out via
bundles.disabledPackages(@myasnikovdaniil in [#2833]). -
[platform] Register kuberture as optional system package: See Platform Components — off by default, enabled via
bundles.enabledPackageswith a requiredconfig.outputsentry (@lexfrei in [#2647]). -
[seaweedfs] Split seaweedfs-system into seaweedfs-db + seaweedfs-system: Extracts the SeaweedFS CNPG postgres Cluster into its own
seaweedfs-dbHelmRelease that reports Ready only when postgres actually serves connections, fixing a fresh-install race where the filer CrashLooped against an endpoint-less ClusterIP under Cilium. An automatic, data-safe migration adopts the existing postgres cluster in place (re-annotates Helm ownership and stampshelm.sh/resource-policy: keep); no data is moved and no PV/PVC is re-provisioned (@myasnikovdaniil in [#2601]).
Dependencies & Version Updates
See the Platform Components section near the top of this changelog for the full list of upstream bumps with user-facing impact summaries (Flux v2.8.0, MetalLB v0.16.1, SeaweedFS 4.31, etcd-operator v0.4.5, ouroboros v0.8.0, seaweedfs-cosi-driver v0.3.1, kuberture v0.1.1).
Additional dependency-related changes:
- [deps] Bump Go to 1.26.4 and x/net to v0.55.0 — see Security (@myasnikovdaniil in [#2852]).
- [ci] Bump cozyvalues-gen pin to v1.5.0, then v1.6.0 — schema-generation tooling refresh (@lexfrei in [#2730], [#2784]).
Development, Testing, and CI/CD
-
[ci/build] Isolate each PR build on its own ephemeral runner VM: Moves PR builds onto per-job ephemeral runner VMs to fix the cross-job buildkit single-writer-lock contention that caused intermittent build hangs on the shared runner host (@myasnikovdaniil in [#2939]).
-
[refactor/build] mode=max registry cache with a main-only warmer: Switches the build cache to
mode=maxwith a main-branch-only cache warmer so PR builds warm-start without each PR re-pushing cache layers (@myasnikovdaniil in [#2938]). -
[build] Read --cache-from from ghcr :latest so PR builds warm-start: Points
--cache-fromat the ghcr:latesttag so PR builds reuse the last published cache (@myasnikovdaniil in [#2855]). -
[refactor/build] Standardize image tagging to fix concurrent PR push conflicts: Standardizes the build image-tagging scheme so concurrent PR builds no longer collide when pushing to the registry (@myasnikovdaniil in [#2711]).
-
[ci] Create buildx builder in the build step's DOCKER_CONFIG: Fixes buildx builder creation by scoping it to the build step's
DOCKER_CONFIG(@myasnikovdaniil in [#2962]). -
[feat/ci] Test-impact analysis E2E (default-on) + release E2E workflow: Adds test-impact analysis that selects which E2E suites to run based on the PR diff (default-on), plus a dedicated release E2E workflow (@myasnikovdaniil in [#2559]).
-
[ci/tests] Fix OCIR registry login in Release E2E workflow: Corrects the OCIR registry login step in the Release E2E workflow so the release E2E run authenticates correctly (@myasnikovdaniil in [#2973]).
-
[ci/release] Auto-patch-release only the 2 newest release lines: The automated patch-release cron now targets only the two newest release lines, matching the supported-version window, and documents the support window (@myasnikovdaniil in [#2856]).
-
[ci/release] Repair orphaned draft tag_name on retag: When a tag was deleted and re-created between draft creation and merge, GitHub orphaned the draft release by setting
tag_nametountagged-<hash>. The finalize step now detects the orphaned form, matches byname, repairstag_name, and publishes (backported to v1.4.3 via [#2829]) (@myasnikovdaniil in [#2761]). -
[ci] Add Go-scoped Renovate configuration: Adds a Renovate configuration scoped to the Go modules so Go dependency updates are managed automatically (@myasnikovdaniil in [#2850]).
-
[ci/tags] Include data/versions in website docs commit: The tags workflow now includes
data/versionsin the website docs commit so version metadata stays in sync (@myasnikovdaniil in [#2707]). -
[ci] Consolidated platform & e2e stabilization batch: A consolidated batch of platform and E2E stabilization changes folded into a single PR (@myasnikovdaniil in [#2948]).
-
[ci/e2e] Drop 3x retry on Run E2E + Install Cozystack, wait out gateway.bats tenant teardown: Removes the blanket 3x retry on deterministic E2E steps and instead waits out the gateway.bats tenant teardown explicitly (@myasnikovdaniil in [#2558]).
-
[ci/workflows] Add SSH breakpoint on E2E failure for debug PRs: Adds an opt-in SSH breakpoint on E2E failure for debug PRs so failures can be inspected live (@kvaps in [#2535]).
-
[test/e2e] Self-heal Cilium orphaned-endpoint leak across install and apps: Adds an in-cluster self-heal Job that recovers from the Cilium agent's orphaned-endpoint leak (the "IP already in use" flake) during install and app churn (@myasnikovdaniil in [#2874]).
-
[test/e2e] Pin Kubernetes to v1.33.12 to avoid KCM VAP type-checker panic: Pins the E2E Kubernetes version to v1.33.12 to avoid the kube-controller-manager VAP type-checker panic on affected Kubernetes builds (the durable apiserver-side fix ships in [#2867]) (@myasnikovdaniil in [#2868]).
-
[test/e2e] Drive LINSTOR post-install waits off a single 15m deadline: Replaces per-step LINSTOR waits with a single 15-minute deadline so the slowest path determines runtime (@myasnikovdaniil in [#2928]).
-
[test/e2e] Pre-pull platform images via staged-busybox DaemonSet: Pre-pulls timing-sensitive platform images via a staged-busybox DaemonSet before install so first-install reconciliation does not race image pulls (@myasnikovdaniil in [#2724]).
-
[test/e2e] Fix bucket.bats port-forward and S3 client reliability: Hardens the bucket.bats test's port-forward and S3 client interaction for reliability (@myasnikovdaniil in [#2944]).
-
[test/e2e] ouroboros fold + CSI/NFS ordering + OIDC keycloakInternalUrl: Folds the ouroboros E2E case, fixes CSI/NFS ordering, and corrects the OIDC
keycloakInternalUrlin the suite (@myasnikovdaniil in [#2728]). -
[test/e2e] Silence helm-template render in install-cozystack trace: Silences the noisy helm-template render output in the install trace so failures are easier to read (@myasnikovdaniil in [#2615]).
-
[tests] Exclude loop devices from host LVM scanning: Excludes loop devices from host LVM scanning in the test harness so loop-mounted images do not get their volume groups activated (@kvaps in [#2798]).
-
[e2e-sandbox] Use curl -fsSL when downloading mc: The MinIO client was downloaded without
-L, so a 302 redirect fromdl.min.iowrote the HTML redirect body to/usr/local/bin/mcand the bucket E2E test then failed trying to execute it. Adding-fsSLfollows the redirect and fails fast on HTTP errors (shipped in v1.4.1) (@myasnikovdaniil in [#2690]). -
[test/metallb] Assert digest-pinned image form, not exact version literal: Updates the metallb test to assert the digest-pinned image form rather than an exact version literal, so the test survives version bumps (@myasnikovdaniil in [#2873]).
-
[test/api] Add read-path authorization tests for TenantNamespace registry: Adds read-path authorization tests for the TenantNamespace registry to lock down the IDOR fixes (@lexfrei in [#2864]).
-
[feat/hack] Rewrite check-readiness as a Go command with test suite: Rewrites the
check-readinesshelper as a Go command with a test suite, replacing the previous shell implementation (@myasnikovdaniil in [#2755]). -
[chore/controller] Remove dead dashboard controller: Removes the now-dead dashboard controller code left behind after the schema-driven UI rewrite (@kvaps in [#2694]).
-
[chore/img] Refresh Cozystack logo and add icon/stacked variants: Refreshes the Cozystack logo and adds icon and stacked logo variants (@kvapsova in [#2746]).
-
[chore/maintainers] Update roster, add Emeritus section, mark @lllamnyp as Core Maintainer: Updates the maintainer roster, adds an Emeritus section, documents Emeritus technical offboarding and reactivation, and marks @lllamnyp as a Core Maintainer (@tym83 in [#2717], [#2718], [#2719]).
-
[docs/agents] Add E2E/CI testing conventions and consolidate build/test/verify guidance: Adds the E2E and CI testing conventions doc and consolidates the build, test, and verification guidance for agents and contributors (@myasnikovdaniil in [#2932], [#2933]).
-
[docs/release] Expand release.md into a release-engineer playbook: Expands
release.mdinto a full release-engineer playbook covering the release process end to end (@myasnikovdaniil in [#2732]).
Documentation
-
[harbor] Document S3 object-storage (SeaweedFS) prerequisite: Documents that Harbor requires an S3 object-storage backend (SeaweedFS) and how to satisfy the prerequisite (@lexfrei in [#2818]).
-
[gpu-operator] Document passthrough variant host-driver prerequisite: Documents the host-driver prerequisite for the gpu-operator passthrough variant (@lexfrei in [#2767]).
-
[website] KubeVirt VM Disk and VM Instance how-to: New how-to explaining the VMDisk and VMInstance primitives — independent disk/compute lifecycles, golden images, cloning, fast provisioning, with Dashboard and kubectl examples and VM access methods (serial console, SSH, VNC) (@tym83 in cozystack/website#586).
-
[website] etcd-operator v1alpha2 announcement and migration guide: Announces the donation of etcd-operator to Cozystack and the new
etcd-operator.cozystack.io/v1alpha2API — a Membership-API lifecycle replacing the StatefulSet model — with the in-place v1alpha1 → v1alpha2 migration path (@kvaps in cozystack/website#573).
The following documentation shipped in the v1.4.x patch releases and is included for completeness:
- [website] Add backup and recovery guides for managed applications: Operator and tenant guides for managed-application backups covering PostgreSQL, MariaDB, ClickHouse, and FoundationDB (shipped in v1.4.1) (@androndo in cozystack/website#536).
- [website] Cilium Gateway API — architecture, security, and migration guide: Comprehensive
networking/gateway-api.mdpage for the Cilium-backed Gateway API feature (shipped in v1.4.2) (@lexfrei in cozystack/website#509). - [website] Publish Kubernetes API endpoint via external-dns with kuberture: Documents exposing the managed Kubernetes API endpoint through external-dns using the kuberture system package (shipped in v1.4.3) (@lexfrei in cozystack/website#539).
- [ingress] Explain how ingress works in the platform: Adds a "How ingress works" overview to the ingress package README (shipped in v1.4.3) (@myasnikovdaniil in [#2770]).
- [website] Managed Kubernetes how-to: Practical guide for deploying and using managed Kubernetes clusters within Cozystack (shipped in v1.4.3) (@tym83 in cozystack/website#565).
- [website] Platform-managed backups introduction: Introduces Cozystack's platform-managed backup capabilities for stateful workloads (shipped in v1.4.3) (@tym83 in cozystack/website#566).
- [website] talm: document DRBD sysctl tuning, keepalive toggle, and etcd quota: Documents the talm DRBD sysctl performance tuning, the DRBD keepalive toggle, and the etcd backend quota configuration that ship in talm v0.31.0 (shipped in v1.4.3) (@lexfrei in cozystack/website#567).
- [website] Cozystack vs OpenStack comparison: Vendor-neutral comparison post covering seven dimensions — architecture, compute, networking, storage, managed services, operations, and multi-tenancy — for teams evaluating private cloud options (shipped in v1.4.4) (@tym83 in cozystack/website#580).
Other Repositories
talm v0.31.0 (shipped in v1.4.4)
- [talm] Add DRBD-oriented sysctl and etcd backend defaults: Adds production-tested TCP sysctls to the
cozystackpreset that prevent TCP port exhaustion during DRBD reconnect storms, an opt-intcpKeepaliveTuninggroup, and a configurableetcd.quotaBackendBytes(default 8 GiB) (@IvanHunters in cozystack/talm#131). - [talm] Emit progress on stderr, enrich lookup error chain, retry transient failures: Fixes
talm template -f X > Yemitting a stray progress line on stdout, enriches lookup-failure errors with a six-class hint taxonomy, and retries transient connectivity failures with exponential backoff (@lexfrei in cozystack/talm#212). - [talm] Require a template before rendering the chart: Running
talm templatewithout--file/--templatenow fails fast withtemplates are not setinstead of triggering live node discovery and a misleadingconnection refused(@lexfrei in cozystack/talm#217). - [talm] Exclude loop devices from LVM global_filter: Adds
/dev/loop.*to the LVMglobal_filterin the generated Talos machine config to prevent unexpected LVM activation inside loop-mounted images (@kvaps in cozystack/talm#215).
ansible-cozystack (shipped in v1.4.x)
- [ansible-cozystack] Exclude loop and virtual devices from host LVM scanning: Sets an LVM
global_filteron all prepare playbooks (Ubuntu, RHEL, SUSE) so the host does not scan or activate DRBD, device-mapper, zd, or loop-backed volume groups; exposed ascozystack_lvm_global_filter(@kvaps in cozystack/ansible-cozystack#49). - [ansible-cozystack] Enable containerd device_ownership_from_security_context for CDI block imports: Adds a k3s containerd drop-in enabling
device_ownership_from_security_contextso the KubeVirt CDI importer can write VM disk images into raw block volumes instead of failing with "Permission denied" (@lexfrei in cozystack/ansible-cozystack#48).
Contributors
We'd like to thank all contributors who made this release possible:
- @androndo
- @Arsolitt
- @elaugaste
- @IvanHunters
- @kvaps
- @kvapsova
- @lexfrei
- @lllamnyp
- @myasnikovdaniil
- @sunib
- @tym83
New Contributors
We're excited to welcome our first-time contributor:
- @elaugaste - First contribution!
Full Changelog: https://github.com/cozystack/cozystack/compare/v1.4.0...v1.5.0