Kubernetes × Metabase

How to build Kubernetes dashboards in Metabase

Kubernetes is an open-source container orchestration system behind most modern infrastructure platforms, including OpenShift. Metabase is where you turn those operational signals into shared, trustworthy dashboards. This guide covers two complementary paths: a lightweight MCP + CLI route that pulls live data with the Kubernetes MCP Server and loads a CSV into Metabase with the Metabase CLI, and a durable pipeline route that syncs Kubernetes rollups into a database so you can build dashboards anyone can read.

Heads up: Metabase connects to databases and warehouses — it does not ship a native Kubernetes connector, and a BI warehouse is the wrong home for raw telemetry. Sync aggregates, entities, and metadata — incidents, error groups, rollups, deploys — and leave the event firehose in Kubernetes.

How do you connect Kubernetes to Metabase?

Most teams combine both routes: use MCP and CLI uploads for a fast first pass, then move recurring reliability reporting to a warehouse-backed model.

1 · MCP + CLI route (AI-assisted)

Live data in, quick analysis out

Pair the Kubernetes MCP Server with the Metabase CLI. Use MCP for live lookups, write a scoped result to CSV, then load it into Metabase as a ready-to-query table and model.

Best for
  • Quick lookups such as "show me utilization vs. requests by workload"
  • Loading a Kubernetes export into Metabase in seconds
  • Spot-checks and one-off analyses without a warehouse
Trade-offs
  • Great for exploration, not governed reliability reporting
  • Use read-only/scoped credentials wherever the MCP server supports them
  • CSV uploads are snapshots — refresh or move to the pipeline for history
2 · Pipeline route (warehouse-backed)

Durable dashboards with history

Sync Kubernetes rollups and metadata into a database or warehouse with a connector, custom pipeline, or API, then point Metabase at it.

Best for
  • Kubernetes reliability dashboards leaders depend on
  • Joining Kubernetes data with deploys, issues, support, or cost data
  • Long-run trends for utilization vs. requests by workload and restarts and crash loops
Trade-offs
  • You own the refresh schedule and the rollup grain
  • Sync aggregates and entities — not the raw event firehose
  • Metric definitions must be consistent across services and teams

What can you analyze from Kubernetes data in Metabase?

  • Utilization vs. requests by workload — built from workloads and pods and the related nodes, namespaces, events data your sync exposes.
  • Restarts and crash loops — built from workloads and pods and the related nodes, namespaces, events data your sync exposes.
  • Node capacity and headroom — built from workloads and pods and the related nodes, namespaces, events data your sync exposes.
  • Deployment health by namespace — built from workloads and pods and the related nodes, namespaces, events data your sync exposes.
  • Cost by namespace (with cost tooling) — built from workloads and pods and the related nodes, namespaces, events data your sync exposes.

Which Kubernetes dashboards should you build in Metabase?

For: Platform engineers

Utilization overview

Whether capacity matches what workloads actually use.

  • CPU and memory utilization vs. requests (bar)
  • Node or instance count by cluster (line)
  • Over- and under-provisioned workloads (table)
  • Headroom by cluster (number)
For: Eng leads, platform

Deploys and changes

Change volume and how often it fails.

  • Deployments per week (bar)
  • Failed deployments and rollbacks (line)
  • Deployment frequency by service (table)
  • Change failure rate (number + trend)
For: Platform, finance partners

Cost signals

Where spend concentrates and drifts.

  • Cost by service or namespace (bar)
  • Cost trend by month (line)
  • Idle or unattached resources (table)
  • Cost per request or per tenant where available (line)
For: SREs, service owners

Workload reliability

Where infrastructure instability shows up.

  • Container restarts and crash loops (table)
  • Failed jobs or tasks per week (bar)
  • Pending or unschedulable workloads (number)
  • Availability by service (line)

How do you use the Kubernetes MCP Server with the Metabase CLI?

Pair the Kubernetes MCP Server with the Metabase CLI for fast, hands-on analysis. MCP is useful for scoped lookups and summarized exports; the Metabase CLI's upload command loads CSV data into Metabase and creates a ready-to-query table and model.

Example workflow

  • Ask the MCP server for the current inventory of workloads and pods with utilization summaries.
  • Export the result as CSV, keeping stable IDs, services, environments, severities, and timestamps.
  • Run mb upload csv to load it into Metabase as a table and model, then build questions and dashboards on top.

Be honest about the limits

  • MCP lookups are excellent for exploration, not scheduled reporting.
  • A CSV upload is a snapshot; refresh it with mb upload replace or move to the pipeline for real history.
  • Daily snapshots are required for utilization, capacity, and cost trends.
  • mb upload csv needs an uploads database configured under Admin → Settings → Uploads.

How do you set up Kubernetes MCP and the Metabase CLI?

