Release Notes
Version history for the MSSQL Operator, newest first. Versions follow the chart
and image tags published to the Solanica registry
(oci://ghcr.io/solanicaio/charts/mssql-operator).
v0.1.16 — 2026-10-31
- Safe pause and resume.
spec.pausednow shuts SQL Server down cleanly instead of scaling straight to0: it waits for running backups/restores to finish, checkpoints the databases and, for an Availability Group, stops writes on the primary and confirms which replicas hold every transaction before any pod stops. Progress is reported in the newstatus.pausefield and aPausedcondition. On resume, an AG promotes only the primary it recorded (or a replica you name via themssql.solanica.io/resume-primaryannotation, if it's confirmed to hold everything). Automatic failover stays off for the whole pause. Tested on a 3-replica AG with continuous writes across six pause/resume cycles: 0 of about 17,000 acknowledged writes lost. See Pausing & Resuming. - Schedules respect a pause. A
MSSQLBackupScheduleskips runs that fall due while its target is paused (no catch-up burst afterwards), and aMSSQLBackup/MSSQLRestorecreated against a paused target waits asPendingand runs after the resume. - Changes while paused. The admission webhook warns about spec changes
made while a resource is paused, since they take effect only after the
resume, and validates the
mssql.solanica.io/resume-primaryannotation. An Availability Group keeps its image while paused, so an image change still goes through the ordered rolling upgrade after the resume. - Status fix.
MSSQLAvailabilityGroupstatus now reports the primary correctly when it is on the third replica or later; previously the status view stopped scanning after the second replica.
Upgrade with the chart, not only the image: the CRDs add the status.pause
field, and the operator needs a new permission to create and patch Events. A
resource that is already paused when you upgrade has no recorded primary, so
when you resume an Availability Group the operator lets regular failover pick
the primary, as in earlier versions. Pause it again after the resume to get
the new behavior.
v0.1.15 — 2026-10-18
- Pod annotations;
spec.podLabelsreplaced byspec.podMetadata.spec.podMetadata.labelsandspec.podMetadata.annotationsadd labels and annotations to the SQL Server pods (pod template only, so they can be changed at any time). This matches thepodMetadatafield of other operators, such as the Prometheus Operator and the Valkey operator. The admission webhook now rejects invalid keys and values, and keys reserved for the operator (mssql.solanica.io/*and theapp.kubernetes.io/name,instance,componentandmanaged-bylabels). See CR Reference.
spec.podLabels is removed. After the CRD upgrade the API server drops the
field from existing resources, so their pods lose those labels and roll once.
Move the labels to spec.podMetadata.labels when you upgrade. OpenEverest
users: upgrade provider-mssql together with the operator.
v0.1.14 — 2026-10-16
Availability Group failover improvements from fault-injection testing (pod delete, node drain, forced pod deletion and network partition of the primary under continuous writes). See Availability Groups.
- Planned failover hands over before SQL Server stops. The
mssqlcontainer gets its ownpreStophook that keeps SQL Server running until the ag-sidecar has handed the primary role to a synchronized secondary, then stops SQL Server. The sidecar's target selection now readsis_localcorrectly, which also applies to moving the primary before an image upgrade. See Planned failover. - SQL Server shuts down cleanly on pod termination. PID 1 in the
mcr.microsoft.com/mssql/serverimage is a launcher script that ignores SIGTERM, so the hook signalssqlservrdirectly. This applies to standalone instances too. - Faster unplanned failover. The operator checks the primary Lease every
second and starts failover as soon as it expires, and connections to an
unreachable replica time out within the caller's deadline. Graceful failover
tries every eligible candidate in rank order before reporting
FailoverBlocked. - Secondaries follow the new primary. After a failover the operator re-asserts the SECONDARY role on the remaining secondaries and, for 60s, rejoins any that are not synchronizing with the new primary.
- Handling of a stale primary after a partition. When more than one replica reports PRIMARY, the Kubernetes Lease decides which one is live: the operator skips other AG maintenance, demotes the replica without the Lease, and restarts SQL Server on it if SQL Server refuses the demotion. The re-seed path never drops the AG on a replica that reports PRIMARY. See After a network partition heals.
- Recreated replicas rejoin promptly. The operator drops the primary's stale HADR session to a replica that came back with a new IP, instead of waiting for the kernel to time it out.
- The primary's HADR endpoint is restarted only when the primary has no synchronized secondary, so recovering one replica doesn't interrupt the others.
The new preStop hooks change the pod template, so SQL Server pods restart once
after the upgrade. The pods being replaced still run the previous version's
hooks, so in an Availability Group the primary's restart goes through the
Lease-based failover rather than the new handover. Expect a short write pause,
as with an unplanned failover.
v0.1.13 — 2026-10-14
- Availability Group status with TLS unset. Status queries now apply spec
defaults, so an AG created without
spec.tls(for example through OpenEverest) reports its state and becomes Ready. Standalone instances withoutspec.tlsnow reportstatus.tlsCertificateExpiry.
v0.1.12 — 2026-10-14
- Recovery after losing a replica. A secondary left behind by a failover is rejoined first, then its HADR endpoint is restarted; a re-seed is the last resort. Recovery retries at least every 30s, and DROP/JOIN operations get a 60s budget.
- Availability Group Ready only once the AG exists.
MSSQLAvailabilityGroupno longer reports Ready as soon as its pods are ready, only after the AG is configured. - No cluster-DNS dependency for backups and restores. Like the other reconcilers, they reach replicas by pod IP.
- Monitoring with any SA password. The exporter's credentials are
URL-escaped into a
<cr-name>-exporter-authSecret, so passwords with#,%or@work. See Monitoring.
v0.1.11 — 2026-10-13
- SA password rotation. Changing the Secret referenced by
spec.saPasswordSecretnow rotates the password in SQL Server: the pods roll onto the new password (Availability Groups fail over gracefully), then the operator runsALTER LOGINon every replica. If SQL Server rejects every known password, the resource reportsErrorwith a clear message instead of crash-looping. Re-creating a resource over retained PVCs keeps working. See SA Password. - Safe version upgrades. The admission webhook rejects moving
spec.imageto an older SQL Server release (e.g. 2025 → 2022), which would leave the databases unopenable. Availability Groups upgrade in SQL Server's rolling-upgrade order: secondaries first, the primary last after a planned failover. See Version upgrade. - No cluster-DNS dependency for operator-to-SQL connections. Password rotation and upgrade orchestration reach replicas by pod IP.
- The chart adds read access to PersistentVolumeClaims (
get/list/watch), which password rotation needs. Upgrade with the chart, not only the image.
v0.1.10 — 2026-10-07
- Pod labels. New
spec.podLabelsadds extra labels to the SQL Server pods (pod template only, so they can be changed at any time). See CR Reference. - Dependency updates.
v0.1.9 — 2026-09-17
- Topology change: standalone → Availability Group. Migrate a standalone
MSSQLInstanceto aMSSQLAvailabilityGroupin place, reusing the existing PersistentVolumeClaims. See Version, Edition & Topology Changes. - Point-in-time recovery fix. Resolved a race condition in the PITR transaction-log archival flow.
- Dependency updates.
v0.1.8 — 2026-08-28
- Maintenance release (build and dependency updates).
v0.1.7 — 2026-08-28
- Status improvements. Added
status.hostand aligned status reporting across resources for more consistent readiness and health information.
v0.1.6 — 2026-08-27
- Maintenance release (build and dependency updates).
v0.1.5 — 2026-08-27
- Point-in-time recovery (PITR). Added PITR support for backups via the transaction-log chain. See Backups & Restores.
- Default version is now SQL Server 2025. New instances default to the
2025-latestimage unlessspec.imageis pinned.
v0.1.4 — 2026-07-27
- Maintenance release (build and dependency updates).
v0.1.3 — 2026-07-27
- Maintenance release (build and dependency updates).
v0.1.2 — 2026-07-26
- Maintenance release (build and dependency updates).
v0.1.1 — 2026-07-26
- Maintenance release (build and dependency updates).
v0.1.0 — 2026-07-25
- Initial release of the MSSQL Operator:
MSSQLInstanceandMSSQLAvailabilityGroupdeployments, TLS transport encryption, S3-compatible backup and restore, monitoring, and flexible storage and scheduling.