[K8S Seri]-Cài đặt Grafana – Prometheous Stack và Uptime Kuma trên Helm chart.

I.Triển khai Cụm Grafana – Prometheous Stack bằng Helm Chart

  1. Tổng quan.
    • Chúng ta sẽ sử dụng kube-prometheus-stack chart từ repository prometheus-community. Đây là một chart rất phổ biến, bao gồm:
    • Prometheus: Để thu thập và lưu trữ metrics.
    • Grafana: Để trực quan hóa dữ liệu và tạo dashboard.
    • Alertmanager: Để xử lý các cảnh báo.
    • Các Exporters khác để thu thập metrics hệ thống.
    • Để đảm bảo dữ liệu không bị mất khi Pod khởi động lại, chúng ta sẽ lưu trữ chúng trên một ổ đĩa mạng NFS.
  2. Chuẩn bị Storage trên NFS Server
    2.1 Tạo thư mục và cấp quyền.
    # Tạo thư mục cha
    sudo mkdir -p /export/k8s
    # Gán quyền sở hữu cho user/group mà NFS thường sử dụng
    sudo chown -R nobody:nogroup /export/k8s
    # Cấp toàn quyền đọc/ghi/thực thi
    sudo chmod 0777 /export/k8s
    2.2 Cấu hình và chia sẽ thư mục
    Thêm thư mục vừa tạo vào file cấu hình /etc/exports để cho phép các client trong mạng truy cập.
    echo '/export/k8s *(rw,sync,no_subtree_check,no_root_squash)' | sudo tee -a /etc/exports  
    2.3 Áp dụng cấu hình
    Áp dụng các thay đổi vừa rồi mà không cần khởi động lại hoàn toàn máy chủ.
    # Cập nhật lại danh sách các thư mục được
    export sudo exportfs -ra
    # Khởi động lại dịch vụ NFS để chắc chắn mọi thứ được áp dụng
    sudo systemctl restart nfs-server
    2.4 Kiểm tra từ các Node
    # Cài đặt gói công cụ NFS client 
    sudo apt-get update && sudo apt-get install -y nfs-common
    # Thử mount, kiểm tra và unmount
    # Thay <IP_NFS_Server> bằng địa chỉ IP thực tế của máy chủ NFS
    sudo mount -t nfs4 192.168.9.29:/export/k8s /mnt && ls /mnt && sudo umount /mnt
  3. Cài đặt Dynamic Provisioner trên node master (k8s-master-1):
    Kubernetes cần một “provisioner” để có thể tự động tạo PersistentVolume (PV) trên NFS server mỗi khi có yêu cầu PersistentVolumeClaim (PVC). Chúng ta sẽ cài đặt nó bằng Helm.
    # Thêm repository chứa chart
    helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
    # Update Helm
    helm repo update
    # Cài vào kube-system, đặt tên storageClass là nfs-storage
    helm upgrade --install nfs-provisioner \
      nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
      -n hoatranlocal-storage \
      --create-namespace \
      --set nfs.server=192.168.9.29 \
      --set nfs.path=/export/k8s \
      --set storageClass.name=hoatranlocal-nfs-monitoring-storage \
      --set storageClass.defaultClass=false


    # Kiểm tra trạng thái
    kubectl -n hoatranlocal-storage get pods -l app=nfs-subdir-external-provisioner
    kubectl get sc
  4. Dynamic Provisioner
    4.1 Dynamic provisioning: Có một Provisioner (controller) chạy trong cluster. Khi PVC được tạo, provisioner sẽ tự động tạo PV mới khớp với yêu cầu (size, StorageClass, accessMode). → App tự xin storage là có, không cần admin làm thủ công.
    4.2 Không có Dynamic provisioner thì sao:
    PVC sẽ pednding mãi đến khi được tạo –> phải thao tác thủ công.
    4.3 Nếu có Dynamic provisioner thì tạo 1 storageClass duy nhất, các app chỉ cần khai báo size hiêu, mode như thế nào. Phần còn lại sẽ do Dynamic Provisioner xử lý, khi xóa PVC thì chúng sẽ tự xóa theo.
  5. Ưu điểm khi setup Dynamic Provisioner
    Nhanh: Không phải viết PV thủ công.
    Scale: Deploy thêm app nào cũng có storage.
    An toàn: Dữ liệu tách riêng theo PVC/PV → không “dẫm chân” nhau.
    Quản lý dễ: Chỉ cần theo dõi PVC/PV, không lo mapping thủ công
  6. Vì sao cần sử dụng Prometheus
    Prometheus (và Grafana, Alertmanager) là stateful app:
    – Prometheus lưu time-series data vài GB đến hàng trăm GB.
    – Nếu không có PVC, Prometheus chỉ chạy được trong memory (ephemeral storage), – khi pod bị xóa là mất hết data.
  7. Cài kube-prometheus-stack ở hoatranlocal -monitoring trên node master (triển khai trên Node Master)
    Thực hiện bằng lệnh (CMD)
    7.1: Tạo Namspace
    #Tạo Namespace
    kubectl create ns hoatranlocal-monitoring
    #Add repo prometheus vào helm chart.
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    #Cập nhật repo helm chart.
    helm repo update

    Update- Helm
    7.2: Cấu hình file value-prom.yaml.
    #Tạo folder prometheus.
    mkdir -p ~/helm-configs/prometheus
    cd ~/helm-configs/prometheus
    vim values-prom.yaml
    #Tạo file values-prom.yaml
    prometheus:
      prometheusSpec:
        storageSpec:
          volumeClaimTemplate:
            spec:
              storageClassName: hoatranlocal-nfs-monitoring-storage
              accessModes: ["ReadWriteOnce"]
              resources:
                requests:
                  storage: 10Gi
    alertmanager:
      alertmanagerSpec:
        storage:
          volumeClaimTemplate:
            spec:
              storageClassName: hoatranlocal-nfs-monitoring-storage
              accessModes: ["ReadWriteOnce"]
              resources:
                requests:
                  storage: 2Gi
    grafana:
      persistence:
        enabled: true
        storageClassName: hoatranlocal-nfs-monitoring-storage
        accessModes: ["ReadWriteOnce"]
        size: 5Gi
      service:
        type: NodePort   # Hoặc Ingress sau này

    7.3: Cài đặt prometheus.
    #Chạy khối lệnh bên dưới.
    helm upgrade --install hoatranlocal-helm prometheus-community/kube-prometheus-stack \
      -n hoatranlocal-monitoring \
      -f values-prom.yaml


    7.4. Truy cập kiểm tra kết quả:

    Vào rancher –>tìm port tương ứng và truy cập.


