From 1507534dc19ca7a5b59e5a8a9908986e2909309f Mon Sep 17 00:00:00 2001 From: James Blair Date: Thu, 11 Sep 2025 17:14:16 +1200 Subject: [PATCH] Add write-up for sql server 2022 on openshift. --- .../README.org | 177 ++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 2025-09-11-sql-server-2022-openshift/README.org diff --git a/2025-09-11-sql-server-2022-openshift/README.org b/2025-09-11-sql-server-2022-openshift/README.org new file mode 100644 index 0000000..e656555 --- /dev/null +++ b/2025-09-11-sql-server-2022-openshift/README.org @@ -0,0 +1,177 @@ +#+TITLE: Deploy sql server on openshift +#+DATE: <2025-09-11 Thu> +#+AUTHOR: James Blair + + +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. + +#+NAME: Check oc status +#+begin_src bash +oc whoami && oc version +#+end_src + +#+RESULTS: Check oc status +#+begin_example +cluster-admin +Client Version: 4.19.10 +Kustomize Version: v5.5.0 +Server Version: 4.17.37 +Kubernetes Version: v1.30.14 +#+end_example + + +* 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. + +#+NAME: Create database pvc +#+begin_src bash +cat << EOF | oc --namespace sql-server apply --filename - +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: mssql-data +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 8Gi +EOF +#+end_src + +#+RESULTS: Create database pvc +#+begin_example +persistentvolumeclaim/mssql-data created +#+end_example + + +* 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. + +#+NAME: Create database credential +#+begin_src bash +cat << EOF | oc --namespace sql-server apply --filename - +apiVersion: v1 +data: + SA_PASSWORD: U1FMU2VydmVyMjAyMk9uT0NQ +kind: Secret +metadata: + name: mssql +EOF +#+end_src + +#+RESULTS: Create database credential +#+begin_example +secret/mssql created +#+end_example + + +* Create database deployment + +With our pre-requisites in place we can create our database ~Deployment~. + +#+NAME: Create database deployment +#+begin_src bash +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 +#+end_src + +#+RESULTS: Create database deployment +#+begin_example +deployment.apps/mssql-deployment created +#+end_example + + +* 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. + +#+NAME: Create database service +#+begin_src bash +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 +#+end_src + +#+RESULTS: Create database service +#+begin_example +service/mssql-service created +#+end_example + + +* Confirm database running + +Finally - we can validate the database is running by executing ~sqlcmd~ within the database pod. + +#+NAME: Test database running +#+begin_src bash +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" +#+end_src + +#+RESULTS: Test database running +#+begin_example +name +-------------------------------------------------------------------------------------------------------------------------------- +master +tempdb +model +msdb + +(4 rows affected) +#+end_example