TrilioVault for Kubernetes (TVK) is an application-aware backup and recovery platform that captures entire application state — persistent data, Kubernetes metadata, configurations, and custom resources — in a single atomic snapshot. TVK uses BackupPlan and Backup CRDs to define what gets protected and when, pushes snapshot data to S3, NFS, Azure Blob, or GCS targets, and runs a TVK manager deployment alongside a target browser and on-demand restore jobs. When any part of that pipeline fails silently — manager crash, unreachable target storage, hung controller — your backups stop without any Kubernetes-native alert reaching your team.
In this tutorial you'll set up comprehensive uptime monitoring for TrilioVault for Kubernetes using Vigilmon — free tier, no credit card required.
Why TrilioVault for Kubernetes needs external monitoring
TVK spans multiple components that must all be healthy for backups to complete. Kubernetes pod health checks only tell you a container is running, not that backup jobs are succeeding or that target storage is reachable:
- TVK manager pod crashes during backup — an in-progress
Backupresource is left in an intermediate state; no completion event is emitted and the data snapshot is incomplete on the target - Target storage becomes unreachable — if the S3 bucket, NFS export, or Azure container is unreachable, TVK logs an error internally but the
BackupPlancontroller does not surface a failure event to the namespace, causing silent backup gaps - BackupPlan controller hangs with no event — the TVK operator can enter a reconciliation loop after a CRD version skew or webhook timeout;
BackupPlanresources appear present but no newBackupobjects are created - Cross-namespace restore fails when restore job can't reach target — a restore job spawned in a different namespace may lack network policy permissions to reach the backup target, causing the restore to fail after the manager has already handed off control
- TVK webhook server down blocks new BackupPlan creation — TVK registers a validating webhook; if the webhook server is unavailable,
kubectl applyof anyBackupPlanorBackupmanifest is rejected by the API server with a webhook timeout error
External monitoring from multiple geographic regions catches failures spanning the TVK control plane, webhook server, and backup target storage simultaneously.
What you'll need
- A Kubernetes cluster with TrilioVault for Kubernetes installed (via Helm or OLM operator)
- An S3, NFS, Azure Blob, or GCS backup target configured and accessible from the cluster
- A free Vigilmon account (sign up takes 30 seconds)
Step 1: Expose TVK health endpoints
Expose the TVK manager health endpoint
The TVK manager deployment exposes a health endpoint on port 8080. Expose it via NodePort so Vigilmon can reach it from outside the cluster:
# tvk-manager-health-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: tvk-manager-health
namespace: tvk
spec:
type: NodePort
selector:
app: k8s-triliovault-backend
ports:
- name: healthz
port: 8080
targetPort: 8080
nodePort: 30808
protocol: TCP
Apply it:
kubectl apply -f tvk-manager-health-svc.yaml
Verify the health endpoint responds:
curl http://<node-ip>:30808/healthz
# {"status":"ok"}
Expose the TVK webhook server
The TVK admission webhook runs on port 9443. Expose it via NodePort to monitor its TCP reachability:
# tvk-webhook-health-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: tvk-webhook-health
namespace: tvk
spec:
type: NodePort
selector:
app: k8s-triliovault-backend
ports:
- name: webhook
port: 9443
targetPort: 9443
nodePort: 30943
protocol: TCP
kubectl apply -f tvk-webhook-health-svc.yaml
Expose the TVK target browser
The target browser service lets you verify connectivity to configured backup targets. Expose it on port 8081:
# tvk-target-browser-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: tvk-target-browser-external
namespace: tvk
spec:
type: NodePort
selector:
app: k8s-triliovault-target-browser
ports:
- name: http
port: 8081
targetPort: 8081
nodePort: 30881
protocol: TCP
kubectl apply -f tvk-target-browser-svc.yaml
curl http://<node-ip>:30881/healthz
# {"status":"ok"}
Confirm all TVK pods are running before proceeding:
kubectl get pods -n tvk
# NAME READY STATUS RESTARTS AGE
# k8s-triliovault-backend-... 1/1 Running 0 2d
# k8s-triliovault-target-browser-... 1/1 Running 0 2d
# k8s-triliovault-admission-webhook-... 1/1 Running 0 2d
Step 2: Set up HTTP monitoring in Vigilmon
With health endpoints exposed, add TVK 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>:30808/healthz - Set the check interval to 1 minute
- Under Expected response, set:
- Status code:
200 - Response body contains:
ok
- Status code:
- Save the monitor as "TVK Manager /healthz"
- Repeat steps 1–6 for
http://<node-ip>:30881/healthz(target browser), saving it as "TVK Target Browser /healthz"
The multi-region consensus advantage
Vigilmon probes your endpoints from multiple geographic regions simultaneously. Because TVK health depends on both the Kubernetes control plane and external backup target storage, a single probe failure could reflect a transient network path issue rather than a real TVK outage. Vigilmon's multi-region consensus requires multiple independent probes to agree before triggering an alert — giving you accurate detection without false positives during transient blips.
Step 3: Monitor your TCP layer
TCP monitoring catches TVK component failures and backup target reachability problems before they show up as backup failures or HTTP errors.
In Vigilmon:
- Go to Monitors → New Monitor
- Choose TCP Port
- Enter your node IP and port
30808(TVK manager health) - Save the monitor as "TVK Manager TCP"
- Add a TCP monitor for port
30943(TVK webhook server) — this is your early warning thatBackupPlancreation will be rejected by the API server - Add a TCP monitor for
<s3-endpoint-hostname>on port443(HTTPS to your S3/Azure/GCS backup target) - If using NFS as a backup target, add a TCP monitor for
<nfs-server-ip>on port2049
Verify target reachability from within the cluster before setting up Vigilmon monitors:
# Test S3 target reachability from a pod
kubectl run tvk-debug --image=curlimages/curl --rm -it --restart=Never -- \
curl -o /dev/null -sw "%{http_code}" https://<s3-bucket>.s3.<region>.amazonaws.com
# Test NFS target reachability from a node
nc -zv <nfs-server-ip> 2049
# Connection to <nfs-server-ip> 2049 port [tcp/nfs] succeeded!
# Check TVK webhook registration is active
kubectl get validatingwebhookconfigurations | grep triliovault
Step 4: Configure alert channels
A crashed TVK manager leaves backup jobs orphaned with no completion event. An unreachable backup target silently skips every scheduled backup. You need to know immediately.
Email alerts
- In Vigilmon, go to Alert Channels → Add Channel → Email
- Enter your on-call or backup-team email address
- Assign the channel to your TVK manager, webhook, and target storage monitors
Webhook alerts (Slack, PagerDuty, etc.)
- Go to Alert Channels → Add Channel → Webhook
- Enter your webhook URL (Slack incoming webhook, PagerDuty Events API, etc.)
- Assign the channel to your monitors
Example payload Vigilmon sends when a monitor goes down:
{
"monitor_name": "TVK Manager /healthz",
"status": "down",
"url": "http://203.0.113.50:30808/healthz",
"started_at": "2024-01-15T10:23:00Z",
"duration_seconds": 60
}
When you receive a TVK alert, correlate it with the cluster:
# Check TVK manager and related pods
kubectl get pods -n tvk -o wide
# Inspect TVK manager logs for backup or target errors
kubectl logs -n tvk deploy/k8s-triliovault-backend --tail=50
# Check all BackupPlan resources and their last reconcile time
kubectl get backupplan -A
# Check Backup resources for failed or stalled jobs
kubectl get backup -A -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name,STATUS:.status.status,STARTED:.status.startTimestamp'
# Look for restore jobs that may be stuck
kubectl get restore -A
# Verify the TVK webhook is functioning (test with a dry-run)
kubectl apply --dry-run=server -f <your-backupplan.yaml>
Step 5: Create a public status page
Backup infrastructure health is relevant to multiple teams — storage, platform, and application owners. A public status page lets everyone verify that TVK and its targets are operational without needing kubectl access.
- In Vigilmon, go to Status Pages → New Status Page
- Give it a name: "TrilioVault Backup Infrastructure"
- Add your monitors: TVK manager health, TVK webhook TCP, target browser health, S3 target TCP, NFS target TCP
- Group them: TVK Manager, TVK Webhook, Backup Target Storage
- Publish the page
Share the status page URL in your runbook, with application teams whose data is protected by TVK, and with anyone who needs visibility into backup health without cluster access.
Putting it all together
Here's a summary of the monitors to create for a TrilioVault for Kubernetes deployment:
| Monitor | Type | What it catches |
|---------|------|-----------------|
| http://<node-ip>:30808/healthz | HTTP | TVK manager health, crash loops, OOMKill during backup |
| http://<node-ip>:30881/healthz | HTTP | Target browser health, target connectivity validation |
| <node-ip>:30943 | TCP | TVK webhook server reachability — catches BackupPlan creation failures |
| <s3-endpoint>:443 | TCP | S3/Azure/GCS backup target reachability — silent backup failures |
| <nfs-server-ip>:2049 | TCP | NFS backup target reachability — NFS mount failures on backup jobs |
Verify the full TVK state in your cluster:
# List all TVK CRDs to confirm installation is complete
kubectl get crds | grep trilio
# Summarize BackupPlan status across all namespaces
kubectl get backupplan -A -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name,TARGET:.spec.backupConfig.target.name,SCHEDULE:.spec.backupConfig.scheduleType'
# Check the most recent Backup objects cluster-wide
kubectl get backup -A --sort-by='.metadata.creationTimestamp' | tail -20
# Confirm TVK target resources are healthy
kubectl get target -A
# Inspect the TVK operator logs for reconciliation errors
kubectl logs -n tvk -l app=k8s-triliovault-backend --tail=100 | grep -i error
What's next
- Multi-target coverage — if you have multiple
Targetresources (one S3, one NFS, one Azure Blob), add a TCP monitor for each target endpoint so you know exactly which backend is degraded when a backup fails - Heartbeat monitors on backup completion — configure your
BackupPlanpost-hook or a CronJob wrapper to ping a Vigilmon heartbeat URL after each successful backup; if the heartbeat stops arriving, Vigilmon alerts you that scheduled backups are no longer completing - Restore test job monitoring — add HTTP monitors for restore validation jobs that run on a schedule; external monitoring confirms that restore jobs are completing successfully, not just that the TVK manager pod is alive
Get started free at vigilmon.online — no credit card, monitors start running in under a minute.