feat: Initial add a component to connect to mysql.

This commit is contained in:
2026-02-27 15:14:47 +01:00
parent 0de22eb9e4
commit b965ce0256
5 changed files with 159 additions and 0 deletions

View File

@@ -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`.

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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