Skip to main content

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.paused now shuts SQL Server down cleanly instead of scaling straight to 0: 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 new status.pause field and a Paused condition. On resume, an AG promotes only the primary it recorded (or a replica you name via the mssql.solanica.io/resume-primary annotation, 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 MSSQLBackupSchedule skips runs that fall due while its target is paused (no catch-up burst afterwards), and a MSSQLBackup/MSSQLRestore created against a paused target waits as Pending and 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-primary annotation. An Availability Group keeps its image while paused, so an image change still goes through the ordered rolling upgrade after the resume.
  • Status fix. MSSQLAvailabilityGroup status now reports the primary correctly when it is on the third replica or later; previously the status view stopped scanning after the second replica.
Upgrading to v0.1.16

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.podLabels replaced by spec.podMetadata. spec.podMetadata.labels and spec.podMetadata.annotations add labels and annotations to the SQL Server pods (pod template only, so they can be changed at any time). This matches the podMetadata field 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 the app.kubernetes.io/ name, instance, component and managed-by labels). See CR Reference.
Breaking change

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 mssql container gets its own preStop hook 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 reads is_local correctly, 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/server image is a launcher script that ignores SIGTERM, so the hook signals sqlservr directly. 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.
Upgrading to v0.1.14

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 without spec.tls now report status.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. MSSQLAvailabilityGroup no 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-auth Secret, so passwords with #, % or @ work. See Monitoring.

v0.1.11 — 2026-10-13​

  • SA password rotation. Changing the Secret referenced by spec.saPasswordSecret now rotates the password in SQL Server: the pods roll onto the new password (Availability Groups fail over gracefully), then the operator runs ALTER LOGIN on every replica. If SQL Server rejects every known password, the resource reports Error with 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.image to 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.podLabels adds 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 MSSQLInstance to a MSSQLAvailabilityGroup in 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.host and 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-latest image unless spec.image is 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: MSSQLInstance and MSSQLAvailabilityGroup deployments, TLS transport encryption, S3-compatible backup and restore, monitoring, and flexible storage and scheduling.