Add write-up for sql server 2022 on openshift.
This commit is contained in:
		
							
								
								
									
										177
									
								
								2025-09-11-sql-server-2022-openshift/README.org
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								2025-09-11-sql-server-2022-openshift/README.org
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user