0

Lab 5. Triển khai Prometheus trên Kubernetes

Series: Kubernetes từ Zero đến Production


Tình huống thực tế

Sau Lab 4, hệ thống Todo đã có thể tự động mở rộng khi lượng truy cập tăng cao.

Kiến trúc hiện tại:

 Browser
    ↓
 Ingress
    ↓
 Frontend
    ↓
 Backend
    ↓
PostgreSQL

Một ngày, Product Owner báo:

"Website hôm nay phản hồi chậm."

Developer hỏi:

"CPU của Backend bao nhiêu?"

DevOps trả lời:

"Không biết."

Lại có người hỏi:

"Memory Node có đầy không?"

DevOps trả lời:

"Không biết."

Hay:

"Pod có đang Restart liên tục không?"

DevOps trả lời:

"Không biết."

Lúc này mới nhận ra một vấn đề.

Kubernetes rất giỏi chạy ứng dụng.

Nhưng Kubernetes không tự lưu lịch sử CPU, Memory hay Network.

Muốn biết hệ thống đang hoạt động ra sao, chúng ta cần một hệ thống Monitoring.

Công cụ phổ biến nhất hiện nay chính là Prometheus.


Mục tiêu

Sau bài lab này, bạn sẽ:

  • Hiểu Prometheus là gì
  • Hiểu Metrics là gì
  • Cài Prometheus bằng Helm
  • Kiểm tra Prometheus hoạt động
  • Hiểu cơ chế Scrape Metrics
  • Query Metrics đầu tiên
  • Quan sát Metrics của Kubernetes Cluster

Kiến thức cần chuẩn bị

Đã hoàn thành:

  • ✅ Lab 1
  • ✅ Lab 2
  • ✅ Lab 3
  • ✅ Lab 4

Cluster đang chạy bình thường.

Cài Helm:

brew install helm

Kiểm tra:

helm version

Kiến trúc Monitoring

Kubernetes Cluster
        ↓
  Export Metrics
        ↓
Prometheus Server
        ↓
Time Series Database
        ↓
   PromQL Query

Trong bài này chỉ có một thành phần duy nhất: Prometheus

Grafana sẽ được triển khai ở Lab 6.


Metrics là gì?

Metrics là những con số mô tả trạng thái của hệ thống theo thời gian.

Ví dụ:

CPU Usage

35%
↓
42%
↓
68%

Hoặc:

Memory

620 Mi
↓
710 Mi
↓
880 Mi

Hay:

Pod Restart

0
↓
0
↓
1

Prometheus sẽ lưu tất cả các giá trị này theo thời gian.


Prometheus hoạt động như thế nào?

    Kubernetes
        ↓
  metrics Endpoint
        ↓
 Prometheus Scrape
        ↓
Time Series Database

Prometheus không đợi ứng dụng gửi dữ liệu.

Thay vào đó, nó chủ động gọi tới endpoint /metrics theo chu kỳ (thường mỗi 15–30 giây) để thu thập số liệu. Cơ chế này được gọi là Pull Model.


Bước 1. Kiểm tra Metrics Server

PrometheusMetrics Server có vai trò khác nhau.

  • Metrics Server cung cấp số liệu ngắn hạn cho HPA và kubectl top.
  • Prometheus lưu trữ Metrics trong thời gian dài để phân tích và trực quan hóa.

Đầu tiên kiểm tra Metrics Server:

kubectl top nodes

Ví dụ:

NAME       CPU(cores)   CPU(%)   MEMORY(bytes)   MEMORY(%)   
minikube   214m         1%       1450Mi          18% 

Kiểm tra Pod:

kubectl top pods -A

Ví dụ:

