mysql_cluster: Begin add but not finished

This commit is contained in:
Florian RICHER 2025-03-27 15:28:14 +01:00
parent 13c2319fb3
commit 12cae34ca8
11 changed files with 309 additions and 0 deletions

3
mysql_cluster/README.md Normal file
View file

@ -0,0 +1,3 @@
Required steps before run kubernetes configuration
- https://github.com/mysql/mysql-operator?tab=readme-ov-file#mysql-operator-for-kubernetes-installation

155
mysql_cluster/k8s/kube.yaml Normal file
View file

@ -0,0 +1,155 @@
apiVersion: v1
kind: Secret
metadata:
name: mysql-replicated-secret
type: Opaque
data:
# Encoded base64 string required by kubernetes
# echo -n '<wanted_value>' | base64
mysql-root-password: cm9vdA==
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql-replicated-db-deployment
labels:
app: mysql-replicated
service: db
spec:
serviceName: mysql-db-service
replicas: 1
selector:
matchLabels:
app: mysql-replicated
service: db
template:
metadata:
labels:
app: mysql-replicated
service: db
spec:
containers:
- name: mysql-replicated
image: mysql:9
resources:
requests:
memory: "512Mi"
cpu: "1000m"
limits:
memory: "2048Mi"
cpu: "2000m"
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-replicated-secret
key: mysql-root-password
volumeMounts:
- name: mysql-replicated-data
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-replicated-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Service
metadata:
name: mysql-replicated-db-service
spec:
type: ClusterIP
selector:
app: mysql-replicated
service: db
ports:
- protocol: TCP
port: 3306
targetPort: 3306
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-replicated-configmap
data:
mysql-server: mysql-db-service
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-replicated-phpmyadmin-deployment
labels:
app: mysql-replicated
service: phpmyadmin
spec:
replicas: 2
selector:
matchLabels:
app: mysql-replicated
service: phpmyadmin
template:
metadata:
labels:
app: mysql-replicated
service: phpmyadmin
spec:
containers:
- name: phpmyadmin
image: phpmyadmin:5.2
resources:
limits:
memory: "256Mi"
cpu: "1000m"
ports:
- containerPort: 80
env:
- name: PMA_HOST
valueFrom:
configMapKeyRef:
name: mysql-replicated-configmap
key: mysql-server
- name: PMA_USER
value: root
- name: PMA_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-replicated-secret
key: mysql-root-password
---
apiVersion: v1
kind: Service
metadata:
name: mysql-replicated-phpmyadmin-service
spec:
type: ClusterIP
selector:
app: mysql-replicated
service: phpmyadmin
ports:
- protocol: TCP
port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: mysql-replicated-phpmyadmin-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: mysql-replicated-phpmyadmin-service
port:
number: 80

View file

@ -0,0 +1,7 @@
# Check https://github.com/kubernetes-sigs/kustomize/tree/master/examples/wordpress
resources:
- mysql_cluster.yaml
- mysql_service.yaml
- phpmyadmin_deployment.yaml
- phpmyadmin_service.yaml

View file

@ -0,0 +1,27 @@
apiVersion: mysql.oracle.com/v2
kind: InnoDBCluster
metadata:
name: db-cluster
spec:
secretName: secret
mysql:
image: mysql:9
resources:
requests:
memory: "512Mi"
cpu: "1000m"
limits:
memory: "2048Mi"
cpu: "2000m"
tlsUseSelfSigned: true
instances: 3
router:
instances: 1
datadirVolumeClaimTemplate:
- metadata:
name: mysql-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 10Gi

View file

@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: db-service
spec:
type: ClusterIP
selector:
service: db
ports:
- protocol: TCP
port: 3306
targetPort: 3306

View file

@ -0,0 +1,38 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: phpmyadmin-deployment
labels:
service: phpmyadmin
spec:
replicas: 1
selector:
matchLabels:
service: phpmyadmin
template:
metadata:
labels:
service: phpmyadmin
spec:
containers:
- name: phpmyadmin
image: phpmyadmin
resources:
limits:
memory: "256Mi"
cpu: "1000m"
ports:
- containerPort: 80
env:
- name: PMA_HOST
valueFrom:
configMapKeyRef:
name: mysql-configmap
key: mysql-server
- name: PMA_USER
value: root
- name: PMA_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: mysql-root-password

View file

@ -0,0 +1,12 @@
apiVersion: v1
kind: Service
metadata:
name: phpmyadmin-service
spec:
type: ClusterIP
selector:
service: phpmyadmin
ports:
- protocol: TCP
port: 80
targetPort: 80

View file

@ -0,0 +1,32 @@
resources:
- ../../base
- phpmyadmin_ingress.yaml
namespace: default
labels:
- includeSelectors: true
pairs:
app: mysql-cluster
commonAnnotations:
owner: florian
namePrefix: mysql-cluster-
images:
- name: phpmyadmin
newName: phpmyadmin
newTag: "5.2"
patches:
- path: replica.yaml
configMapGenerator:
- name: configmap
env: mysql-configmap.properties
secretGenerator:
- name: secret
literals:
- mysql-root-password=root

View file

@ -0,0 +1 @@
mysql-server=mysql-replicated-db-service

View file

@ -0,0 +1,16 @@
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: phpmyadmin-ingress
spec:
ingressClassName: nginx
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: phpmyadmin-service
port:
number: 80

View file

@ -0,0 +1,6 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: phpmyadmin-deployment
spec:
replicas: 2