Deploy Tabsdata on k-minus
k-minus is Tabsdata's default deployment provider. It runs Kubernetes-style pods as native processes in a Python environment instead of Docker containers.
Use Quickstart to deploy with the default configuration. Use the individual lifecycle commands when you want to edit the configuration before creating and starting the Server.
Quickstart a Server
tdkserver quickstart bundles initializing, creating, and starting a Tabsdata server into a single command, using a default configuration for compute and storage.
Start the Tabsdata server
tdkserver quickstart initializes and deploys a Tabsdata Instance. The command should take around 30 seconds to fully execute.
- Anthropic
- OpenAI
tdkserver quickstart --anthropic-key $ANTHROPIC_KEY
tdkserver quickstart --openai-key $OPENAI_KEY
If you plan to use the MySQL or PostgreSQL CDC connectors, they need database
drivers that Tabsdata cannot redistribute. Pass a requirements file with
--reqs-td, as described in Installing Third-Party Database
Drivers. Adding them later
means re-running the installation.
Check Tabsdata server status
View all your Tabsdata Instances
tdkserver list
Instances ┌──────────┬──────────────────────────────────────────────────┬──────────┬─────────┬─────────┬─────────┬─────────────────┬───────────────┬───────────────────────┐ │ Name │ Folder │ Provider │ Version │ State │ Status │ API Server Port │ Database Port │ API Server URL │ ├──────────┼──────────────────────────────────────────────────┼──────────┼─────────┼─────────┼─────────┼─────────────────┼───────────────┼───────────────────────┤ │ tabsdata │ ~/.tabsdata/instances/tabsdata │ kminus │ 2.0.2 │ created │ Running │ 2457 │ 2460 │ http://localhost:2457 │ └──────────┴──────────────────────────────────────────────────┴──────────┴─────────┴─────────┴─────────┴─────────────────┴───────────────┴───────────────────────┘
View the status of the Tabsdata Instance you just deployed.
tdkserver status
Deployments ┌───────────────┬─────────┬───────┬─────┐ │ Name │ Status │ Ready │ Age │ ├───────────────┼─────────┼───────┼─────┤ │ srv-aiagent │ Running │ 1/1 │ 15s │ │ srv-apiserver │ Running │ 1/1 │ 15s │ │ srv-database │ Running │ 1/1 │ 24s │ └───────────────┴─────────┴───────┴─────┘ Pods ┌────────────────────────────────┬─────────┬───────┬─────┐ │ Name │ Status │ Ready │ Age │ ├────────────────────────────────┼─────────┼───────┼─────┤ │ srv-aiagent-7476c88484-4klx8 │ Running │ 2/2 │ 15s │ │ srv-apiserver-56bbbb559d-8cnxl │ Running │ 1/1 │ 15s │ │ srv-database-fd4f8f85-dsxcj │ Running │ 1/1 │ 24s │ └────────────────────────────────┴─────────┴───────┴─────┘ CronJobs ┌──────────────────┬─────────┬─────────────┬─────────────────┬─────┐ │ Name │ Status │ Expression │ Explanation │ Age │ ├──────────────────┼─────────┼─────────────┼─────────────────┼─────┤ │ srv-aiembeddings │ Running │ */5 * * * * │ Every 5 minutes │ 6s │ │ srv-aimetadata │ Running │ */5 * * * * │ Every 5 minutes │ 6s │ └──────────────────┴─────────┴─────────────┴─────────────────┴─────┘ Jobs ┌────────────────┬──────────┬─────────────┬─────┐ │ Name │ Status │ Completions │ Age │ ├────────────────┼──────────┼─────────────┼─────┤ │ ini-inspector │ Complete │ 1/1 │ 16s │ │ ini-venvloader │ Complete │ 1/1 │ 17s │ └────────────────┴──────────┴─────────────┴─────┘
tdkserver commands usually require an --instance flag that specifies the specific instance you want to interact with. If no --instance flag is passed, Tabsdata defaults the instance name to tabsdata
Log in
tdk login --server localhost --user admin --password tabsdata
Or access the UI at http://localhost:2457/login
Initialize a Server
tdkserver init produces an editable config folder for a Tabsdata instance within ~/.tabsdata, pre-filled with default values.
Initialize an instance
tdkserver init --instance myinstance --provider kminus
About to initialize tabsdata instance: - instance.....: myinstance - provider.....: kminus - log level....: debug (default) Proceed with the initialization? [y/yes/n/no]: y ▶ Creating tabsdata instance folder ✔ Created tabsdata instance folder at ~/.tabsdata/instances/myinstance (0s) ▶ Initializing tabsdata templates ✔ Initialized tabsdata templates in ~/.tabsdata/instances/myinstance/init/input (0s) ▶ Writing tabsdata instance settings ✔ Wrote tabsdata instance settings (0s) Initialized tabsdata instance 'myinstance'. - state........: initialized - version......: 2.0.0 - log level....: debug - provider.....: kminus - instance name: myinstance - kubeconfig...: ~/.tabsdata/instances/myinstance/cluster/config/kubeconfig.yaml - namespace....: default ╭─────────────────────────────────────────────────────────────────────╮ │ Inspect and edit the config in the instance's init folder, then run │ │ 'tdkserver create --instance myinstance' to create the instance. │ ╰─────────────────────────────────────────────────────────────────────╯
The config folder is written to ~/.tabsdata/instances/myinstance/.
The default configuration is what is used by tdkserver quickstart which bundles initializing, creating, and starting a server
Edit the config files the command produced, if you need to change anything.
Create a Server
After initializing a server, tdkserver create builds an instance from the config folder that tdkserver init produced.
tdkserver create builds the aiagent pod, so the LLM key has to be in the environment
before running it, not before tdkserver init:
- Anthropic
- OpenAI
export ANTHROPIC_KEY="sk-ant-..."
export OPENAI_KEY="sk-..."
tdkserver create --instance myinstance
A server's name is unique and is used internally for identification. The name provided to --instance is used to find the config folder created during initialization.
tdkserver list
Instances ┌──────────┬──────────────────────────────────────────────────┬──────────┬─────────┬─────────┬─────────┬─────────────────┬───────────────┬───────────────────────┐ │ Name │ Folder │ Provider │ Version │ State │ Status │ API Server Port │ Database Port │ API Server URL │ ├──────────┼──────────────────────────────────────────────────┼──────────┼─────────┼─────────┼─────────┼─────────────────┼───────────────┼───────────────────────┤ │ tabsdata │ ~/.tabsdata/instances/tabsdata │ kminus │ 2.0.2 │ created │ Stopped │ 2457 │ 2460 │ http://localhost:2457 │ └──────────┴──────────────────────────────────────────────────┴──────────┴─────────┴─────────┴─────────┴─────────────────┴───────────────┴───────────────────────┘
The instance appears with its name and state. It is not running yet.
Ports
Every service in the instance takes a port, assigned sequentially from a single
base value. --port sets that base, defaulting to 2457:
tdkserver create --instance myinstance --port 3000
Two instances on one machine need base ports far enough apart that their ranges do not overlap.
The instance keeps its configuration across stops and starts, so creating it is a one-time step.
See tdkserver create for the full option list.
Start a Server
tdkserver start brings up the services of an instance that
tdkserver create already built. Until the instance is running,
tdk has nothing to connect to.
tdkserver start --instance myinstance
Stop a Server
tdkserver stop shuts down a running instance's services and leaves everything
else in place. The instance stays registered, its configuration is untouched, and
the tables and function code it holds survive, so a later
start picks up where the stop left off.
tdkserver stop --instance myinstance
The command prints the values it resolved and waits for confirmation. Pass --yes
to skip the prompt.
tdkserver status --instance myinstance
Running functions
Stopping the server stops its workers with it, so a function run in flight does not finish. Nothing partial is committed: a run only commits when every function in its execution plan succeeds, so an interrupted run leaves the tables at the version they held beforehand. Check for active work before stopping:
tdk fnrun list --status running
Picking up a configuration change
A configuration edit reaches a running instance through a restart rather than a stop:
tdkserver restart --instance myinstance
See tdkserver stop for the full option list.
Delete a Server
To permanently remove the instance, follow Delete a Server.