NAMESPACE     NAME                               CPU(cores)   MEMORY(bytes)   
...
kube-system   kube-scheduler-minikube            9m           28Mi            
kube-system   metrics-server-9d74bb658-qt7qw     4m           26Mi            
kube-system   storage-provisioner                3m           20Mi            
todo-app      todo-backend-697b7666c9-l7djp      3m           277Mi           
todo-app      todo-backend-697b7666c9-t7p9j      6m           285Mi           
todo-app      todo-frontend-6566c9b7fd-kx855     0m           8Mi             
todo-app      todo-frontend-6566c9b7fd-mtz7f     0m           8Mi             
todo-app      todo-postgres-79859d8b5-7l4mw      7m           46Mi 

Nếu hai lệnh trên hoạt động bình thường thì có thể tiếp tục.


Bước 2. Tạo Namespace

Tạo namespace riêng:

kubectl create namespace monitoring

Kiểm tra:

kubectl get ns

Kết quả:

NAME              STATUS   AGE
default           Active   44h
...
monitoring        Active   11h
todo-app          Active   26h

Bước 3. Cài Helm Repository

Prometheus sẽ được cài bằng Helm.

Thêm repository:

helm repo add prometheus-community \
https://prometheus-community.github.io/helm-charts

Cập nhật:

helm repo update

Kiểm tra:

helm search repo prometheus

Bước 4. Cài Prometheus

Cài đặt:

helm install prometheus \
prometheus-community/prometheus \
-n monitoring

Đợi khoảng vài phút.

Kết quả:

NAME: prometheus
LAST DEPLOYED: Fri Jul 31 13:42:09 2026
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
DESCRIPTION: Install complete
TEST SUITE: None
NOTES:
The Prometheus server can be accessed via port 80 on the following DNS name from within your cluster:
prometheus-server.monitoring.svc.cluster.local
...

Bước 5. Kiểm tra Prometheus

Kiểm tra Pod:

kubectl get pods -n monitoring

Ví dụ:

NAME                                                 READY   STATUS              RESTARTS   AGE
prometheus-alertmanager-0                            1/1     Running             0          58s
prometheus-kube-state-metrics-76444ffd98-tbjq4       1/1     Running             0          58s
prometheus-prometheus-node-exporter-rs4hg            1/1     Running             0          58s
prometheus-prometheus-pushgateway-5df4b4d79b-tgzp9   1/1     Running             0          58s
prometheus-server-dc466d8cc-tx8wh                    0/2     ContainerCreating   0          58s

Kiểm tra Deployment:

kubectl get deployment -n monitoring

Ví dụ:

NAME                                READY   UP-TO-DATE   AVAILABLE   AGE
prometheus-kube-state-metrics       1/1     1            1           2m19s
prometheus-prometheus-pushgateway   1/1     1            1           2m19s
prometheus-server                   1/1     1            1           2m19s

Kiểm tra Service:

kubectl get svc -n monitoring

Ví dụ:

NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
prometheus-alertmanager               ClusterIP   10.99.184.223   <none>        9093/TCP   2m57s
prometheus-alertmanager-headless      ClusterIP   None            <none>        9093/TCP   2m57s
prometheus-kube-state-metrics         ClusterIP   10.96.21.129    <none>        8080/TCP   2m57s
prometheus-prometheus-node-exporter   ClusterIP   10.104.116.55   <none>        9100/TCP   2m57s
prometheus-prometheus-pushgateway     ClusterIP   10.108.131.6    <none>        9091/TCP   2m57s
prometheus-server                     ClusterIP   10.103.48.229   <none>        80/TCP     2m57s

Đảm bảo tất cả đều ở trạng thái Running.


Bước 6. Truy cập Prometheus

Forward cổng:

kubectl port-forward \
svc/prometheus-server \
9090:80 \
-n monitoring

Mở:

http://localhost:9090

Bạn sẽ thấy giao diện Prometheus. Screenshot 2026-07-31 at 13.51.19.png


Bước 7. Kiểm tra Targets

Trong giao diện Prometheus:

Status
↓
Targets

Bạn sẽ thấy nhiều Target như:

  • Kubernetes API Server
  • Node Exporter
  • kube-state-metrics
  • Prometheus

Screenshot 2026-07-31 at 13.53.36.png