Kubernetes MCP Servercommunity

Transport
Local server (npx, binary, or Helm) over stdio or HTTP
Auth
Your kubeconfig (or in-cluster service account)
Best for
Live scoped lookup and export

Metabase CLIofficial

Install
npm install -g @metabase/cli
Auth
mb auth login
Load data
mb upload csv --file data.csv
Requires
An uploads database (Admin → Settings → Uploads)
MCPExample MCP client config
{
  "mcpServers": {
    "kubernetes": {
      "command": "npx",
      "args": ["-y", "kubernetes-mcp-server@latest"]
    }
  }
}

Supports OpenShift (Projects and Routes) natively. Run with --read-only for analysis so the assistant can't mutate cluster state.

TerminalLoad a Kubernetes CSV with the Metabase CLI
# Install the Metabase CLI
npm install -g @metabase/cli

# Log in (opens your browser; requires Metabase v62+)
mb auth login --url https://your-metabase.example.com

# Load a workloads-and-pods export — creates a table AND a model
mb upload csv --file kubernetes-workloads-and-pods.csv --collection root

# Refresh that same table later from a new export
mb upload replace <table-id> --file kubernetes-workloads-and-pods.csv

Can you generate a Kubernetes dashboard with AI?

Yes. Use the prompt below with any assistant that can run the Kubernetes MCP Server and the Metabase CLI. It works end to end: if Kubernetes tables already exist in Metabase it analyzes those; otherwise it pulls scoped, summarized data over MCP, loads it with mb upload csv, then builds the dashboard and caveats any metric that needs missing history.

Prompt for creating a Kubernetes Infrastructure Overview dashboard
Create a polished Metabase dashboard for Kubernetes infrastructure analytics.
Work end to end: get the data into Metabase if it isn't there yet, then build.

Goal: Help engineering and operations leaders understand utilization, deployment health, cost signals, and workload reliability from Kubernetes data.

Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for kubernetes tables and
  models). If durable Kubernetes data is already present — synced from a warehouse
  or uploaded earlier — use it and skip to Step 2.
- If nothing is there, pull a scoped, summarized export with the Kubernetes MCP Server:
  workloads and pods, plus nodes, namespaces, events.
  Prefer aggregated or rollup views over raw events. Write each result to a CSV,
  then load it with the Metabase CLI — run "mb upload csv --file <export>.csv" so
  each upload creates a table and a ready-to-query model. Use "mb upload replace
  <table-id> --file <export>.csv" to refresh an existing table instead of creating
  duplicates.

Step 2 — Inspect before querying:
Do not assume exact table or column names. Inspect available fields, services,
environments, timestamps, and whether rollups or history exist before creating
duration or trend cards.

Important:
- Build on whatever data is present; don't claim Metabase connects natively to
  Kubernetes — it reads a database or CLI-uploaded tables.
- Never try to load the raw event firehose into Metabase; use rollups, entity
  tables, and incident- or group-grain data.
- Only compute durations (MTTA, MTTR, time-to-resolve) when the required
  timestamps exist.
- Exclude test, staging, or muted objects from headline reliability cards, and
  segment by environment where the field exists.
- A single CSV is a point-in-time snapshot: only build trend cards if there is a
  usable date column or multiple periods have been uploaded.

Dashboard title: Kubernetes Infrastructure Overview

Sections:
1. Executive summary: Clusters/services tracked; Avg utilization; Deploys last
   30 days; Change failure rate; Cost last 30 days if synced.
2. Utilization: CPU/memory usage vs requests by workload; headroom by cluster.
3. Changes: Deployments and rollbacks by week; failure rate by service.
4. Cost: Spend by service/namespace by month; idle resources.
5. Reliability: Restarts, failed jobs, pending workloads, availability.

Filters: Date range, Service, Environment, Severity, Team, Status.

Output: Build the dashboard if you have permission; otherwise provide the exact
questions, SQL, model definitions, and layout. Include caveats for any metric
that cannot be calculated from the available data.

How do you sync Kubernetes data into a database or warehouse?

For dashboards that need history and reliability, land Kubernetes rollups and metadata in a database first, then connect Metabase to that database.

Connector options

  • Managed ETL — use a connector when one covers the objects you need.
  • Custom pipeline — use the Kubernetes API for control over rollup grain, fields, and refresh cadence.
  • MCP + CSV — use this for quick exploration and one-off slices.

No managed connector exists — export inventory and utilization with kube-state-metrics and Prometheus, or script the Kubernetes API, and land daily snapshots in your warehouse.

Notes

  • Decide the rollup grain first (hourly or daily per service/environment) — it drives warehouse cost and every trend card.
  • Land raw entity tables first, then build clean Metabase models on top.
  • Normalize cluster, workload, environment, capacity, usage, and cost-allocation fields.

