Thursday, November 21, 2024

[Zabbix] Triển khai Zabbix Server trên Kubernetes

-

Triển khai Zabbix server trên Kubernetes cung cấp nhiều lợi ích cho việc quản lý hệ thống giám sát của bạn, bao gồm:

  • Tự động hóa triển khai: Kubernetes cho phép bạn triển khai và quản lý các ứng dụng và dịch vụ một cách tự động. Điều này giúp giảm thiểu thời gian và công sức cần thiết để triển khai Zabbix server.
  • Quản lý tài nguyên: Kubernetes cung cấp các công cụ để quản lý tài nguyên máy chủ và tối ưu hóa việc sử dụng tài nguyên, điều này giúp bạn đảm bảo rằng Zabbix server của bạn được triển khai và hoạt động hiệu quả.
  • Tính mở rộng: Kubernetes cho phép bạn mở rộng Zabbix server của mình dễ dàng hơn bằng cách thêm các nút worker mới hoặc tăng khả năng chịu tải cho các nút hiện có.
  • Khả năng di động: Với Kubernetes, bạn có thể triển khai Zabbix server trên bất kỳ nền tảng điện toán đám mây hoặc trên các máy chủ cục bộ. Điều này giúp bạn tăng tính di động và linh hoạt trong việc quản lý hệ thống giám sát.

Tóm lại, triển khai Zabbix server trên Kubernetes là một giải pháp hiệu quả để quản lý hệ thống giám sát của bạn, cung cấp tính mở rộng và di động, và giảm thiểu thời gian và công sức cần thiết để triển khai và quản lý Zabbix server.

Ưu điểm của việc triển khai Zabbix server trên Kubernetes:

  • Tính linh hoạt và di động: Triển khai Zabbix server trên Kubernetes cho phép bạn triển khai nó trên bất kỳ nền tảng điện toán đám mây hoặc trên các máy chủ cục bộ.
  • Tự động hóa triển khai: Kubernetes cho phép bạn tự động hóa việc triển khai và quản lý các ứng dụng và dịch vụ, giảm thiểu thời gian và công sức cần thiết để triển khai Zabbix server.
  • Quản lý tài nguyên: Kubernetes cung cấp các công cụ để quản lý tài nguyên máy chủ và tối ưu hóa việc sử dụng tài nguyên, giúp bạn đảm bảo rằng Zabbix server của bạn được triển khai và hoạt động hiệu quả.
  • Tính mở rộng: Kubernetes cho phép bạn mở rộng Zabbix server của mình dễ dàng hơn bằng cách thêm các nút worker mới hoặc tăng khả năng chịu tải cho các nút hiện có.

Nhược điểm của việc triển khai Zabbix server trên Kubernetes:

  • Khó khăn trong triển khai: Triển khai Zabbix server trên Kubernetes yêu cầu có kiến thức chuyên sâu về cả Zabbix và Kubernetes, vì vậy nó có thể đòi hỏi một mức độ kiến thức và kinh nghiệm cao.
  • Chi phí cao: Triển khai Zabbix server trên Kubernetes có thể đòi hỏi nhiều tài nguyên máy chủ và kinh phí hơn so với triển khai trên một máy chủ đơn lẻ.

Tóm lại, triển khai Zabbix server trên Kubernetes cung cấp nhiều lợi ích về tính linh hoạt, tự động hóa, quản lý tài nguyên và tính mở rộng. Tuy nhiên, việc triển khai này cũng có thể gặp khó khăn và đòi hỏi chi phí cao.

1. Tạo Deployment và Service cho Zabbix Database

Dưới đây là một file định nghĩa Kubernetes cho việc triển khai và cấu hình một máy chủ cơ sở dữ liệu MariaDB để sử dụng cho Zabbix server.

Cụ thể, file này bao gồm hai phần:

  • Deployment: định nghĩa cách MariaDB sẽ được triển khai. Trong phần này, MariaDB sẽ được triển khai dưới dạng một container trong một Pod với một tên là “zabbix-db”. Nó cũng cấu hình các biến môi trường như mật khẩu, tên cơ sở dữ liệu và người dùng cho MariaDB container. Container sẽ lắng nghe trên cổng 3306, được chỉ định bởi “containerPort” trong file định nghĩa.
  • Service: định nghĩa cách truy cập đến MariaDB. Trong phần này, Service sẽ tạo một địa chỉ IP tĩnh cho MariaDB container để các container khác trong cùng một namespace của Kubernetes có thể truy cập vào nó. Nó cũng cấu hình cổng truy cập là 3306, giống như trong phần Deployment.

