diff --git a/mysql_cluster/README.md b/mysql_cluster/README.md new file mode 100644 index 0000000..1a5c5a6 --- /dev/null +++ b/mysql_cluster/README.md @@ -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 \ No newline at end of file diff --git a/mysql_cluster/k8s/kube.yaml b/mysql_cluster/k8s/kube.yaml new file mode 100644 index 0000000..4ba10f5 --- /dev/null +++ b/mysql_cluster/k8s/kube.yaml @@ -0,0 +1,155 @@ +apiVersion: v1 +kind: Secret +metadata: + name: mysql-replicated-secret +type: Opaque +data: + # Encoded base64 string required by kubernetes + # echo -n '' | 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 \ No newline at end of file diff --git a/mysql_cluster/kustomize/base/kustomization.yaml b/mysql_cluster/kustomize/base/kustomization.yaml new file mode 100644 index 0000000..658be15 --- /dev/null +++ b/mysql_cluster/kustomize/base/kustomization.yaml @@ -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 diff --git a/mysql_cluster/kustomize/base/mysql_cluster.yaml b/mysql_cluster/kustomize/base/mysql_cluster.yaml new file mode 100644 index 0000000..191530f --- /dev/null +++ b/mysql_cluster/kustomize/base/mysql_cluster.yaml @@ -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 diff --git a/mysql_cluster/kustomize/base/mysql_service.yaml b/mysql_cluster/kustomize/base/mysql_service.yaml new file mode 100644 index 0000000..563a0b0 --- /dev/null +++ b/mysql_cluster/kustomize/base/mysql_service.yaml @@ -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 \ No newline at end of file diff --git a/mysql_cluster/kustomize/base/phpmyadmin_deployment.yaml b/mysql_cluster/kustomize/base/phpmyadmin_deployment.yaml new file mode 100644 index 0000000..7b0cb73 --- /dev/null +++ b/mysql_cluster/kustomize/base/phpmyadmin_deployment.yaml @@ -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 \ No newline at end of file diff --git a/mysql_cluster/kustomize/base/phpmyadmin_service.yaml b/mysql_cluster/kustomize/base/phpmyadmin_service.yaml new file mode 100644 index 0000000..a8a4849 --- /dev/null +++ b/mysql_cluster/kustomize/base/phpmyadmin_service.yaml @@ -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 \ No newline at end of file diff --git a/mysql_cluster/kustomize/overlays/default/kustomization.yaml b/mysql_cluster/kustomize/overlays/default/kustomization.yaml new file mode 100644 index 0000000..33f64b4 --- /dev/null +++ b/mysql_cluster/kustomize/overlays/default/kustomization.yaml @@ -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 \ No newline at end of file diff --git a/mysql_cluster/kustomize/overlays/default/mysql-configmap.properties b/mysql_cluster/kustomize/overlays/default/mysql-configmap.properties new file mode 100644 index 0000000..13449f9 --- /dev/null +++ b/mysql_cluster/kustomize/overlays/default/mysql-configmap.properties @@ -0,0 +1 @@ +mysql-server=mysql-replicated-db-service \ No newline at end of file diff --git a/mysql_cluster/kustomize/overlays/default/phpmyadmin_ingress.yaml b/mysql_cluster/kustomize/overlays/default/phpmyadmin_ingress.yaml new file mode 100644 index 0000000..4d16eed --- /dev/null +++ b/mysql_cluster/kustomize/overlays/default/phpmyadmin_ingress.yaml @@ -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 \ No newline at end of file diff --git a/mysql_cluster/kustomize/overlays/default/replica.yaml b/mysql_cluster/kustomize/overlays/default/replica.yaml new file mode 100644 index 0000000..c72185b --- /dev/null +++ b/mysql_cluster/kustomize/overlays/default/replica.yaml @@ -0,0 +1,6 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: phpmyadmin-deployment +spec: + replicas: 2 \ No newline at end of file