From b965ce0256d39b5e1a9ca328ba40d6c541cc8aa6 Mon Sep 17 00:00:00 2001 From: Laur IVAN Date: Fri, 27 Feb 2026 15:14:47 +0100 Subject: [PATCH] feat: Initial add a component to connect to mysql. --- kubernetes/components/connect/mysql/README.md | 59 +++++++++++++++++++ .../connect/mysql/kustomization.yaml | 14 +++++ .../connect/mysql/patch-deployment.yaml | 29 +++++++++ .../connect/mysql/patch-helmrelease.yaml | 28 +++++++++ .../connect/mysql/patch-statefulset.yaml | 29 +++++++++ 5 files changed, 159 insertions(+) create mode 100644 kubernetes/components/connect/mysql/README.md create mode 100644 kubernetes/components/connect/mysql/kustomization.yaml create mode 100644 kubernetes/components/connect/mysql/patch-deployment.yaml create mode 100644 kubernetes/components/connect/mysql/patch-helmrelease.yaml create mode 100644 kubernetes/components/connect/mysql/patch-statefulset.yaml diff --git a/kubernetes/components/connect/mysql/README.md b/kubernetes/components/connect/mysql/README.md new file mode 100644 index 0000000..37e09e2 --- /dev/null +++ b/kubernetes/components/connect/mysql/README.md @@ -0,0 +1,59 @@ +# MySQL Connection Component + +This Kustomize component provides a standardized way for applications to connect to the shared MySQL database cluster. + +## Features + +- Injects standard database connection environment variables. +- Supports `Deployment`, `StatefulSet`, and `HelmRelease` (standard `bjw-s` app-template structure). +- Configurable via a local `mysql-secret`. + +## Environment Variables + +The following variables are injected into the application containers: + +| Variable | Source / Value | Description | +|----------|----------------|-------------| +| `DB_HOST` | `mysql-innodbcluster-router.database-system.svc.cluster.local` | The internal DNS name for the MySQL router. | +| `DB_PORT` | `3306` | The default MySQL port. | +| `DB_USER` | Secret `mysql-secret`, key `DB_USER` | Database username. | +| `DB_PASSWORD` | Secret `mysql-secret`, key `DB_PASSWORD` | Database password. | +| `DB_NAME` | Secret `mysql-secret`, key `DB_NAME` | Name of the database. | + +## Usage + +### 1. Add the component to `kustomization.yaml` + +In your application's `kustomization.yaml`, add the component: + +```yaml +components: + - ../../components/connect/mysql +``` + +### 2. Create the required secret + +Ensure a secret named `mysql-secret` exists in the application's namespace with the following keys: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: mysql-secret +stringData: + DB_USER: "your-user" + DB_PASSWORD: "your-password" + DB_NAME: "your-database" +``` + +### 3. Overriding defaults + +If you need to use a different secret name or override specific variables, you can define them directly in your resource's `env` section. Kustomize will prioritize or merge these depending on the patch type. + +For `HelmRelease` using the `bjw-s` template, ensure your controller is named `main` and container is named `main` for the patch to apply automatically. + +## Resource Compatibility + +- **Deployments**: Targets containers named `app`. +- **StatefulSets**: Targets containers named `app`. +- **HelmReleases**: Targets `spec.values.controllers.main.containers.main`. diff --git a/kubernetes/components/connect/mysql/kustomization.yaml b/kubernetes/components/connect/mysql/kustomization.yaml new file mode 100644 index 0000000..b931eb1 --- /dev/null +++ b/kubernetes/components/connect/mysql/kustomization.yaml @@ -0,0 +1,14 @@ +--- +apiVersion: kustomize.config.k8s.io/v1alpha1 +kind: Component + +patches: + - path: patch-deployment.yaml + target: + kind: Deployment + - path: patch-statefulset.yaml + target: + kind: StatefulSet + - path: patch-helmrelease.yaml + target: + kind: HelmRelease diff --git a/kubernetes/components/connect/mysql/patch-deployment.yaml b/kubernetes/components/connect/mysql/patch-deployment.yaml new file mode 100644 index 0000000..8193c6e --- /dev/null +++ b/kubernetes/components/connect/mysql/patch-deployment.yaml @@ -0,0 +1,29 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: placeholder +spec: + template: + spec: + containers: + - name: app + env: + - name: DB_HOST + value: mysql-innodbcluster-router.database-system.svc.cluster.local + - name: DB_PORT + value: "3306" + - name: DB_USER + valueFrom: + secretKeyRef: + name: mysql-secret + key: DB_USER + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-secret + key: DB_PASSWORD + - name: DB_NAME + valueFrom: + secretKeyRef: + name: mysql-secret + key: DB_NAME diff --git a/kubernetes/components/connect/mysql/patch-helmrelease.yaml b/kubernetes/components/connect/mysql/patch-helmrelease.yaml new file mode 100644 index 0000000..c8ad6cc --- /dev/null +++ b/kubernetes/components/connect/mysql/patch-helmrelease.yaml @@ -0,0 +1,28 @@ +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: placeholder +spec: + values: + controllers: + main: + containers: + main: + env: + DB_HOST: mysql-innodbcluster-router.database-system.svc.cluster.local + DB_PORT: "3306" + DB_USER: + valueFrom: + secretKeyRef: + name: mysql-secret + key: DB_USER + DB_PASSWORD: + valueFrom: + secretKeyRef: + name: mysql-secret + key: DB_PASSWORD + DB_NAME: + valueFrom: + secretKeyRef: + name: mysql-secret + key: DB_NAME diff --git a/kubernetes/components/connect/mysql/patch-statefulset.yaml b/kubernetes/components/connect/mysql/patch-statefulset.yaml new file mode 100644 index 0000000..c3fa279 --- /dev/null +++ b/kubernetes/components/connect/mysql/patch-statefulset.yaml @@ -0,0 +1,29 @@ +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: placeholder +spec: + template: + spec: + containers: + - name: app + env: + - name: DB_HOST + value: mysql-innodbcluster-router.database-system.svc.cluster.local + - name: DB_PORT + value: "3306" + - name: DB_USER + valueFrom: + secretKeyRef: + name: mysql-secret + key: DB_USER + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-secret + key: DB_PASSWORD + - name: DB_NAME + valueFrom: + secretKeyRef: + name: mysql-secret + key: DB_NAME