SETUP INSTRUCTIONS
1. Configure Kubeconfig
- Open the "Kubeconfig Setup" node
- Paste your entire kubeconfig file content into the
kubeconfigContent
variable
- Set your target namespace in the
namespace
variable (default: 'production')
Example kubeconfig format:
apiVersion: v1
kind: Config
clusters:
- cluster:
certificate-authority-data: LS0tLS1CRUd...
server: https://your-cluster.example.com:6443
name: your-cluster
contexts:
- context:
cluster: your-cluster
user: your-user
name: your-context
current-context: your-context
users:
- name: your-user
user:
token: eyJhbGciOiJSUzI1...
2. Telegram Configuration
- Create a Telegram bot via @BotFather
- Get your bot token and add it as a credential in n8n (Telegram API)
- Find your chat ID:
- Message your bot
- Visit:
https://api.telegram.org/bot<YourBotToken>/getUpdates
- Look for
"chat":{"id":...}
- Open the "Send Telegram Alert" node
- Replace
YOUR_TELEGRAM_CHAT_ID
with your actual chat ID
- Select your Telegram API credential
3. Schedule Configuration
- Open the "Schedule Trigger" node
- Default: runs every 1 minute
- Adjust the interval based on your monitoring needs:
- Every 5 minutes: Change
field
to minutes
and set minutesInterval
to 5
- Every hour: Change
field
to hours
and set hoursInterval
to 1
- Cron expression: Use custom cron schedule
4. kubectl Installation
- The workflow automatically downloads kubectl (v1.34.0) during execution
- No pre-installation required on the n8n host
- kubectl is downloaded and used temporarily for each execution
HOW IT WORKS
Workflow Steps
-
Schedule Trigger
- Runs automatically based on configured interval
- Initiates the monitoring cycle
-
Kubeconfig Setup
- Loads the kubeconfig and namespace configuration
- Passes credentials to kubectl commands
-
Parallel Data Collection
- Get Pods: Fetches all pods from the specified namespace
- Get Deployments: Fetches all deployments from the specified namespace
- Both commands run in parallel for efficiency
-
Process & Generate Report
- Parses pod and deployment data
- Groups pods by their owner (Deployment, DaemonSet, StatefulSet, or Node)
- Calculates readiness statistics for each workload
- Detects alerts: workloads with 0 ready pods
- Generates a comprehensive Markdown report including:
- Deployments with replica counts and pod details
- Other workloads (DaemonSets, StatefulSets, Static Pods)
- Standalone pods (if any)
- Pod-level details: status, node, restart count
-
Has Alerts?
- Checks if any workloads have 0 ready pods
- Routes to appropriate action
-
Send Telegram Alert (if alerts exist)
- Sends formatted alert message to Telegram
- Includes:
- Namespace information
- List of problematic workloads
- Full status report
-
Save Report
- Saves the Markdown report to a file
- Filename format:
k8s-report-YYYY-MM-DD-HHmmss.md
- Always executes, regardless of alert status
Security Features
- Temporary kubectl: Downloaded and used only during execution
- Temporary kubeconfig: Written to
/tmp/kubeconfig-<random>.yaml
- Automatic cleanup: Kubeconfig file is deleted after each kubectl command
- No persistent credentials: Nothing stored on disk between executions
Alert Logic
Alerts are triggered when any workload has zero ready pods:
- Deployments with
readyReplicas < 1
- DaemonSets with
numberReady < 1
- StatefulSets with
readyReplicas < 1
- Static Pods (Node-owned) with no ready instances
Report Sections
- Deployments: All Deployment-managed pods (via ReplicaSets)
- Other Workloads: DaemonSets, StatefulSets, and Static Pods (kube-system components)
- Standalone Pods: Pods without recognized owners (rare)
- Alerts: Summary of workloads requiring attention
KEY FEATURES
- Automatic kubectl management - No pre-installation needed
- Multi-workload support - Deployments, DaemonSets, StatefulSets, Static Pods
- Smart pod grouping - Uses Kubernetes ownerReferences
- Conditional alerting - Only notifies when issues detected
- Detailed reporting - Pod-level status, node placement, restart counts
- Secure credential handling - Temporary files, automatic cleanup
- Markdown format - Easy to read and store
TROUBLESHOOTING
Issue: "Cannot read properties of undefined"
- Ensure both "Get Pods" and "Get Deployments" nodes execute successfully
- Check that kubectl can access your cluster with the provided kubeconfig
Issue: No alerts when there should be
- Verify the namespace contains deployments or workloads
- Check that pods are actually not ready (use
kubectl get pods -n <namespace>
)
Issue: Telegram message not sent
- Verify Telegram API credential is configured correctly
- Confirm chat ID is correct and the bot has permission to message you
- Check that the bot was started (send
/start
to the bot)
Issue: kubectl download fails
- Check internet connectivity from n8n host
- Verify access to dl.k8s.io domain
- Consider pre-installing kubectl on the host and removing the download commands
CUSTOMIZATION
Change Alert Threshold
Edit the Process & Generate Report
node to change when alerts trigger:
// Change from "< 1" to your desired threshold
if (readyReplicas < 2) { // Alert if less than 2 ready pods
alerts.push({...});
}
Monitor Multiple Namespaces
- Duplicate the workflow for each namespace
- Or modify "Kubeconfig Setup" to loop through multiple namespaces
Custom Report Format
Edit the markdown generation in Process & Generate Report
node to customize:
- Section order
- Information displayed
- Formatting style
Additional Notification Channels
Add nodes after "Has Alerts?" to send notifications via:
- Email (SMTP node)
- Slack (Slack node)
- Discord (Discord node)
- Webhook (HTTP Request node)