Oracle: Run Oracle DB on Redhat OpenShift
Based on this work: https://github.com/m-g-k/Running-Oracle-Database-23c-and-23ai-Free-on-OpenShift
Procedure
1) Create a new project (namespace):
oc new-project oracle-db
2) Create a Service Account which you will use to run the database:
oc create sa oracle-sa
3) Configure Security Context Constraint (SCC)
oc adm policy add-scc-to-user anyuid -z oracle-sa
Check with
oc adm policy who-can use scc anyuid
4) Create a secret to store the default password for Oracle :
oc create secret generic oracle-db-pass --from-literal=password=<your_password_here>
5) Create file deployment.yaml
---
apiVersion: v1
kind: Service
metadata:
name: oracle-db-svc
labels:
app: oracle-db
spec:
ports:
- port: 1521
selector:
app: oracle-db
clusterIP: None
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: oracle-db-pvc
labels:
app: oracle-db
spec:
accessModes:
- ReadWriteOncePod
resources:
requests:
storage: 40Gi
storageClassName: ocs-storagecluster-ceph-rbd
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: oracle-db
labels:
app: oracle-db
spec:
serviceName: oracle-db-svc
replicas: 1
selector:
matchLabels:
app: oracle-db
template:
metadata:
labels:
app: oracle-db
spec:
initContainers:
- name: init-oracle
image: registry.access.redhat.com/ubi9/ubi:latest
command: ['/usr/bin/bash', '-c']
args:
- echo starting permissions check on /opt/oracle/oradata/;
ls -al /opt/oracle/;
if [ -f "/opt/oracle/oradata/PERMS.SET" ]; then
echo permissions already set;
else
chown -R 54321:54321 /opt/oracle/oradata;
ls -al /opt/oracle/;
touch /opt/oracle/oradata/PERMS.SET;
echo permissions set;
fi;
echo finished;
securityContext:
runAsUser: 0
volumeMounts:
- name: oracle-db-persistent-storage
mountPath: /opt/oracle/oradata
containers:
- name: oracle-db
image: container-registry.oracle.com/database/free:23.3.0.0
env:
- name: ORACLE_PWD
valueFrom:
secretKeyRef:
name: oracle-db-pass
key: password
- name: ORACLE_PASSWORD
valueFrom:
secretKeyRef:
name: oracle-db-pass
key: password
ports:
- containerPort: 1521
name: oracle-db
volumeMounts:
- name: oracle-db-persistent-storage
mountPath: /opt/oracle/oradata
securityContext:
runAsUser: 54321
serviceAccountName: oracle-sa
volumes:
- name: oracle-db-persistent-storage
persistentVolumeClaim:
claimName: oracle-db-pvc
resources:
requests:
memory: "8Gi"
cpu: "4"
limits:
memory: "8Gi"
cpu: "8"
6) Apply
oc apply -f deployment.yaml