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
Prometheus và Metrics 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.

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

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

Ví dụ:

Ý 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.

Bước 10. Query Memory
Ví dụ:
node_memory_MemAvailable_bytes
Đây là lượng RAM còn trống của Node.

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.

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