CSI Baremetal is Intel's open-source CSI driver for bare-metal Kubernetes clusters that provisions raw disks, drives, and Logical Volume Group (LVG) volumes directly from node storage. Unlike cloud-backed CSI drivers, CSI Baremetal manages physical hardware — it discovers drives, creates partitions, and allocates storage at the block device level. When any component of this stack fails, workloads lose access to storage with no cloud provider to absorb the failure.
In this tutorial you'll set up comprehensive uptime monitoring for CSI Baremetal using Vigilmon — free tier, no credit card required.
Why CSI Baremetal needs external monitoring
CSI Baremetal's multi-component architecture — controller, node, drive manager, scheduler extender — means there are more failure points than a typical cloud CSI driver:
- Drive manager loses a disk — a physical drive disconnects or the drive manager daemon fails to enumerate it; volumes provisioned on that drive become unavailable but the node pod may still report healthy
- Controller crash during LVG operation — the controller pod restarts during a Logical Volume Group resize or volume group create; the operation is orphaned and the AvailableCapacity object becomes stale, blocking future provisioning on that node
- Scheduler extender pod down — CSI Baremetal's scheduler extender filters node candidates for volume placement; if the extender is unreachable, the default Kubernetes scheduler ignores drive topology and pods may be scheduled to nodes without the required storage capacity
- Node agent DaemonSet evicted — a node agent pod is evicted under memory pressure; that node's drives become invisible to the cluster and all new PVC binds to drives on that node fail
- Drive health degraded — CSI Baremetal tracks drive SMART data; a degraded drive continues serving I/O while accumulating errors; without an external monitor surfacing the drive health endpoint, disk failures go unnoticed until data loss
External monitoring from multiple geographic regions catches failures spanning the physical drive layer, daemon processes, and Kubernetes API layer simultaneously.
What you'll need
- A Kubernetes cluster with CSI Baremetal installed (Helm or manifest, typically on bare-metal nodes)
- A free Vigilmon account (sign up takes 30 seconds)
Step 1: Expose CSI Baremetal health endpoints
Expose the controller health endpoint
The CSI Baremetal controller exposes a health probe on port 9999. Expose it via NodePort:
# csi-baremetal-controller-health-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: csi-baremetal-controller-health
namespace: kube-system
spec:
type: NodePort
selector:
app: csi-baremetal-controller
ports:
- name: healthz
port: 9999
targetPort: 9999
nodePort: 30999
protocol: TCP
Apply it:
kubectl apply -f csi-baremetal-controller-health-svc.yaml
Verify the health endpoint:
curl http://<node-ip>:30999/healthz
# ok
Expose the scheduler extender health endpoint
The CSI Baremetal scheduler extender is critical for correct drive topology-aware scheduling. It exposes a health endpoint on port 8889:
# csi-baremetal-scheduler-health-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: csi-baremetal-scheduler-health
namespace: kube-system
spec:
type: NodePort
selector:
app: csi-baremetal-se
ports:
- name: healthz
port: 8889
targetPort: 8889
nodePort: 30889
protocol: TCP
kubectl apply -f csi-baremetal-scheduler-health-svc.yaml
curl http://<node-ip>:30889/healthz
# ok
Expose the node agent health endpoint
The node agent DaemonSet manages per-node drive discovery and volume operations. Expose port 9999 on the node agent:
# csi-baremetal-node-health-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: csi-baremetal-node-health
namespace: kube-system
spec:
type: NodePort
selector:
app: csi-baremetal-node
ports:
- name: healthz
port: 9999
targetPort: 9999
nodePort: 30998
protocol: TCP
kubectl apply -f csi-baremetal-node-health-svc.yaml
curl http://<node-ip>:30998/healthz
# ok
Confirm all CSI Baremetal components are running:
kubectl get pods -n kube-system -l app.kubernetes.io/name=csi-baremetal
# Expect: controller, node DaemonSet pods, scheduler extender all Running
Step 2: Set up HTTP monitoring in Vigilmon
With health endpoints exposed, add CSI Baremetal to Vigilmon:
- Log in to vigilmon.online and go to Monitors → New Monitor
- Choose HTTP / HTTPS as the type
- Set the URL to
http://<node-ip>:30999/healthz - Set the check interval to 1 minute
- Under Expected response, set:
- Status code:
200 - Response body contains:
ok
- Status code:
- Save the monitor
- Repeat for
http://<node-ip>:30889/healthz(scheduler extender) - Repeat for
http://<node-ip>:30998/healthz(node agent)
The scheduler extender monitor is particularly important — its failure causes silent scheduling failures that are almost impossible to diagnose from kubectl describe pod output alone.
The multi-region consensus advantage
Vigilmon probes your endpoints from multiple geographic regions simultaneously. A single probe failure on a bare-metal cluster could reflect a network path issue rather than a component failure. Vigilmon's multi-region consensus requires multiple independent probes to agree before triggering an alert — accurate detection without false positives.
Step 3: Monitor your TCP layer
TCP monitoring provides the fastest possible detection of port-level failures and confirms that CSI Baremetal components are accepting connections independently of their HTTP health logic.
In Vigilmon:
- Go to Monitors → New Monitor
- Choose TCP Port
- Enter your node IP and port
30999(controller health) - Save the monitor
- Add a TCP monitor for port
30889(scheduler extender) - Add a TCP monitor for port
30998(node agent)
# Confirm all health ports are reachable
nc -zv <node-ip> 30999
nc -zv <node-ip> 30889
nc -zv <node-ip> 30998
Step 4: Configure alert channels
CSI Baremetal manages physical hardware. A failed controller during an LVG operation can leave storage in an inconsistent state. A failed scheduler extender causes new pods to be placed on nodes without sufficient physical storage. You need to know immediately.
Email alerts
- In Vigilmon, go to Alert Channels → Add Channel → Email
- Enter your on-call or infrastructure-team email address
- Assign the channel to your CSI Baremetal controller, scheduler extender, and node agent monitors
Webhook alerts (Slack, PagerDuty, etc.)
- Go to Alert Channels → Add Channel → Webhook
- Enter your webhook URL
- Assign the channel to your monitors
Example payload Vigilmon sends when a monitor goes down:
{
"monitor_name": "csi-baremetal-controller /healthz",
"status": "down",
"url": "http://203.0.113.50:30999/healthz",
"started_at": "2024-01-15T10:23:00Z",
"duration_seconds": 60
}
When you receive a CSI Baremetal alert, correlate it with the cluster:
# Check all CSI Baremetal pod statuses
kubectl get pods -n kube-system -l app.kubernetes.io/name=csi-baremetal -o wide
# Check controller logs for LVG or provisioning errors
kubectl logs -n kube-system deploy/csi-baremetal-controller --tail=50
# Check scheduler extender logs for filter/prioritize failures
kubectl logs -n kube-system deploy/csi-baremetal-se --tail=50
# Check node agent logs for drive discovery issues
kubectl logs -n kube-system daemonset/csi-baremetal-node --tail=50
# List all drives discovered by CSI Baremetal (custom resources)
kubectl get drives -A
# List available capacity across nodes
kubectl get availablecapacities -A
# List Logical Volume Groups
kubectl get logicalvolumegroups -A
# Check for PVCs stuck in Pending
kubectl get pvc -A | grep Pending
Step 5: Create a public status page
Bare-metal storage infrastructure is typically shared across multiple teams and workloads. A public status page lets operations, development, and DevOps teams check whether CSI Baremetal failures are the root cause of their workload issues.
- In Vigilmon, go to Status Pages → New Status Page
- Give it a name: "Storage Infrastructure — CSI Baremetal"
- Add your monitors: controller health, scheduler extender health, node agent health
- Group them: CSI Controller, Scheduler Extender, Node Agents
- Publish the page
Share the status page URL in your storage runbook and with teams that own bare-metal-backed workloads.
Putting it all together
Here's a summary of the monitors to create for a CSI Baremetal deployment:
| Monitor | Type | What it catches |
|---------|------|-----------------|
| http://<node-ip>:30999/healthz | HTTP | Controller health, crash loops, LVG operation failures |
| http://<node-ip>:30889/healthz | HTTP | Scheduler extender health — silent scheduling failures when down |
| http://<node-ip>:30998/healthz | HTTP | Node agent health, drive discovery failures |
| <node-ip>:30999 | TCP | Controller port reachability |
| <node-ip>:30889 | TCP | Scheduler extender port reachability |
| <node-ip>:30998 | TCP | Node agent port reachability |
Verify the full CSI Baremetal state in your cluster:
# List all CSI Baremetal components and their status
kubectl get pods -n kube-system -l app.kubernetes.io/name=csi-baremetal \
-o custom-columns='NAME:.metadata.name,READY:.status.containerStatuses[*].ready,STATUS:.status.phase,NODE:.spec.nodeName'
# Check drive health across all nodes
kubectl get drives -o custom-columns='NAME:.metadata.name,NODE:.spec.NodeId,STATUS:.spec.Status,HEALTH:.spec.Health,SIZE:.spec.Size'
# Check available storage capacity per node
kubectl get availablecapacities -o custom-columns='NAME:.metadata.name,NODE:.spec.NodeId,SIZE:.spec.Size,STORAGE_CLASS:.spec.StorageClass'
# Verify CSI driver registration
kubectl get csidriver baremetal-csi
# View volumes managed by CSI Baremetal
kubectl get volumes.storage.dell.com -A 2>/dev/null || kubectl get csibaremetal -A
What's next
- Drive health alerting — CSI Baremetal tracks SMART health data per drive; query
kubectl get drivesin a scheduled job and send alerts when drive health transitions toSUSPECTorBAD - AvailableCapacity monitoring — if available capacity across nodes drops below a threshold, new PVC binds fail; add a Vigilmon heartbeat monitor that fires when your capacity check job stops reporting
- Node agent per-node coverage — in large bare-metal clusters, add a separate HTTP monitor for each node's agent health endpoint to pinpoint which node's drives have become invisible
Get started free at vigilmon.online — no credit card, monitors start running in under a minute.