No menu items!
No menu items!
More

    [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ả.

    Bài viết gần đây

    spot_img

    Related Stories

    Leave A Reply

    Please enter your comment!
    Please enter your name here

    Đăng ký nhận thông tin bài viết qua email