0
0
KubernetesHow-ToBeginner · 4 min read

How to Monitor Kubernetes Cluster: Tools and Best Practices

To monitor a Kubernetes cluster, use tools like Prometheus for collecting metrics and Grafana for visualizing them. These tools help track cluster health, resource usage, and application performance in real time.
📐

Syntax

Monitoring a Kubernetes cluster involves deploying monitoring tools as pods inside the cluster. The common syntax pattern is to use kubectl apply -f <manifest-file> to deploy monitoring components like Prometheus and Grafana.

Key parts:

  • kubectl: Kubernetes command-line tool.
  • apply -f: Command to create or update resources from a file.
  • manifest-file: YAML file defining monitoring resources.
bash
kubectl apply -f prometheus-deployment.yaml
kubectl apply -f grafana-deployment.yaml
💻

Example

This example shows how to deploy Prometheus and Grafana using Kubernetes manifests and access Grafana dashboard to visualize metrics.

yaml
apiVersion: v1
kind: Namespace
metadata:
  name: monitoring
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
      - name: prometheus
        image: prom/prometheus:v2.44.0
        ports:
        - containerPort: 9090
---
apiVersion: v1
kind: Service
metadata:
  name: prometheus-service
  namespace: monitoring
spec:
  selector:
    app: prometheus
  ports:
  - protocol: TCP
    port: 9090
    targetPort: 9090
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      containers:
      - name: grafana
        image: grafana/grafana:9.5.2
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: grafana-service
  namespace: monitoring
spec:
  selector:
    app: grafana
  ports:
  - protocol: TCP
    port: 3000
    targetPort: 3000
  type: NodePort
Output
namespace/monitoring created deployment.apps/prometheus created service/prometheus-service created deployment.apps/grafana created service/grafana-service created
⚠️

Common Pitfalls

Common mistakes when monitoring Kubernetes clusters include:

  • Not setting resource limits on monitoring pods, causing cluster overload.
  • Exposing monitoring services without authentication, risking security.
  • Missing persistent storage for Prometheus data, losing metrics on pod restarts.
  • Not configuring Prometheus scrape targets correctly, resulting in missing metrics.

Always secure access and configure storage for reliable monitoring.

yaml
## Wrong: No resource limits
containers:
- name: prometheus
  image: prom/prometheus:v2.44.0

## Right: With resource limits
containers:
- name: prometheus
  image: prom/prometheus:v2.44.0
  resources:
    limits:
      cpu: "500m"
      memory: "512Mi"
    requests:
      cpu: "250m"
      memory: "256Mi"
📊

Quick Reference

Tips for effective Kubernetes monitoring:

  • Use Prometheus to collect metrics from nodes, pods, and services.
  • Visualize metrics with Grafana dashboards.
  • Secure monitoring endpoints with authentication and network policies.
  • Set resource requests and limits for monitoring pods.
  • Use persistent volumes for Prometheus data storage.

Key Takeaways

Deploy Prometheus and Grafana inside your Kubernetes cluster to monitor metrics and visualize data.
Always configure resource limits and persistent storage for monitoring components to ensure stability.
Secure access to monitoring dashboards to protect cluster data.
Use kubectl apply with YAML manifests to deploy monitoring tools easily.
Regularly check and update scrape configurations to capture all relevant metrics.