Với cấu hình này, khi triển khai Zabbix server, bạn có thể sử dụng địa chỉ IP của Service để kết nối đến cơ sở dữ liệu MariaDB.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zabbix-mariadb
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: zabbix-mariadb
  template:
    metadata:
      labels:
        app: zabbix-mariadb
    spec:
      containers:
      - name: zabbix-db
        image: mariadb:10.7.8
        env:
          - name: MYSQL_ROOT_PASSWORD
            value: "password"
          - name: MYSQL_PASSWORD
            value: "password"
          - name: MYSQL_DATABASE
            value: "zabbixdb"
          - name: MYSQL_USER
            value: hoanghd
        ports:
          - containerPort: 3306
---
apiVersion: v1
kind: Service
metadata:
  name: zabbix-mariadb
  namespace: monitoring
spec:
  selector:
    app: zabbix-mariadb
  ports:
  - name: mysql
    port: 3306
    protocol: TCP
    targetPort: 3306
  type: ClusterIP

. Tạo Deployment và Service cho Zabbix Server

Đây là một file định nghĩa Kubernetes cho việc triển khai và cấu hình Zabbix server.

Cụ thể, file này bao gồm hai phần:

  1. Deployment: định nghĩa cách Zabbix server sẽ được triển khai. Trong phần này, Zabbix server sẽ được triển khai dưới dạng một container trong một Pod với một tên là “zabbix-server”. Nó cũng cấu hình các biến môi trường như địa chỉ IP hoặc tên máy chủ của MariaDB, tên người dùng và mật khẩu để kết nối đến MariaDB container. Container sẽ lắng nghe trên cổng 10051, được chỉ định bởi “containerPort” trong file định nghĩa.
  2. Service: định nghĩa cách truy cập đến Zabbix server. Trong phần này, Service sẽ tạo một địa chỉ IP tĩnh cho Zabbix server container để các container khác trong cùng một namespace của Kubernetes có thể truy cập vào nó. Nó cũng cấu hình cổng truy cập là 10051, giống như trong phần Deployment.

Với cấu hình này, khi triển khai Zabbix server, bạn có thể sử dụng địa chỉ IP của Service để kết nối đến Zabbix server container. Trong đó, biến môi trường “DB_SERVER_HOST” được cấu hình với tên Service “zabbix-mariadb”, tức là Zabbix server container sẽ kết nối đến MariaDB thông qua địa chỉ IP của Service “zabbix-mariadb” mà không cần biết địa chỉ IP thực tế của MariaDB container.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zabbix-server
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: zabbix-server
  template:
    metadata:
      labels:
        app: zabbix-server
    spec:
      containers:
      - name: zabbix-server
        image: zabbix/zabbix-server-mysql
        env:
        - name: DB_SERVER_HOST
          value: zabbix-mariadb
        - name: MYSQL_USER
          value: hoanghd
        - name: MYSQL_PASSWORD
          value: password
        - name: MYSQL_DATABASE
          value: zabbixdb
        ports:
          - containerPort: 10051
---
apiVersion: v1
kind: Service
metadata:
  name: zabbix-server
  namespace: monitoring
spec:
  selector:
    app: zabbix-server
  ports:
  - name: zabbix-trapper
    port: 10051
    protocol: TCP
    targetPort: 10051
  type: ClusterIP

3. Tạo Deployment và Service cho Zabbix Webserver.

Trong file YAML này, ta đang định nghĩa một deployment cho Zabbix Web Server, được triển khai trên Kubernetes. Sau đó, ta cũng định nghĩa một service để cho phép các pods khác trong cụm Kubernetes có thể truy cập được vào Zabbix Web.

Cụ thể, các trường thông tin được sử dụng trong các định nghĩa YAML này bao gồm:

  • apiVersion: phiên bản API của Kubernetes được sử dụng (ở đây là v1apps/v1)
  • kind: loại resource Kubernetes được sử dụng (ở đây là DeploymentService)
  • metadata: thông tin metadata cho resource, bao gồm tên, nhãn và namespace của resource
  • selector: các nhãn được sử dụng để lựa chọn các pods cụ thể
  • replicas: số lượng pods được triển khai bởi deployment
  • template: mẫu cho các pods được triển khai
  • containers: danh sách các container được triển khai trong pod
  • image: tên image của container
  • env: danh sách các biến môi trường được định nghĩa cho container
  • ports: cổng mà container lắng nghe để cho phép các kết nối từ bên ngoài vào container
  • type: loại service được triển khai (ở đây là ClusterIP)

Các thông tin được sử dụng trong định nghĩa YAML này tương tự như trong các định nghĩa YAML cho Zabbix Server và MariaDB Server. Tuy nhiên, ở đây chúng ta sử dụng image zabbix/zabbix-web-nginx-mysql:latest để triển khai Zabbix Web Server, và định nghĩa cổng 80 cho service để cho phép các kết nối HTTP được truy cập vào Zabbix Web.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zabbix-web
  namespace: monitoring
  labels:
    app: zabbix-web
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zabbix-web
  template:
    metadata:
      labels:
        app: zabbix-web
    spec:
      containers:
      - name: zabbix-web
        image: zabbix/zabbix-web-nginx-mysql:latest
        env:
        - name: DB_SERVER_HOST
          value: zabbix-mariadb
        - name: MYSQL_USER
          value: hoanghd
        - name: MYSQL_PASSWORD
          value: password
        - name: MYSQL_DATABASE
          value: zabbixdb
        - name: ZBX_SERVER_HOST
          value: zabbix-server
        - name: PHP_TZ
          value: Asia/Ho_Chi_Minh
        ports:
        - name: http
          containerPort: 80     