Nếu trạng thái là:

UP

Nghĩa là Prometheus đang thu thập Metrics thành công.

Nếu thấy:

DOWN

Có nghĩa Prometheus không thể truy cập endpoint của Target đó.


Bước 8. Query đầu tiên

Mở:

Graph

Thử query:

up

Nhấn:

Execute

Screenshot 2026-07-31 at 13.54.30.png

Ví dụ:

Screenshot 2026-07-31 at 13.55.19.png

Ý nghĩa:

  • 1 = Target hoạt động
  • 0 = Target không hoạt động

Đây là câu lệnh PromQL đầu tiên mà hầu hết mọi DevOps Engineer đều sử dụng.


Bước 9. Query CPU

Ví dụ:

node_cpu_seconds_total

Nhấn Execute.

Bạn sẽ thấy rất nhiều Time Series.

Prometheus đang lưu toàn bộ dữ liệu CPU của Node.

Screenshot 2026-07-31 at 13.56.09.png


Bước 10. Query Memory

Ví dụ:

node_memory_MemAvailable_bytes

Đây là lượng RAM còn trống của Node.

Screenshot 2026-07-31 at 13.57.22.png


Bước 11. Query Pod

Ví dụ:

kube_pod_info

Bạn sẽ thấy thông tin về toàn bộ Pod trong Cluster.

Screenshot 2026-07-31 at 13.58.09.png


Bước 12. Hiểu Time Series

Ví dụ:

node_cpu_seconds_total

instance=minikube

cpu=0

mode=system

Một Metrics luôn gồm:

  • Tên Metrics
  • Giá trị
  • Timestamp
  • Labels

Ví dụ:

Metric Name
↓
node_cpu_seconds_total
↓
Label
↓
cpu=0
↓
instance=minikube
↓
Value

Labels là chìa khóa giúp Prometheus lọc và truy vấn dữ liệu.


Bước 13. Thử tạo lỗi

Xóa một Pod:

kubectl delete pod <pod-name> -n todo-app

Quan sát:

up

Sau một thời gian, Prometheus sẽ cập nhật trạng thái của Target tương ứng.


Bước 14. Debug

Target DOWN

Kiểm tra:

Status

↓

Targets

Nếu thấy:

DOWN

Kiểm tra:

kubectl get pods -n monitoring

Tiếp theo:

kubectl logs <prometheus-pod> -n monitoring

Không có Metrics

Kiểm tra:

kubectl get svc -n monitoring

Đảm bảo Service của Target đang hoạt động.


Dọn dẹp

Nếu không tiếp tục:

helm uninstall prometheus -n monitoring

Xóa Namespace:

kubectl delete namespace monitoring

Những gì bạn đã học

Sau bài lab này, bạn đã biết:

  • ✅ Metrics là gì
  • ✅ Prometheus hoạt động theo mô hình Pull
  • ✅ Cài Prometheus bằng Helm
  • ✅ Truy cập Prometheus UI
  • ✅ Kiểm tra Targets
  • ✅ Thực hiện các truy vấn PromQL cơ bản
  • ✅ Hiểu cấu trúc của một Time Series
  • ✅ Kiểm tra trạng thái Monitoring của Kubernetes Cluster

Bài học rút ra

Prometheus là nền tảng của hệ thống Monitoring trong Kubernetes.

Thay vì chỉ biết ứng dụng "đang chạy", Prometheus giúp bạn trả lời các câu hỏi như:

  • CPU đang sử dụng bao nhiêu?
  • Node còn bao nhiêu bộ nhớ?
  • Pod nào vừa bị khởi động lại?
  • Thành phần nào đang không phản hồi?

Đây là bước đầu tiên để xây dựng một hệ thống Observability hoàn chỉnh.

Lab 6, chúng ta sẽ cài đặt Grafana, kết nối với Prometheus và xây dựng các Dashboard trực quan để theo dõi toàn bộ Kubernetes Cluster theo thời gian thực.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí