Run MSSQL 2019 on Kubernetes
Goal
Deploy MSSQL Server 2019 on Kubernetes with persistent storage and optional Azure File Share mount.
Create SA Password Secret
kubectl create secret generic mssql --from-literal=SA_PASSWORD="P@55word"
Configure Persistent Storage
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mssql-data
annotations:
volume.beta.kubernetes.io/storage-class: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Optional: Mount Azure File Share
Create secret with base64-encoded Azure Storage credentials:
apiVersion: v1
kind: Secret
metadata:
name: mssql-optionalAddedStorage-secret
namespace: sqlserver
type: Opaque
data:
azurestorageaccountname: Z3NhcmNocG9jc3NoYXJlZHN0b3JhZ2U=
azurestorageaccountkey: SndPbTRlTFhLSVdWc1IzYkhONFV2WGlUM3NVSjBseHYvbUpQUU5DY1pYNEsyUmhTUjBZY3c5bzdmM3huU2h6bE9KVXhhSFcxT09KSmF4VktxRityVWc9PQ==
Create a File Share named optionalAddedStorage in your Azure Storage account.
Deploy MSSQL Server
apiVersion: apps/v1
kind: Deployment
metadata:
name: mssql-deployment
spec:
replicas: 1
selector:
matchLabels:
app: mssql
template:
metadata:
labels:
app: mssql
spec:
terminationGracePeriodSeconds: 30
hostname: mssqlinst
securityContext:
fsGroup: 10001
containers:
- name: mssql
image: mcr.microsoft.com/mssql/server:2019-latest
ports:
- containerPort: 1433
env:
- name: MSSQL_PID
value: "Developer"
- name: ACCEPT_EULA
value: "Y"
- name: MSSQL_AGENT_ENABLED
value: "True"
- name: SA_PASSWORD
valueFrom:
secretKeyRef:
name: mssql
key: SA_PASSWORD
volumeMounts:
- name: mssqldb
mountPath: /var/opt/mssql
- name: optionalAddedStorage
mountPath: /var/optionalAddedStorage
volumes:
- name: mssqldb
persistentVolumeClaim:
claimName: mssql-data
- name: optionalAddedStorage
azureFile:
secretName: mssql-optionalAddedStorage-secret
shareName: optionalAddedStorage
readOnly: false
# nodeSelector:
# power: high
---
apiVersion: v1
kind: Service
metadata:
name: mssql-deployment
spec:
selector:
app: mssql
ports:
- protocol: TCP
port: 1433
targetPort: 1433
type: LoadBalancer
Remove the optionalAddedStorage volumeMounts and volumes sections if Azure File Share is not needed.