Initialize database on Kubernetes
The purpose of this tutorial is to show how to initialize a MariaDB database required for Soffid IAM installation on Kubernetes.
MySQL/MariaDB
To initialize MariaDB on Kubernetes first of all you must create a Persistent Volume. Storage in the cluster will be provisioned using Storage Classes.
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv3
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: local-storage
local:
path: /home/ulocal/kubernetes-disk3
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- soffid123
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mariadb-claim3
spec:
storageClassName: local-storage
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
Path "/home/ulocal/kubernetes-disk3" must be exists.
Then you must define the MariaDB deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb3
labels:
app: soffid
instance: "Soffid-3"
type: database
spec:
strategy:
rollingUpdate:
maxSurge: 0
maxUnavailable: 1
type: RollingUpdate
replicas: 1
selector:
matchLabels:
app: soffid
instance: "Soffid-3"
type: database
template:
metadata:
labels:
app: soffid
instance: "Soffid-3"
type: database
spec:
restartPolicy: Always
containers:
- name: mariadb3
image: mariadb
resources:
limits:
memory: 2Gi
requests:
memory: 400Mi
args:
- "--max-allowed-packet=175M"
- "--innodb-log-file-size=256M"
- "--character-set-server=utf8"
- "--collation-server=utf8_bin"
- "--net-read-timeout=3600"
- "--net-write-timeout=3600"
- "--innodb-buffer-pool-size=100M"
ports:
- containerPort: 3306
name: db-port
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb
key: root_password
- name: MYSQL_USER
valueFrom:
secretKeyRef:
name: mariadb
key: username
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb
key: password
- name: MYSQL_DATABASE
value: soffid
volumeMounts:
- name: mysql-persistent-storage3
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage3
persistentVolumeClaim:
claimName: mariadb-claim3
---
apiVersion: v1
kind: Service
metadata:
name: mariadb3-service
namespace: default
spec:
clusterIP: None
ports:
- name: mariadb
port: 3306
protocol: TCP
targetPort: 3306
selector:
app: soffid
instance: "Soffid-3"
type: database
type: ClusterIP
Finally you must create resources in a cluster:
kubectl apply -f mariadb-pv-file.yaml
kubectl apply -f mariadb-deployment-file.yaml