This section describes how to run an ephemeral Oracle database or MySQL database in your Kubernetes cluster using approaches suitable for sample or basic testing purposes.
NOTES:
The databases are configured with ephemeral storage, which means all information will be lost on any shutdown or pod failure.
The Oracle Database images are supported for non-production use only. For more details, see My Oracle Support note: Oracle Support for Database Running on Docker Doc ID 2216342.1.
The following example shows how to set up an ephemeral Oracle database with the following attributes:
Attribute | Value |
---|---|
Kubernetes namespace | default |
Kubernetes pod | oracle-db |
Kubernetes service name | oracle-db |
Kubernetes service port | 1521 |
Kubernetes node port | 30011 |
Image | container-registry.oracle.com/database/enterprise:12.2.0.1-slim |
DBA user (with full privileges) | sys as sysdba |
DBA password | <password placeholder> |
Database Domain (not the same as a WebLogic Domain) | k8s |
Database PDB | devpdb |
Database URL inside Kubernetes cluster (from any namespace) | oracle-db.default.svc.cluster.local:1521/devpdb.k8s |
Database URL outside Kubernetes cluster | dns-name-that-resolves-to-node-location:30011/devpdb.k8s |
Get the operator source and put it in /tmp/weblogic-kubernetes-operator
.
For example:
$ cd /tmp
$ git clone --branch v4.2.9
https://github.com/oracle/weblogic-kubernetes-operator.git
NOTE: We will refer to the top directory of the operator source tree as /tmp/weblogic-kubernetes-operator
; however, you can use a different location.
For additional information about obtaining the operator source, see the Developer Guide Requirements.
Ensure that you have access to the database image:
Use a browser to log in to https://container-registry.oracle.com
, select Database -> enterprise
, and accept the license agreement.
Get the database image:
docker login container-registry.oracle.com
.docker pull container-registry.oracle.com/database/enterprise:12.2.0.1-slim
.If your Kubernetes cluster nodes do not all have access to the database image in a local cache, then:
docker secret
to the default namespace with login credentials for container-registry.oracle.com
:
kubectl create secret docker-registry docker-secret \
--docker-server=container-registry.oracle.com \
--docker-username=your.email@some.com \
--docker-password=your-password \
--docker-email=your.email@some.com \
-n default
start-db-service.sh
in the following step using -s your-image-pull-secret
.WARNING: The Oracle Database images are supported only for non-production use. For more details, see My Oracle Support note: Oracle Support for Database Running on Docker Doc ID 2216342.1.
Create a secret named oracle-db-secret
in the default namespace
with your desired Oracle SYS DBA password in its password
key.
$ kubectl -n default create secret generic oracle-db-secret \
--from-literal='password=<password placeholder>'
(Replace <password placeholder>
with your desired password.)Create a deployment using the database image:
Use the sample script in /tmp/weblogic-kubernetes-operator/kubernetes/samples/scripts/create-oracle-db-service
to create an Oracle database running in the deployment, oracle-db
.
$ cd /tmp/weblogic-kubernetes-operator/kubernetes/samples/scripts/create-oracle-db-service
$ start-db-service.sh
Notes:
start-db-service.sh -h
to see how to customize the namespace, node port, secret name, etc.stop-db-service.sh
to shutdown and cleanup the oracle-db
deployment.kubectl describe pod DB_POD_NAME
and kubectl logs DB_POD_NAME
commands on the database pod.The following example shows how to set up an ephemeral MySQL database with the following attributes:
Attribute | Value |
---|---|
Kubernetes namespace | default |
Kubernetes pod | mysql-db |
Kubernetes service name | mysql-db |
Kubernetes service port | 3306 |
Image | mysql:5.6 |
Root user (with full privileges) | <user name placeholder> |
Root password | <password placeholder> |
Database URL inside Kubernetes cluster (from any namespace) | jdbc:mysql://mysql-db.default.svc.cluster.local:3306/mysql |
Copy the following YAML into a file named mysql.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: mysql-db
namespace: default
labels:
app: mysql-db
spec:
terminationGracePeriodSeconds: 5
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_USER
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-user
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-password
ports:
- containerPort: 3306
name: mysql
---
apiVersion: v1
kind: Service
metadata:
name: mysql-db
namespace: default
spec:
ports:
- port: 3306
selector:
app: mysql-db
clusterIP: None
---
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
namespace: default
data:
root-user: <user name placeholder>
root-password: <password placeholder>
In file mysql.yaml
, replace <user name placeholder>
and <password placeholder>
, respectively, with the output from piping the
root user name and password through base64:
echo -n <user name placeholder> | base64
echo -n <password placeholder> | base64
Deploy MySQL using the command kubectl create -f mysql.yaml
.
To shut down and clean up the resources, use kubectl delete -f mysql.yaml
.