Sunday, January 19, 2025

[Prometheus] Deploy Prometheus trên cụm Kubernetes

-

Prometheus là một bộ công cụ giám sát và cảnh báo hệ thống mã nguồn mở ban đầu được xây dựng bởi công ty SoundCloud. Kể từ khi thành lập vào năm 2012, nhiều công ty và tổ chức đã áp dụng Prometheus vào hệ thống và dự án này có một cộng đồng người dùng và nhà phát triển rất tích cực.

Prometheus bây giờ đã trở thành một dự án mã nguồn mở độc lập và được duy trì độc lập với bất kỳ công ty nào. Prometheus đã tham gia vào tổ chức Cloud Native Computing Foundation vào năm 2016 với tư cách là dự án được ưu tiên phát triển lớn thứ hai, sau Kubernetes (k8s).

Prometheus có khả năng thu thập thông số/số liệu (metric) từ các mục tiêu được cấu hình theo các khoảng thời gian nhất định, đánh giá các biểu thức quy tắc, hiển thị kết quả và có thể kích hoạt cảnh báo nếu một số điều kiện được thảo mãn yêu cầu.

Trong bài viết này, mình sẽ hướng dẫn bạn cách triển khai Prometheus lên cụm k8s nhé.

Mình đang có 1 cụm lab Kubernetes như dưới.

root@loadbalancer3:~# kubectl get no -A -owide
NAME      STATUS   ROLES                  AGE    VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
master1   Ready    control-plane,master   3d2h   v1.23.8   192.168.13.207   <none>        Ubuntu 18.04.6 LTS   4.15.0-191-generic   containerd://1.6.8
master2   Ready    control-plane,master   3d2h   v1.23.8   192.168.13.208   <none>        Ubuntu 18.04.6 LTS   4.15.0-192-generic   containerd://1.6.8
master3   Ready    control-plane,master   3d2h   v1.23.8   192.168.13.209   <none>        Ubuntu 18.04.6 LTS   4.15.0-192-generic   containerd://1.6.8
worker1   Ready    <none>                 3d2h   v1.23.8   192.168.13.210   <none>        Ubuntu 18.04.6 LTS   4.15.0-192-generic   containerd://1.6.8
worker2   Ready    <none>                 3d2h   v1.23.8   192.168.13.211   <none>        Ubuntu 18.04.6 LTS   4.15.0-191-generic   containerd://1.6.8
worker3   Ready    <none>                 3d2h   v1.23.8   192.168.13.212   <none>        Ubuntu 18.04.6 LTS   4.15.0-192-generic   containerd://1.6.8
worker4   Ready    <none>                 3d2h   v1.23.8   192.168.13.213   <none>        Ubuntu 18.04.6 LTS   4.15.0-191-generic   containerd://1.6.8
worker5   Ready    <none>                 3d2h   v1.23.8   192.168.13.214   <none>        Ubuntu 18.04.6 LTS   4.15.0-192-generic   containerd://1.6.8

Tạo file prometheus-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus
spec:
  selector:
    matchLabels:
      run: prometheus
  replicas: 2
  template:
    metadata:
      labels:
        run: prometheus
    spec:
      containers:
        - name: prometheus
          image: prom/prometheus
          ports:
            - containerPort: 9090

Tạo file prometheus-svc.yaml

apiVersion: v1
kind: Service
metadata:
  name: prometheus
  labels:
    run: prometheus
spec:
  ports:
    - name: prometheus
      port: 80
      targetPort: 9090
  type: LoadBalancer
  selector:
    run: prometheus

Tạo file prometheus-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: prometheus
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: prometheus.hoanghd.fun
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: prometheus
                port:
                  number: 80

Sau khi tạo xong cách file manifest ta tạo namespace

kubectl create namespace prometheus

Verify namespace

$ kubectl get ns prometheus
NAME         STATUS   AGE
prometheus   Active   9m41s

Triển khai deployment.

kubectl apply -f ./prometheus-deployment.yaml

Verify deployment.

$ kubectl get po -o wide -n prometheus
NAME                          READY   STATUS    RESTARTS   AGE   IP               NODEREADINESS GATES
prometheus-578745d58b-wqpvx   1/1     Running   0          92s   10.244.235.132   worker1
prometheus-578745d58b-zzstg   1/1     Running   0          92s   10.244.42.69     worker5

Triển khai service.

kubectl apply -f ./prometheus-svc.yaml

Verify service.

$ kubectl get svc -n prometheus
NAME         TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
prometheus   LoadBalancer   10.111.208.172   <pending>     80:31177/TCP   4m57s

Triển khai ingress.

kubectl apply -f ./prometheus-ingress.yaml

Verify ingress. Ta có domain là prometheus.hoanghd.fun như đã khai báo trong ingress.

$ kubectl get ingress -n prometheus
NAME         CLASS   HOSTS                    ADDRESS          PORTS   AGE
prometheus   nginx   prometheus.hoanghd.fun   192.168.13.230   80      14s

Nếu không có domain thì ta có thể trỏ domain local như dưới.

hoanghd@Has-MacMB ~ % cat /etc/hosts | grep prometheus.hoanghd.fun
192.168.13.230 prometheus.hoanghd.fun

Kiểm tra kết nối tới domain.

ping prometheus.hoanghd.fun
PING prometheus.hoanghd.fun (192.168.13.230): 56 data bytes
64 bytes from 192.168.13.230: icmp_seq=0 ttl=64 time=0.384 ms
64 bytes from 192.168.13.230: icmp_seq=1 ttl=64 time=0.484 ms
64 bytes from 192.168.13.230: icmp_seq=2 ttl=64 time=0.405 ms
64 bytes from 192.168.13.230: icmp_seq=3 ttl=64 time=0.472 ms

--- prometheus.hoanghd.fun ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.384/0.436/0.484/0.043 ms

Kết quả.

Để xóa ứng dụng, ta có thể xóa namespace liên quan đến ứng dụng.

kubectl delete ns prometheus

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories