Danh sách bài viết trong series Kubernetes cơ bản
- Bài 1: Kubernetes Cơ Bản – Cài Đặt Minikube Và Chạy Pod Đầu Tiên
- Bài 2: Kubernetes Pod Deployment – Triển Khai Ứng Dụng Đầu Tiên
- Bài 3: Kubernetes Service Ingress – Quản Lý Truy Cập Ứng Dụng
- Bài 4: Kubernetes ConfigMap Secret – Quản Lý Cấu Hình Ứng Dụng
- Bài 5: Kubernetes EKS AWS – Triển Khai Cluster Trên AWS
- Bài 6: Kubernetes Helm – Tự Động Triển Khai Ứng Dụng Dễ Dàng
- Bài 7: Kubernetes CI/CD – Tự Động Triển Khai Với GitHub Actions
- Bài 8: Kubernetes Monitoring – Giám Sát Với Prometheus Và Grafana
- Bài 9: Kubernetes Autoscaling – Tối Ưu Hóa Cluster Hiệu Quả
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:
- Khởi động Minikube:
minikube start --driver=docker
- 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
- Triển khai ứng dụng:
kubectl apply -f nginx-deployment.yaml
- Khởi động Minikube:
- 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
- Sau khi chạy
Bước 2: Cài Đặt Prometheus Trên Cluster
- Hành động:
- Thêm Helm repository của Prometheus:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update
- Cài đặt Prometheus:
helm install prometheus prometheus-community/prometheus --namespace monitoring --create-namespace
- Kiểm tra Pod của Prometheus:
kubectl get pods -n monitoring
- Thêm Helm repository của Prometheus:
- 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).
- Sau khi chạy
Bước 3: Cài Đặt Grafana Và Kết Nối Với Prometheus
- Hành động:
- Thêm Helm repository của Grafana:
helm repo add grafana https://grafana.github.io/helm-charts helm repo update
- Cài đặt Grafana:
helm install grafana grafana/grafana --namespace monitoring
- 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
- Truy cập Grafana qua port-forward:
kubectl port-forward --namespace monitoring svc/grafana 3000:80
- Mở trình duyệt, truy cập
http://localhost:3000
, đăng nhập với useradmin
và mật khẩu từ bước 3.
- Thêm Helm repository của Grafana:
- 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.
- Sau khi chạy
Bước 4: Xem Dashboard Giám Sát Trên Grafana
- Hành động:
- 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.
- 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.
- Thêm Prometheus làm nguồn dữ liệu:
- 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.
- Sau khi thêm Prometheus, Grafana hiển thị thông báo:
Bước 5: Xóa Tài Nguyên Để Dọn Dẹp
- Hành động:
- Xóa Prometheus và Grafana:
helm uninstall prometheus --namespace monitoring helm uninstall grafana --namespace monitoring
- Xóa namespace và ứng dụng:
kubectl delete -f nginx-deployment.yaml kubectl delete namespace monitoring
- Dừng Minikube:
minikube stop minikube delete
- Xóa Prometheus và Grafana:
- 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
- Sau khi chạy
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).