How should you model Kubernetes data in Metabase?

Core tables

TableGrainKey columns
resource_snapshotsone row per workload per dayworkload_name, namespace, cluster_name, snapshot_date, cpu_requested_cores, cpu_used_cores, memory_requested_bytes, memory_used_bytes, restarts
k8s_nodesone row per node per daynode_name, cluster_name, snapshot_date, cpu_capacity, cpu_allocatable, memory_capacity, condition
k8s_eventsone row per eventuid, namespace, involved_object, reason, type, count, last_seen_at

Modeling advice

  • Build a clean resource_snapshots model with common columns across tools, so multi-source dashboards don't fork definitions.
  • Separate entity tables (services, monitors, policies) from time-series rollups and event-grain tables.
  • Exclude test, staging, and muted objects from headline reliability metrics; keep environment as an explicit column.
  • Use stable IDs for service, team, and incident joins; display names change.

Which Kubernetes metrics should you track in Metabase?

MetricDefinitionNotes
Resource utilizationUsed capacity divided by requested or provisioned capacity.Low utilization is a cost signal, not a badge.
Service availabilitySuccessful requests or minutes divided by total, per service.Measure at the edge users actually hit.
Deployment frequencyProduction deployments per period — a DORA throughput metric.Count deploys, not merges.
Change failure rateDeployments causing failures divided by all deployments.Pair with MTTR for the stability picture.

What SQL powers Kubernetes dashboards in Metabase?

These assume a cleaned analytical model in a warehouse (PostgreSQL dialect). Adjust table and column names to match your pipeline.

Utilization vs. requests by workloadPostgreSQL

Over- and under-provisioning from daily snapshots.

SELECT
  workload_name,
  ROUND(AVG(cpu_used_cores / NULLIF(cpu_requested_cores, 0)) * 100, 1)
    AS avg_cpu_utilization_pct,
  ROUND(AVG(memory_used_bytes / NULLIF(memory_requested_bytes, 0)) * 100, 1)
    AS avg_memory_utilization_pct
FROM resource_snapshots
WHERE snapshot_date >= CURRENT_DATE - INTERVAL '14 days'
GROUP BY workload_name
ORDER BY avg_cpu_utilization_pct ASC;
Deployments and change failure rate by weekPostgreSQL

Change volume and stability together.

SELECT
  date_trunc('week', deployed_at) AS week,
  COUNT(*) AS deployments,
  COUNT(*) FILTER (WHERE status IN ('failed', 'rolled_back')) AS failed,
  ROUND(
    100.0 * COUNT(*) FILTER (WHERE status IN ('failed', 'rolled_back'))
    / NULLIF(COUNT(*), 0), 1
  ) AS change_failure_rate
FROM deployments
WHERE environment = 'production'
GROUP BY 1
ORDER BY 1;
Cost by service by monthPostgreSQL

Spend concentration from cost-allocation data.

SELECT
  date_trunc('month', usage_date) AS month,
  service_name,
  ROUND(SUM(cost_usd), 2) AS cost_usd
FROM cost_allocations
GROUP BY 1, 2
ORDER BY 1, cost_usd DESC;

What are common mistakes when analyzing Kubernetes in Metabase?

Syncing the raw event firehose into the warehouse.→ Land rollups, entities, and incident- or group-grain tables. Raw telemetry belongs in Kubernetes; the warehouse is for trends and joins.
Treating utilization as a performance score.→ Very high utilization is a reliability risk, very low is a cost signal. Judge against explicit capacity targets.
Ignoring allocation vs. usage in cost views.→ Show requested vs. actually used capacity side by side — the gap is usually where the money is.
Building dashboards from live MCP lookups only.→ MCP is useful for exploration; durable dashboards need a database-backed model with history.

Related analytics

Related dashboards

Related integrations

FAQ

Does Metabase connect natively to Kubernetes?
No. Metabase reads databases and warehouses. Sync Kubernetes rollups and metadata into a database first, or upload a CSV with the Metabase CLI, then build Metabase models and dashboards on top.
Should Metabase replace Kubernetes?
No — they answer different questions. Kubernetes is built for real-time triage and deep debugging. Metabase is where you build governed, shareable reporting on top of the same signals, and join them with deploys, issues, support, and business data.
Should I sync raw infrastructure metrics streams?
No. Land daily snapshots of inventory, utilization summaries, deployment events, and cost allocations. High-resolution metrics belong in your monitoring stack; the warehouse is for trends, capacity planning, and cost reporting.
Can Metabase show live Kubernetes state?
Dashboards are as fresh as your sync cadence — hourly is common. For genuinely live state, use the MCP route for ad-hoc lookups, and keep the warehouse for history and trends.