Reads your database
Point Lynq at a MySQL table. Every row where activate is true becomes a managed node — no pipelines, no glue code.
Lynq turns database records into Kubernetes resources. Automatically.
One database row in, a full set of reconciled Kubernetes resources out — with the controls to keep it safe.
Point Lynq at a MySQL table. Every row where activate is true becomes a managed node — no pipelines, no glue code.
Resources are applied with SSA under the lynq field manager — Lynq owns exactly its fields and never clobbers the rest.
Declare dependIds and Lynq builds a DAG, applying resources in topological order and waiting for readiness gates.
Write a LynqForm once. Your columns render into a full resource set per row — Deployments, Services, Ingresses, and more.
Each LynqNode reports ready, pending, failed, skipped, and conflicts — so you always know the real state, per row.
One database row, reconciled end to end — Lynq reads it, creates a LynqNode, applies the resources, and the app goes live.
Follow the full lifecycle — from a database row to running Kubernetes resources. Click any stage to jump.
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.
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_configsThe 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.
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.
Halted — ownership conflict surfaced, nothing overwritten.
deletionPolicy: Delete
conflictPolicy: StuckRow deactivated — both resources removed from the cluster.
nameTemplate: "{{ .uid }}-data"
deletionPolicy: DeleteReconciled continuously — drift corrected on every pass.
nameTemplate: "{{ .uid }}-tls"
creationPolicy: WhenNeededA 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.
web-stack.yaml editedevery node re-renders → all reconcileA 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.
A web UI that shows live resource health, reconciliation events, and topology relationships — no kubectl required
Insights on Infrastructure as Data, Kubernetes operations, and Lynq updates
Thoughts on delegating business logic to the infrastructure layer, through the lens of Uber embedding Rate Limiting into their service mesh
Read article →The era of AI Agents autonomously managing infrastructure is coming. But do we have an answer to the question, 'When AI decides, who executes?'
Read article →Lynq Dashboard is now available. A web UI to visualize Hub-Form-Node relationships and quickly identify problematic resources.
Read article →Requires Kubernetes and cert-manager. The quickstart provisions a full local environment — MySQL, Lynq, and sample resources — using automated setup scripts.