Bài 8: Kubernetes Monitoring – Giám Sát Với Prometheus Và Grafana

Tại Sao Cần Giám Sát Kubernetes?

Kubernetes monitoring là bước quan trọng để theo dõi hiệu suất và trạng thái của cluster, giúp phát hiện vấn đề kịp thời. Prometheus là công cụ thu thập và lưu trữ metrics, còn Grafana cung cấp dashboard trực quan để phân tích dữ liệu. Trong bài 7, bạn đã tích hợp CI/CD với Kubernetes. Bài này sẽ hướng dẫn bạn cài đặt Prometheus và Grafana trên Minikube để giám sát cluster.

Bước 1: Khởi Động Minikube Và Triển Khai Ứng Dụng

  • Hành động:
    1. Khởi động Minikube:
      minikube start --driver=docker
    2. Tạo file nginx-deployment.yaml:
      touch nginx-deployment.yaml

      Mở file và dán nội dung:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
      name: nginx-deployment
      spec:
      replicas: 2
      selector:
       matchLabels:
         app: nginx
      template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
         - name: nginx
           image: nginx:latest
           ports:
           - containerPort: 80
    3. Triển khai ứng dụng:
      kubectl apply -f nginx-deployment.yaml
  • Kết quả thực tế:
    • Sau khi chạy minikube start, terminal hiển thị:
          minikube v1.33.1 on Ubuntu 22.04
          Using the docker driver
          Starting control plane node in cluster minikube
          Done! kubectl is now configured to use "minikube" cluster
    • Sau khi chạy kubectl apply, terminal hiển thị:
      deployment.apps/nginx-deployment created
    • Kiểm tra Pod:
      kubectl get pods

      Output:

      NAME                               READY   STATUS    RESTARTS   AGE
      nginx-deployment-5d9f8b6f5-abcde   1/1     Running   0          10s
      nginx-deployment-5d9f8b6f5-fghij   1/1     Running   0          10s

Bước 2: Cài Đặt Prometheus Trên Cluster

  • Hành động:
    1. Thêm Helm repository của Prometheus:
      helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
      helm repo update
    2. Cài đặt Prometheus:
      helm install prometheus prometheus-community/prometheus --namespace monitoring --create-namespace
    3. Kiểm tra Pod của Prometheus:
      kubectl get pods -n monitoring
  • Kết quả thực tế:
    • Sau khi chạy helm install, terminal hiển thị:
      NAME: prometheus
      NAMESPACE: monitoring
      STATUS: deployed
    • Lệnh kubectl get pods -n monitoring hiển thị:
      NAME                                     READY   STATUS    RESTARTS   AGE
      prometheus-alertmanager-0                1/1     Running   0          30s
      prometheus-kube-state-metrics-abc123     1/1     Running   0          30s
      prometheus-node-exporter-def456          1/1     Running   0          30s
      prometheus-pushgateway-ghi789            1/1     Running   0          30s
      prometheus-server-xyz987                 2/2     Running   0          30s

      (Các thành phần của Prometheus đã chạy).

Bước 3: Cài Đặt Grafana Và Kết Nối Với Prometheus

  • Hành động:
    1. Thêm Helm repository của Grafana:
      helm repo add grafana https://grafana.github.io/helm-charts
      helm repo update
    2. Cài đặt Grafana:
      helm install grafana grafana/grafana --namespace monitoring
    3. Lấy mật khẩu mặc định của Grafana:
      kubectl get secret --namespace monitoring grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
    4. Truy cập Grafana qua port-forward:
      kubectl port-forward --namespace monitoring svc/grafana 3000:80
    5. Mở trình duyệt, truy cập http://localhost:3000, đăng nhập với user admin và mật khẩu từ bước 3.
  • Kết quả thực tế:
    • Sau khi chạy helm install, terminal hiển thị:
      NAME: grafana
      NAMESPACE: monitoring
      STATUS: deployed
    • Lệnh lấy mật khẩu hiển thị (ví dụ):
      E2fgh4Jk9m
    • Truy cập http://localhost:3000, bạn thấy giao diện đăng nhập Grafana.

Bước 4: Xem Dashboard Giám Sát Trên Grafana

  • Hành động:
    1. Thêm Prometheus làm nguồn dữ liệu:
      • Trong Grafana, vào Configuration > Data Sources > Add data source.
      • Chọn Prometheus.
      • Nhập URL: http://prometheus-server.monitoring.svc.cluster.local.
      • Nhấn Save & Test.
    2. Nhập dashboard có sẵn:
      • Vào Dashboards > Import.
      • Nhập ID dashboard 1860 (Node Exporter Full) và chọn Prometheus làm nguồn dữ liệu.
      • Nhấn Import.
  • Kết quả thực tế:
    • Sau khi thêm Prometheus, Grafana hiển thị thông báo:
      Data source is working
    • Dashboard Node Exporter Full hiển thị các biểu đồ về CPU, RAM, và disk của cluster.

Bước 5: Xóa Tài Nguyên Để Dọn Dẹp

  • Hành động:
    1. Xóa Prometheus và Grafana:
      helm uninstall prometheus --namespace monitoring
      helm uninstall grafana --namespace monitoring
    2. Xóa namespace và ứng dụng:
      kubectl delete -f nginx-deployment.yaml
      kubectl delete namespace monitoring
    3. Dừng Minikube:
      minikube stop
      minikube delete
  • Kết quả thực tế:
    • Sau khi chạy helm uninstall, terminal hiển thị:
      release "prometheus" uninstalled
      release "grafana" uninstalled
    • Sau khi chạy minikube delete, terminal hiển thị:
      Deleting "minikube" in docker ...
      Deleted minikube cluster

Kết Quả Đạt Được

  • Bạn đã cài đặt Prometheus để thu thập metrics từ cluster Kubernetes.
  • Bạn đã cài đặt Grafana và kết nối với Prometheus để trực quan hóa dữ liệu.
  • Bạn đã xem dashboard giám sát và xóa tài nguyên sau khi thử nghiệm.

Lưu Ý Quan Trọng

  • Production: Trong môi trường production, cấu hình Prometheus và Grafana với persistent storage để lưu dữ liệu.
  • Bảo mật: Đổi mật khẩu mặc định của Grafana và bật HTTPS trong production.
  • Tài liệu tham khảo: Xem thêm về Prometheus (Prometheus Documentation) và Grafana (Grafana Documentation).
Điều hướng chuỗi bài viết<< Bài 7: Kubernetes CI/CD – Tự Động Triển Khai Với GitHub Actions
>> Bài 9: Kubernetes Autoscaling – Tối Ưu Hóa Cluster Hiệu Quả
Article Thumbnail
Datadog Webinar: Modernize AWS Logs at Scale
Chia sẻ bài viết:
Theo dõi
Thông báo của
0 Góp ý
Được bỏ phiếu nhiều nhất
Mới nhất Cũ nhất
Phản hồi nội tuyến
Xem tất cả bình luận