II.Triển khai Uptime Kuma bằng Helm Chart

Lưu ý bài viết này thực hiện tháng 09/2025

  • Trong muôn vàn công cụ monitor thì mình sẽ giới thiệu đến công cụ Kuma Monitor thông qua giao thức HTTP, HTTPS, TCP…
  • Nó hỗ trợ rất nhiều app để push notification.
  • Tích hợp dễ dàng vào Grafana.

1.Triển Khai

1.1 Tạo thư mục dữ liệu Kuma trong NFS server

sudo mkdir -p /export/uptime-kuma
sudo chown -R nobody:nogroup /export/uptime-kuma
sudo chmod 0777 /export/uptime-kuma

Mục đích: Tạo ra một thư mục riêng biệt để chứa toàn bộ dữ liệu của Uptime Kuma. Việc đặt nó trong /export là một quy ước phổ biến cho các thư mục chia sẻ qua NFS.

1.2 Thêm vào /etc/exports và apply config  

sudo echo '/export/uptime-kuma * \(rw,sync,no_subtree_check,no_root_squash)' | sudo tee -a /etc/exports

1.3 Kết nối các K8s tới NFS  
Áp dụng tất cả các client trong cụm

# Cài đặt nfs client
sudo apt-get update && sudo apt-get install -y nfs-common 
# Kết nối nfs từ các node trong cụm K8S tới NFS server --> lưu ý phần IP thì sẽ thay thế bằng IP srv NFS của bạn
sudo mount -t nfs4 192.168.9.29:/export/uptime-kuma /mnt && ls /mnt && sudo umount /mnt

1.4 Tạo PV và PVC cho cụm

#Khai báo Storage Class trước

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage-kuma
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

# Tạo PV và PVC

Dùng rancher import file Yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage-kuma
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer

apiVersion: v1
kind: PersistentVolume
metadata:
  name: uptime-kuma-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteOnce
  nfs:
    path: /export/uptime-kuma
    server: 192.168.9.29
  persistentVolumeReclaimPolicy: Retain
  storageClassName: nfs-storage-kuma
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: hoatranlocal-uptime-kuma-pvc
  namespace: hoatranlocal-monitoring
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: nfs-storage-kuma

Lưu ý khi tạo thì PVC sẽ có dang peding vì chưa bound dịch vụ nào (ở đây mình đã bound rồi vì mình làm xong rồi mới chụp hình lại.

1.5 Khởi tạo Uptime Kuma [ lưu ý thực hiện trên k8s master hoặc trên rancher shell]
Kiều kiện tiên quyết là phải cài helm trước, phần này đã hướng dẫn các bài trước, bạn vui lòng xem lại.

Cấu hình file values.yaml

Download template helm chart values.yaml tại và sửa lại thông số.

–> https://github.com/dirsigler/uptime-kuma-helm/blob/main/charts/uptime-kuma/values.yaml

Tại …/home/username/ tạo 1 file có dạng values.yaml và chép toàn bộ nội dụng đã tải và sửa vào.

# helm repo add uptime-kuma https://helm.irsigler.cloud

# helm repo update

# helm install hoatranlocal-uptime-kuma uptime-kuma/uptime-kuma -n hoatranlocal-monitoring -f values.yaml

2. Kiểm tra dịch vụ

2.1 Khởi tạo Uptime Kuma [ lưu ý thực hiện trên k8s master hoặc trên rancher shell]

Truy cập vào rancher của bạn –> tại Service Discovery –> Service à Kiểm tra đã có dịch vụ Kuma.

2.2 Tạo dịch vụ Ingresses trên Rancher

Tại Service Discovery –> Ingresses –> Create

2.3 Chỉnh sửa Host và truy cập Website

Chỉnh sửa host nội bộ để truy cập Website, địa chỉ Nigx-lb

HOÀN THÀNH