|
| 1 | +--- |
| 2 | +title: "Cozystack 1.3: Storage-Aware Scheduling, LINSTOR GUI, and VM Default Images" |
| 3 | +slug: cozystack-1-3-storage-aware-scheduling-linstor-gui-and-vm-default-images |
| 4 | +date: 2026-04-23 |
| 5 | +author: "Timur Tukaev" |
| 6 | +description: "Cozystack 1.3 brings storage-aware pod scheduling, a managed LINSTOR GUI, a curated VM image catalog, application-level observability, and cross-namespace VM backup restore." |
| 7 | +article_types: |
| 8 | + - release |
| 9 | +topics: |
| 10 | + - platform |
| 11 | + - storage |
| 12 | + - virtualization |
| 13 | + - observability |
| 14 | +images: |
| 15 | + - "cozystack-v1.3.0.png" |
| 16 | +--- |
| 17 | + |
| 18 | +{{< figure src="cozystack-v1.3.0.png" alt="Cozystack v1.3.0" width="720" >}} |
| 19 | + |
| 20 | +### Cozystack 1.3: Storage-Aware Scheduling, LINSTOR GUI, and VM Default Images |
| 21 | + |
| 22 | +[Cozystack v1.3.0](https://github.com/cozystack/cozystack/releases/tag/v1.3.0) is now available. The release also rolls up every fix shipped in the v1.2.1 → v1.2.4 patch line. |
| 23 | + |
| 24 | +This cycle pushes the platform forward in five clear directions: smarter storage placement, a managed UI for LINSTOR, a built-in catalog of VM base images, deeper application-level observability, and a complete cross-namespace VM backup-restore experience. |
| 25 | + |
| 26 | +### Main highlights |
| 27 | + |
| 28 | +#### Storage-aware scheduling via the LINSTOR extender |
| 29 | + |
| 30 | +The `cozystack-scheduler` now consults a **LINSTOR scheduler extender** when placing pods that declare both a `SchedulingClass` and LINSTOR-backed PVCs. Pods are preferentially scheduled to nodes where their volume replicas already live, cutting cross-node replication traffic and lowering I/O latency for storage-heavy workloads — databases, object stores, VMs. |
| 31 | + |
| 32 | +It builds on the SchedulingClass system introduced in v1.2 and requires no tenant-side configuration. Operators can continue to mix storage locality with the existing data-center / hardware-generation constraints on SchedulingClass. |
| 33 | + |
| 34 | +#### LINSTOR GUI: managed web console for storage administration |
| 35 | + |
| 36 | +A new opt-in `linstor-gui` package deploys **LINBIT's linstor-gui** alongside the LINSTOR controller with mTLS client authentication and a non-root security context. When OIDC is configured, an optional Keycloak-protected ingress (via oauth2-proxy) exposes the UI; access is restricted to members of the `cozystack-cluster-admin` group, consistent with host-cluster admin RBAC. The CLI workflow is unchanged — the GUI is strictly additive. |
| 37 | + |
| 38 | +#### VM Default Images: out-of-the-box VM provisioning |
| 39 | + |
| 40 | +The new `vm-default-images` package ships a curated set of **cluster-wide VM images** (Ubuntu, Debian, CentOS Stream, and others) as pre-populated DataVolumes. Tenants can provision VMs against well-known base images without having to upload them first. The package is opt-in via the `iaas` bundle and defaults to replicated storage. The `vm-disk` chart also gains a new "disk" source type for cloning from existing vm-disks in the same namespace. |
| 41 | + |
| 42 | +#### Application-level observability: WorkloadsReady, Events, and S3 metering |
| 43 | + |
| 44 | +Applications now expose a **WorkloadsReady** condition on their status by aggregating their underlying WorkloadMonitor resources, giving operators a single readiness signal for Deployments, StatefulSets, DaemonSets, and PVCs. The dashboard gains a new **Events tab** showing namespace-scoped Kubernetes events per application. |
| 45 | + |
| 46 | +The WorkloadMonitor reconciler is extended to track **COSI BucketClaim** objects as first-class Workloads, and the bucket controller queries SeaweedFS bucket-size metrics from VictoriaMetrics — enabling S3 billing pipelines on par with Pods and PVCs. |
| 47 | + |
| 48 | +#### Cross-namespace VM backup restore and RestoreJob dashboard |
| 49 | + |
| 50 | +The backup system now supports **restoring VMInstance backups into a different namespace**, with IP/MAC preservation and safe rename semantics. In-place backup and restore flows for VMDisk and VMInstance are improved across the board, and Velero failure messages now propagate to the Application status. The dashboard ships a complete **RestoreJob experience**: list view, details page, create form, and sidebar entry. |
| 51 | + |
| 52 | +### Also in v1.3.0 |
| 53 | + |
| 54 | +- **Stricter tenant-name validation** — alphanumeric-only at the API level, plus a check that the computed ancestor-chain namespace fits the 63-character Kubernetes limit. |
| 55 | +- **VMInstance `subnets` renamed to `networks`** with a dashboard dropdown selector; the old field stays supported via migration 36. |
| 56 | +- **Custom Keycloak themes can be injected** via `initContainers`; Keycloak-Configure adds email verification and SMTP settings for self-registration flows. |
| 57 | +- **Host runtime preflight check** (`make preflight`) warns when a standalone containerd or docker is running alongside the embedded k3s runtime. |
| 58 | +- **System PostgreSQL pinned to 17.7-standard-trixie** for Grafana, Alerta, Harbor, Keycloak, and SeaweedFS — preventing drift to PostgreSQL 18. |
| 59 | +- **kube-ovn upgraded to v1.15.10** with a port-group regression fix that preserves VM LSP membership across live migration. |
| 60 | +- **All bug fixes from v1.2.1 → v1.2.4** are rolled into v1.3.0. |
| 61 | + |
| 62 | +### Documentation worth knowing about |
| 63 | + |
| 64 | +This release ships with a substantial documentation update. New and rewritten guides that pair directly with the v1.3 features: |
| 65 | + |
| 66 | +- [Custom Keycloak themes / white-labeling](https://cozystack.io/docs/v1.3/operations/configuration/white-labeling/) — image contract, configuration, `imagePullSecrets`, and theme activation. |
| 67 | +- [Network bonding (LACP) configuration](https://cozystack.io/docs/v1.3/install/how-to/bonding/) — setting up LACP for Cozystack installations. |
| 68 | +- [Backup and restore for VMInstance and VMDisk](https://cozystack.io/docs/v1.3/virtualization/backup-and-recovery/) — updated for the v1.3 cross-namespace restore flows. |
| 69 | +- [External applications via the ApplicationDefinition API](https://cozystack.io/docs/v1.3/applications/external/) — fully rewritten guide using Minecraft server examples. |
| 70 | +- [Go types for Cozystack managed applications](https://cozystack.io/docs/v1.3/cozystack-api/go-types/) — using the generated Go module from your own controllers. |
| 71 | +- [ApplicationDefinition naming convention](https://cozystack.io/docs/v1.3/cozystack-api/application-definitions/) — how `cozystack-api` resolves kinds to their backing definitions. |
| 72 | +- [Tenant namespace layout and parent / child derivation](https://cozystack.io/docs/v1.3/guides/tenants/) — how nested-tenant namespaces are computed. |
| 73 | +- [Talos / talosctl / Cozystack version pairing matrix](https://cozystack.io/docs/v1.3/install/kubernetes/talm/) — definitive compatibility reference. |
| 74 | +- [Air-gapped tenant Kubernetes registry mirrors](https://cozystack.io/docs/v1.3/install/kubernetes/air-gapped/) — improved guidance for offline installations. |
| 75 | + |
| 76 | +### Governance |
| 77 | + |
| 78 | +We also welcomed two new maintainers in this cycle: **Mattia Eleuteri** ([@mattia-eleuteri](https://github.com/mattia-eleuteri)) — CSI, storage, networking and security — and **Matthieu Robin** ([@matthieu-robin](https://github.com/matthieu-robin)) — managed applications, platform quality, and benchmarking. |
| 79 | + |
| 80 | +### Thank you to all contributors |
| 81 | + |
| 82 | +This release was shaped by the work of [@androndo](https://github.com/androndo), [@Arsolitt](https://github.com/Arsolitt), [@BROngineer](https://github.com/BROngineer), [@IvanHunters](https://github.com/IvanHunters), [@kitsunoff](https://github.com/kitsunoff), [@kvaps](https://github.com/kvaps), [@lexfrei](https://github.com/lexfrei), [@lllamnyp](https://github.com/lllamnyp), [@mattia-eleuteri](https://github.com/mattia-eleuteri), [@myasnikovdaniil](https://github.com/myasnikovdaniil), [@sircthulhu](https://github.com/sircthulhu), and [@tym83](https://github.com/tym83). |
| 83 | + |
| 84 | +A special welcome to our first-time contributor [@Arsolitt](https://github.com/Arsolitt). Thank you all. |
| 85 | + |
| 86 | +### Release links |
| 87 | + |
| 88 | +- [Cozystack v1.3.0 on GitHub](https://github.com/cozystack/cozystack/releases/tag/v1.3.0) |
| 89 | +- [Full changelog v1.2.0 → v1.3.0](https://github.com/cozystack/cozystack/compare/v1.2.0...v1.3.0) |
| 90 | + |
| 91 | +### Join the community |
| 92 | + |
| 93 | +- Telegram [group](https://t.me/cozystack) |
| 94 | +- Slack [group](https://kubernetes.slack.com/archives/C06L3CPRVN1) (Get invite at [https://slack.kubernetes.io](https://slack.kubernetes.io)) |
| 95 | +- [Community Meeting Calendar](https://calendar.google.com/calendar?cid=ZTQzZDIxZTVjOWI0NWE5NWYyOGM1ZDY0OWMyY2IxZTFmNDMzZTJlNjUzYjU2ZGJiZGE3NGNhMzA2ZjBkMGY2OEBncm91cC5jYWxlbmRhci5nb29nbGUuY29t) |
| 96 | +- [Cozysummit Virtual 2026](https://community.cncf.io/events/details/cncf-virtual-project-events-hosted-by-cncf-presents-cozysummit-virtual-2026/) |
0 commit comments