feat: Initial add a component to connect to mysql.
This commit is contained in:
59
kubernetes/components/connect/mysql/README.md
Normal file
59
kubernetes/components/connect/mysql/README.md
Normal 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`.
|
||||
14
kubernetes/components/connect/mysql/kustomization.yaml
Normal file
14
kubernetes/components/connect/mysql/kustomization.yaml
Normal 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
|
||||
29
kubernetes/components/connect/mysql/patch-deployment.yaml
Normal file
29
kubernetes/components/connect/mysql/patch-deployment.yaml
Normal 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
|
||||
28
kubernetes/components/connect/mysql/patch-helmrelease.yaml
Normal file
28
kubernetes/components/connect/mysql/patch-helmrelease.yaml
Normal 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
|
||||
29
kubernetes/components/connect/mysql/patch-statefulset.yaml
Normal file
29
kubernetes/components/connect/mysql/patch-statefulset.yaml
Normal 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
|
||||
Reference in New Issue
Block a user