---
apiVersion: v1
kind: Service
metadata:
  name: zabbix-web
  namespace: monitoring
  labels:
    app: zabbix-web
spec:
  selector:
    app: zabbix-web
  ports:
    - name: http
      port: 80
      targetPort: 8080
  type: ClusterIP

4. Tạo Ingress cho Zabbix Webserver.

Đây là file YAML để triển khai một Ingress trên Kubernetes để định tuyến traffic từ bên ngoài tới service zabbix-web trong namespace monitoring.

Cụ thể, trong YAML này:

  • apiVersion: networking.k8s.io/v1: Định nghĩa phiên bản API mà YAML này sử dụng.
  • kind: Ingress: Xác định đối tượng mà YAML này triển khai, ở đây là một Ingress.
  • metadata: Chứa các thông tin về đối tượng, bao gồm tên của Ingress và namespace mà nó thuộc về.
  • name: zabbix-ingress: Tên của Ingress là zabbix-ingress.
  • namespace: monitoring: Ingress này thuộc namespace monitoring.
  • annotations: Các thông tin khác về Ingress, ở đây là thông tin để Ingress controller (ở đây là Nginx) định tuyến traffic và chỉnh sửa URL.
  • nginx.ingress.kubernetes.io/rewrite-target: /: Thông tin để Ingress controller thực hiện chỉnh sửa URL và định tuyến traffic đến đúng service.
  • ingressClassName: nginx: Định nghĩa lớp Ingress controller mà Ingress này sử dụng, ở đây là Nginx.
  • rules: Định nghĩa các quy tắc để định tuyến traffic.
  • host: zabbix.hoanghd.com: Tên miền của Ingress, ở đây là zabbix.hoanghd.com.
  • http: Khai báo sử dụng giao thức HTTP.
  • paths: Các đường dẫn để định tuyến traffic.
  • path: /: Đường dẫn được định tuyến, ở đây là /.
  • pathType: Prefix: Loại đường dẫn, ở đây là Prefix. Prefix nghĩa là Ingress controller sẽ so khớp đường dẫn bắt đầu bằng /.
  • backend: Các thông tin về service mà traffic sẽ được định tuyến đến.
  • service: Chứa các thông tin về service, ở đây là zabbix-web.
  • name: zabbix-web: Tên của service.
  • port: Số cổng của service, ở đây là 80.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: zabbix-ingress
  namespace: monitoring
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
    - host: zabbix.hoanghd.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: zabbix-web
                port:
                  number: 80

5. Triển khai

Tạo namespace cho dự án.

kubectl create namspace monitoring

Lệnh kubectl apply được sử dụng để triển khai các đối tượng Kubernetes từ các file cấu hình YAML hoặc JSON. Trong trường hợp này, lệnh sẽ triển khai các đối tượng Zabbix Server và Zabbix Web trên Kubernetes, được định nghĩa trong các file cấu hình YAML trong thư mục /home/zabbix-kubernetes.

kubectl apply -f /home/zabbix-kubernetes

Output

deployment.apps/zabbix-mariadb created
service/zabbix-mariadb created
ingress.networking.k8s.io/zabbix-ingress created
deployment.apps/zabbix-server created
service/zabbix-server created
deployment.apps/zabbix-web created
service/zabbix-web created

Sử dụng lênh kubectl get po,svc,ingress -n monitoring để xác nhận các dịch vụ đã chạy.

kubectl get po,svc,ingress -n monitoring

Output

NAME                                  READY   STATUS              RESTARTS   AGE
pod/zabbix-mariadb-576b5d7cc8-9tg2c   0/1     ContainerCreating   0          0s
pod/zabbix-mariadb-576b5d7cc8-lvm2s   1/1     Terminating         0          50s
pod/zabbix-server-5c666cc5c5-zhrb9    0/1     ContainerCreating   0          0s
pod/zabbix-web-64c6d7c5d5-tj45g       0/1     ContainerCreating   0          0s

NAME                     TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     AGE
service/zabbix-mariadb   ClusterIP   10.98.184.29     <none>        3306/TCP    0s
service/zabbix-server    ClusterIP   10.106.191.154   <none>        10051/TCP   0s
service/zabbix-web       ClusterIP   10.108.192.209   <none>        80/TCP      0s

NAME                                       CLASS   HOSTS                ADDRESS          PORTS   AGE
ingress.networking.k8s.io/zabbix-ingress   nginx   zabbix.hoanghd.com   192.168.13.208   80      0s

Kết quả.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories