Skip to content
GitHub stars
Infrastructure as Data

Your Database.
Your Infrastructure.

Lynq turns database records into Kubernetes resources. Automatically.

16resource types
3lifecycle policies
MySQLbuilt-in datasource
Kubernetes 1.28+cluster requirement
Apache 2.0open source license
Capabilities

Everything each row needs, handled

One database row in, a full set of reconciled Kubernetes resources out — with the controls to keep it safe.

node_configsMySQL
node_idis_active
acme-corp1
beta-inc1
gamma-llc0

Reads your database

Point Lynq at a MySQL table. Every row where activate is true becomes a managed node — no pipelines, no glue code.

Server-Side Apply

Resources are applied with SSA under the lynq field manager — Lynq owns exactly its fields and never clobbers the rest.

Dependency-aware ordering

Declare dependIds and Lynq builds a DAG, applying resources in topological order and waiting for readiness gates.

web-stack.yamlLynqForm
deployment:{{ .uid }}-app
service:{{ .uid }}-svc
ingress:{{ .uid }}-web
DeploymentServiceIngress

One template, every node

Write a LynqForm once. Your columns render into a full resource set per row — Deployments, Services, Ingresses, and more.

Every resource tracked

Each LynqNode reports ready, pending, failed, skipped, and conflicts — so you always know the real state, per row.

Lifecycle

Watch a Row Become a Running App

One database row, reconciled end to end — Lynq reads it, creates a LynqNode, applies the resources, and the app goes live.

How It Works

From Data to Resources in Seconds

Follow the full lifecycle — from a database row to running Kubernetes resources. Click any stage to jump.

sync
data
apply
Step 1 / 4

Connect Your Database

LynqHub polls your MySQL table at the configured syncInterval (default: 30 seconds). Any row where the activate column is truthy gets a corresponding LynqNode CR. Existing infrastructure keeps running if the database goes temporarily offline.

lynqhub.yamlyaml
apiVersion: operator.lynq.sh/v1
kind: LynqHub
metadata:
  name: my-hub
spec:
  source:
    type: mysql
    syncInterval: 1m
    mysql:
      host: mysql.default.svc
      port: 3306
      username: node_reader
      passwordRef:
        name: mysql-credentials
        key: password
      database: nodes
      table: node_configs
The Problem

Your Database Knows. Your Cluster Doesn't.

The moment a row changes, the cluster is out of date — until someone runs kubectl. Lynq closes that gap continuously: the cluster is always a reflection of the database.

Safety & Control

Policies That Protect Your Cluster

Every resource in a LynqForm carries three independent lifecycle policies. Fine-grained, per-resource control over what happens on conflict, on deactivation, and on re-reconcile — so automation never overwrites what it shouldn't.

conflictPolicyStuck
ServiceConflicted
acme-corp-svc
field-manager: helm

Halted — ownership conflict surfaced, nothing overwritten.

lynqform.yamlyaml
deletionPolicy: Delete
conflictPolicy: Stuck
deletionPolicyDelete
Deploymentbeta-inc-appremoved
PVCbeta-inc-dataremoved

Row deactivated — both resources removed from the cluster.

lynqform.yamlyaml
nameTemplate: "{{ .uid }}-data"
deletionPolicy: Delete
creationPolicyWhenNeeded
SecretReady
acme-corp-tls
reconciled every pass

Reconciled continuously — drift corrected on every pass.

lynqform.yamlyaml
nameTemplate: "{{ .uid }}-tls"
creationPolicy: WhenNeeded
Rollout safety

A big update, without the thundering herd

A template edit, a bulk update, or a large insert can touch — or create — nodes across the whole graph at once, and doing them all together would stampede your API server. maxSkew caps how many change at a time. Pick a trigger, drag maxSkew, and watch it roll through the topology.

maxSkew4
YAMLweb-stack.yaml editedevery node re-renders → all reconcile
updating 0 / 4 updated 0 / 36 pending 36

A single template edit reconciles every node — a thundering herd that can melt the control plane if it all happens at once. maxSkew rolls it through a few at a time while the rest keep serving the current version. Drag maxSkew ↑ for a faster rollout, ↓ for a gentler one.

Observe the Full Hub → Form → Node Graph

A web UI that shows live resource health, reconciliation events, and topology relationships — no kubectl required

localhost:8080/topology
Topology ViewHub → Form → Node hierarchy with live status
Resource HealthReady, pending, failed counts per node
Event StreamReconciliation events and error details per node
Quick Search⌘K to find any hub, form, or node instantly

Start Automating Infrastructure from Your Database

Requires Kubernetes and cert-manager. The quickstart provisions a full local environment — MySQL, Lynq, and sample resources — using automated setup scripts.