AppStatus Documentation Hub for Production Operations

Docs > Getting Started > Getting Started with Kubernetes

Getting Started with Kubernetes Monitoring

Overview

This guide introduces AppStatus Kubernetes and covers:

  • Deploy AppStatus Agent as DaemonSet for cluster-wide monitoring
  • Track pods, nodes, deployments, and services in real-time
  • Monitor CPU, memory, and storage resource utilization
  • Alert on pod restarts, node issues, and deployment failures
  • Namespace and label-based filtering for organized monitoring
  • Integration with Kubernetes API for comprehensive visibility

What are AppStatus Kubernetes?

Kubernetes monitoring provides comprehensive visibility into your container orchestration platform. The AppStatus Agent deployed as a DaemonSet collects metrics from all nodes, pods, and services in your cluster, streaming real-time data to AppStatus for analysis and alerting.

Monitor cluster health, pod status, node resource utilization, and deployment metrics with intelligent alerting. Track pod restarts, node capacity, and service availability to ensure your Kubernetes workloads are running optimally.

Key capabilities:

  • DaemonSet deployment for automatic node coverage
  • Pod and node status monitoring with health checks
  • CPU, memory, and storage resource tracking
  • Deployment and replica set monitoring
  • Namespace and label-based filtering
  • Alert on pod restarts and node issues
  • Integration with Kubernetes API for comprehensive data
  • Real-time metrics streaming with minimal overhead

Service Workflows

Each workflow maps to real AppStatus features and API endpoints used in the main app.

Agent Deployment

Deploy the AppStatus Agent as a DaemonSet to monitor all nodes in your Kubernetes cluster.

  1. Create a namespace for monitoring (e.g., monitoring).
  2. Create a ConfigMap with agent configuration.
  3. Create a Secret with workspace API key.
  4. Deploy the DaemonSet with proper RBAC permissions.
  5. Verify pods are running on all nodes.

Troubleshooting

Agent pods not starting

Check RBAC permissions. Verify the ServiceAccount has proper ClusterRoleBinding. Review pod logs for connection errors to AppStatus endpoint.

No metrics appearing

Ensure the Agent is successfully connecting to AppStatus. Check the WORKSPACE_API_KEY is correct. Verify network connectivity from cluster to agent.appstatus.io.

High resource usage

Adjust collection intervals in agent configuration. Reduce the number of monitored namespaces. Consider resource limits on the Agent pods.

Missing pod data

Verify RBAC permissions include pods resource. Check if the Agent is running on all nodes. Review namespace filtering configuration.

Operational Guidance

  • Monitor pod restarts as early indicators of application issues.
  • Track node resource utilization for capacity planning.
  • Use labels and annotations for organized monitoring.
  • Set up alerts for critical namespace and deployment health.

Step-by-Step Setup

AppStatus monitors Kubernetes clusters using a small agent deployed as a DaemonSet — one pod on every node. The agent reads cluster state (nodes, pods, deployments, events, restart counts) through the Kubernetes API with read-only RBAC and streams it back to AppStatus. The Helm chart sets up everything for you — the namespace, the ServiceAccount, the ClusterRole, the Secret and the DaemonSet — in one command.

Before you start

  • A Kubernetes cluster (any flavour: EKS, GKE, AKS, kind, k3s)
  • kubectl and Helm 3 installed locally
  • cluster-admin (or equivalent) permission to create RBAC the first time
  1. 1

    Register the cluster in AppStatus

    Open Agents → + Add agent → Kubernetes. Enter a friendly cluster name (e.g. "prod-eu-west") and the cloud region. Click "Generate API key" — copy the key, it is only shown once.

    WhereSidebar → Agents → + Add agent → Kubernetes
  2. 2

    Copy the Helm install command

    The wizard generates the exact Helm command for your cluster, with the API key already filled in. Copy it to clipboard.

    WhereWizard → Helm install command → Copy
  3. 3

    Run the Helm command on a machine with cluster access

    Open a terminal where kubectl already points at the right cluster (kubectl config current-context shows which one). Paste and run the Helm command. It creates the namespace, RBAC, Secret and DaemonSet in one shot.

    WhereLocal terminal → paste Helm command → Enter
  4. 4

    Wait ~60 seconds for pods to start

    Run `kubectl -n appstatus get pods` — you should see one agent pod per node, all in Running state. If a pod is stuck in Pending or CrashLoopBackOff, see the troubleshooting section on this page.

    WhereLocal terminal → kubectl -n appstatus get pods
  5. 5

    Verify the cluster in AppStatus

    Back in the UI, refresh the Agents page. Your cluster appears with a green status dot, and the Kubernetes section in the sidebar now shows node count, pod count and namespace breakdown.

    WhereSidebar → Agents → your cluster → Kubernetes tab
  6. 6

    Set up Kubernetes-specific alerts

    Open Alerts → Rules and create a rule scoped to the cluster. Common conditions: pod restart rate > 3 in 5 min, node not ready > 2 min, deployment unavailable replicas > 0. Attach your usual on-call channels.

    WhereAlerts → Rules → + New rule → Scope: Kubernetes cluster
  7. 7

    (Optional) Limit to specific namespaces

    If you do not want cluster-wide read access — e.g. multi-tenant clusters where some namespaces should not be visible — re-install the chart with --set namespacesIncluded={namespace1,namespace2}. The agent then only watches those namespaces.

    WhereLocal terminal → helm upgrade with --set namespacesIncluded

