4.1 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	Deploy sql server on openshift
- Pre-requisites
 - Create database pvc
 - Create database credential
 - Create database deployment
 - Create database service
 - Confirm database running
 
This short write-up will explain how to deploy single instance SQL Sever 2022 databases on OpenShift for the purposes of rapid proof of concepts.
Pre-requisites
Before we begin let's ensure we are logged into our cluster.
oc whoami && oc version
cluster-admin Client Version: 4.19.10 Kustomize Version: v5.5.0 Server Version: 4.17.37 Kubernetes Version: v1.30.14
Create database pvc
Our database will use persistent storage to ensure the database contents are not lost between restarts, we can request by creating a PersistentVolumeClaim resource.
cat << EOF | oc --namespace sql-server apply --filename -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mssql-data
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
EOF
persistentvolumeclaim/mssql-data created
Create database credential
We also need to supply credentials for our database to be created with, we can do this by creating a Secret resource.
cat << EOF | oc --namespace sql-server apply --filename -
apiVersion: v1
data:
  SA_PASSWORD: U1FMU2VydmVyMjAyMk9uT0NQ
kind: Secret
metadata:
  name: mssql
EOF
secret/mssql created
Create database deployment
With our pre-requisites in place we can create our database Deployment.
cat << EOF | oc --namespace sql-server apply --filename -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mssql-deployment
spec:
  selector:
    matchLabels:
      app: mssql
  template:
    metadata:
      labels:
        app: mssql
    spec:
      containers:
        - name: mssql
          image: mcr.microsoft.com/mssql/rhel/server:2022-CU13-rhel-9.1
          securityContext:
            capabilities:
              add: ["NET_BIND_SERVICE"]
          ports:
            - containerPort: 1433
          env:
            - name: MSSQL_PID
              value: "Developer"
            - name: ACCEPT_EULA
              value: "Y"
            - name: MSSQL_SA_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mssql
                  key: SA_PASSWORD
          volumeMounts:
            - name: mssqldb
              mountPath: /var/opt/mssql
      volumes:
        - name: mssqldb
          persistentVolumeClaim:
            claimName: mssql-data
EOF
deployment.apps/mssql-deployment created
Create database service
Once the database is running we can expose it for use within our cluster by creating a Service. Other pods we deploy in the namespace will be able to reach the database using the service name mssql-service and the appropriate port.
cat << EOF | oc --namespace sql-server apply --filename -
apiVersion: v1
kind: Service
metadata:
  name: mssql-service
spec:
  selector:
    app: mssql
  ports:
    - protocol: TCP
      port: 31433
      targetPort: 1433
  type: ClusterIP
EOF
service/mssql-service created
Confirm database running
Finally - we can validate the database is running by executing sqlcmd within the database pod.
oc --namespace sql-server exec $(oc --namespace sql-server get pods --output name) -- /opt/mssql-tools/bin/sqlcmd -Usa -PSQLServer2022OnOCP -q "SELECT name FROM sys.databases"
name -------------------------------------------------------------------------------------------------------------------------------- master tempdb model msdb (4 rows affected)