Storage
Single PVC (default)
By default, the operator creates one PVC per replica mounted at /var/opt/mssql.
All SQL Server data, logs, and tempdb share this volume.
storage:
size: 8Gi
storageClassName: standard # optional
accessModes: [ReadWriteOnce] # optional (default)
Separate volumes
Set storage.volumes to create individual PVCs for data, log, and tempdb.
Each volume gets its own storageClassName, accessModes, and size.
This is useful when:
- Data and logs need different storage classes (e.g. high-IOPS SSD for logs)
- You want independent capacity planning for each volume
- tempdb should use ephemeral storage since it's rebuilt on every restart
storage:
volumes:
data:
storageClassName: fast-ssd
resources:
requests:
storage: 50Gi
log:
storageClassName: fast-ssd
resources:
requests:
storage: 20Gi
tempdb:
emptyDir:
sizeLimit: 10Gi
Mount paths
| Volume | Mount path | Purpose |
|---|---|---|
mssql-data | /var/opt/mssql | MSSQL root + data files |
mssql-log | /var/opt/mssql/log | Transaction log files |
mssql-tempdb | /var/opt/mssql/tempdb | tempdb files |
tempdb: PVC or emptyDir
tempdb is rebuilt from scratch on every SQL Server restart, so ephemeral storage
is a valid choice. Set exactly one of persistentVolumeClaim or emptyDir:
emptyDir (recommended for most workloads):
tempdb:
emptyDir:
sizeLimit: 10Gi
PVC (when you need guaranteed IOPS or specific storage class):
tempdb:
persistentVolumeClaim:
storageClassName: ultra-fast
resources:
requests:
storage: 10Gi
Immutability
storage.volumes is immutable after creation. Kubernetes does not allow
changing VolumeClaimTemplates on an existing StatefulSet. To change the
storage layout, delete and recreate the StatefulSet (data persists in PVCs).
mssql.conf
When separate volumes are enabled, the operator automatically configures
SQL Server's file locations via mssql.conf:
[filelocation]
defaultdatadir = /var/opt/mssql/data
defaultlogdir = /var/opt/mssql/log
defaultdumpdir = /var/opt/mssql/data
errorlogfile = /var/opt/mssql/log/errorlog