Configuration Options

Every option you can set, what each choice means, and what to pick. Use this as a reference while you fill in the form.

Helm install options

These are passed via --set on the helm install command. Override only what you need.

FieldOptionsWhat it doesRecommended
global.apiKeyThe key from the wizardAuthenticates the agent with AppStatus.Always required — paste from the wizard.
global.clusterNameFree textDisplay name for this cluster in the AppStatus UI.Match your internal naming (e.g. prod-eu-west).
global.regionus-east-1, eu-west-1, etc.Used to group clusters by region in the dashboard.Match your cloud provider region.
global.lowDataModetrue / falseReduces telemetry frequency to save bandwidth and storage quota.false in production; true for cost-sensitive staging clusters.
pollIntervalSeconds30 / 60 / 120 / 300How often the agent polls the Kubernetes API for state.60s (default) — balances freshness and API load.
namespaceAny stringThe namespace the agent itself runs in."appstatus" (default) — easy to find.
namespacesIncludedList of namespacesIf set, the agent only watches these namespaces (instead of cluster-wide).Leave empty for full visibility; set for multi-tenant or compliance reasons.
resources.requestsCPU and memory requestsHow much CPU/memory the agent asks for. Defaults: 50m CPU, 64Mi RAM.Defaults are fine for clusters under 200 nodes; double for larger.

What the agent watches

FieldOptionsWhat it doesRecommended
NodesRead-onlyNode count, conditions (Ready/NotReady), CPU/memory pressure.Always on (cannot be disabled).
PodsRead-onlyPod state (Running/Pending/Failed/CrashLoopBackOff), restart counts.Always on.
DeploymentsRead-onlyDesired vs available replicas; unavailable count.Always on.
StatefulSetsRead-onlySame as deployments but for stateful workloads.Always on.
DaemonSetsRead-onlyDesired vs available DaemonSet pods per node.Always on.
EventsRead-onlyRecent cluster events — useful for noticing OOM kills, image pull failures, scheduling problems.Always on.
NamespacesRead-onlyList of namespaces and their resource counts.Always on.

Feature Reference

Every feature, where to find it in the app, and what it does. Use this when you know what you want to do but not where it lives.

FeatureWhere in appDescription
Register clusterSidebar → Agents → + Add agent → KubernetesGenerates a cluster-scoped API key.
Helm installWizard → Helm install commandOne command installs namespace, RBAC, ConfigMap, Secret, DaemonSet.
DaemonSet (one pod per node)kubectl -n appstatus get podsCollects node-local metrics, kubelet stats and pod state on every node.
Cluster overviewSidebar → Kubernetes (after install)Node count, pod count, namespace breakdown, restart counts.
Pod restart alertsAlerts → Rules → Condition: pod_restart_ratePage on-call when pod restarts cross a threshold in a time window.
Node-not-ready alertsAlerts → Rules → Condition: node_not_readyAlert when any node enters NotReady state longer than N minutes.
Namespace filterHelm upgrade --set namespacesIncludedRestrict the agent to specific namespaces instead of cluster-wide read.
Multi-clusterRun the install per clusterGroup clusters by environment in the dashboard; streamed independently.
Uninstallhelm uninstall appstatus-k8s -n appstatusRemoves DaemonSet, RBAC, Secret, ConfigMap and namespace.

Next Steps

Continue building your monitoring stack: