Deploy External Database
Deploy PostgreSQL on Kubernetes
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pot-db-volume
spec:
accessModes:
- ReadWriteOnce
storageClassName:
resources:
requests:
storage: 10Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgresql-db
spec:
serviceName: postgresql-db-service
selector:
matchLabels:
app: postgresql-db
replicas: 1
template:
metadata:
labels:
app: postgresql-db
spec:
containers:
- name: postgresql-db
image: postgres:16
volumeMounts:
- mountPath: /data
name: cache-volume
env:
- name: POSTGRES_USER
value: testuser
- name: POSTGRES_PASSWORD
value: testpassword
- name: PGDATA
value: /data/pgdata
- name: POSTGRES_DB
value: keycloak
ports:
- containerPort: 5432
hostPort: 5432
protocol: TCP
volumeMounts:
- mountPath: /home/postgres/pgdata/data
name: pot-db-volume
readOnly: false
securityContext:
runAsUser: 1000
runAsGroup: 1000
fsGroup: 1000
restartPolicy: Always
volumes:
- name: pot-db-volume
persistentVolumeClaim:
claimName: pot-db-volume
---
apiVersion: v1
kind: Service
metadata:
name: postgres-db
spec:
selector:
app: postgresql-db
type: LoadBalancer
ports:
- port: 5432
targetPort: 5432
kubectl apply -f example-postgre.yaml -n $namespace
Deploy MySQL on Kubernetes
apiVersion: v1
kind: Secret
metadata:
name: pot-mysql-secret
stringData:
rootHost: "%"
rootPassword: "password"
rootUser: "root"
---
apiVersion: v1
kind: Service
metadata:
name: mysql
annotations:
labels:
app: mysql
spec:
type: LoadBalancer
selector:
app: mysql
ports:
- name: tcp
protocol: TCP
port: 3306
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
replicas: 1
serviceName: mysql
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mysql
image: mysql:latest
ports:
- name: tpc
protocol: TCP
containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: rootPassword
name: pot-mysql-secret
volumeMounts:
- name: pot-db
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: pot-db
spec:
storageClassName: default
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
kubectl apply -f example-mysql.yaml -n $namespace