Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bonsai-oss/external-db-operator
Kubernetes operator configuring out of cluster databases
https://github.com/bonsai-oss/external-db-operator
cockroachdb databases kubernetes mariadb mysql operator postgresql
Last synced: about 1 month ago
JSON representation
Kubernetes operator configuring out of cluster databases
- Host: GitHub
- URL: https://github.com/bonsai-oss/external-db-operator
- Owner: bonsai-oss
- License: mit
- Created: 2024-01-05T19:26:00.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2024-05-20T16:05:30.000Z (7 months ago)
- Last Synced: 2024-05-20T19:11:01.024Z (7 months ago)
- Topics: cockroachdb, databases, kubernetes, mariadb, mysql, operator, postgresql
- Language: Go
- Homepage: https://gitlab.com/bonsai-oss/kubernetes/external-db-operator
- Size: 166 KB
- Stars: 18
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# External-DB-Operator
The External DB Operator is a project that aims to simplify the management of out-of-cluster databases.
It was created to address the following problems:
- Out-of-cluster databases are not managed by kubernetes and therefore not part of the cluster lifecycle.
- Manually managing database connection information does not provide a good base for automation.Operator Key Features:
- Lifecycle management of dbms side databases, user accounts and database grants
- Exposing database details as kubernetes secret
- Support for multiple database providers (see [Supported Databases](#supported-databases))### Requirements
* Kubernetes (tested with >= v1.28.3)
* Admin user access to one of the supported databases (see [Supported Databases](#supported-databases))## Supported Databases
The following database management systems are supported and tested. Compatible products should work as well but are not tested. \
Please submit an issue if you encounter any problems or have a feature request.| Database | Provider | Library |
|---------------------------|------------|---------------------------------------------------------------|
| PostgreSQL / CockroachDB | `postgres` | [pgx](https://github.com/jackc/pgx) |
| MySQL / MariaDB / Percona | `mysql` | [go-sql-driver/mysql](https://github.com/go-sql-driver/mysql) |Support for other databases can be added by implementing the [Provider](internal/database/database.go) interface.
## Usage
### Getting Started
The operator can be deployed to a cluster via the example [manifests](manifests) directory.\
First, create the necessary rbac and crd resources:```shell
kubectl apply -f manifests/rbac.yaml
kubectl apply -f manifests/crd.yaml
```Modify the [manifests/deployment.yaml](manifests/deployment.yaml) file to include the correct database dsn and provider.\
Then, deploy the operator:```shell
kubectl apply -f manifests/deployment.yaml
```---
Once the operator is deployed to the cluster, it will start watching for `bonsai-oss.org/v1/database` resources in all namespaces.
The name of the operator is specified via the `--instance-name` / `-i` flag and the used database provider in pattern `-`. An example for PostgreSQL would be `postgres-default`.\
That name is used to select the operator instance responsible for a specific database resource and can be specified via the `bonsai-oss.org/external-db-operator` label. See [manifests/test-database.yaml](manifests/test-database.yaml) for an example.After creating the database resources, the operator will create a secret containing the database connection details (database, host, port, username, password) in the same namespace as the database resource.
It is named with the pattern `-` (e.a. `edb-your-database`).When adding additional annotations / labels to the database resource, the operator will pass them to the secret as well.
### Parameters
| Parameter | Description | Default |
|---------------------------------------------------|------------------------------------------------------------------------------------------------|------------------------------------------------------|
| `-p`, `--database-provider`, `$DATABASE_PROVIDER` | Database provider to use. | postgres |
| `-d`, `--database-dsn`, `$DATABASE_DSN` | The DSN to use for the database provider.
Check the specific database libaray for format. | postgres://postgres:postgres@localhost:5432/postgres |
| `-i`, `--instance-name`, `$INSTANCE_NAME` | Name of the operator instance | default |
| `-s`, `--secret-prefix`, `$SECRET_PREFIX` | Prefix for the secret name | edb |### Endpoints
The operator exposes the following endpoints on http port `8080`.
| Endpoint | Description |
|------------|-----------------------------------------------------------------------------------------------------------------------------------|
| `/status` | Health check endpoint. Returns 200 if the operator is running and healthy.
Also, some information is exposed in JSON format. |
| `/metrics` | Prometheus metrics endpoint. |