千家信息网

k8s部署zabbix监控系统

发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,zabbix简介Zabbix 是一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。Zabbix 使用 MySQL、PostgreSQL、S
千家信息网最后更新 2025年01月22日k8s部署zabbix监控系统

zabbix简介

Zabbix 是一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。Zabbix 使用 MySQL、PostgreSQL、SQLite、Oracle 或 IBM DB2 储存资料。Server 端基于 C语言、Web 前端则是基于 PHP 所制作的。Zabbix 可以使用多种方式监视。可以只使用 Simple Check 不需要安装 Client 端,亦可基于 SMTP 或 HTTP 等各种协定做死活监视。在客户端如 UNIX、Windows 中安装 Zabbix Agent 之后,可监视 CPU 负荷、网络使用状况、硬盘容量等各种状态。而就算没有安装 Agent 在监视对象中,Zabbix 也可以经由 SNMP、TCP、ICMP检查,以及利用 IPMI、SSH、telnet 对目标进行监视。另外,Zabbix 包含 XMPP 等各种 Item 警示功能。

zabbix特性

  • 安装部署简单

  • web可视化管理界面

  • 开源

  • 分布式

  • 实时绘图

实验环境

  • Kubernetes版本1.16.0

  • zabbix版本4.4.5(官方镜像)

  • mysql版本8.0.19(官方镜像)

  • 猜你喜欢:使用zabbix监控K8s出现异常POD的解决方法

zabbix k8s部署

  • 部署mysql(采用hostpath做数据持久化)

1.创建pv

vim mysql-pv.yaml
kind: PersistentVolumeapiVersion: v1metadata:  name: mysql-pv-volume  labels:    type: localspec:  storageClassName: manual  capacity:    storage: 20Gi  accessModes:    - ReadWriteOnce  hostPath:    path: "/mnt/data"---apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: mysql-pv-claimspec:  storageClassName: manual  accessModes:    - ReadWriteOnce  resources:    requests:      storage: 20Gi

2.创建mysql配置文件(configMap)

  • (猜你喜欢:zabbix监控k8s出现的pod error status的解决方法

vim mysql-config.yaml
apiVersion: v1kind: ConfigMapmetadata:  name: mysql-configdata:  custom.cnf: |    [mysqld]    default_storage_engine=innodb    skip_external_locking    skip_host_cache    skip_name_resolve    default_authentication_plugin=mysql_native_password

3.创建mysql密码(secret)

[root@k8s-master-01 mysql]# echo -n password|base64cGFzc3dvcmQ=vim mysql-secret.yaml
apiVersion: v1kind: Secretmetadata:  name: mysql-user-pwddata:  mysql-root-pwd: cGFzc3dvcmQ=

4.创建mysql部署文件

vim mysql-deploy.yaml
apiVersion: v1kind: Servicemetadata:  name: mysqlspec:  type: NodePort  ports:  - port: 3306    nodePort: 30006    protocol: TCP    targetPort: 3306   selector:    app: mysql---apiVersion: apps/v1kind: Deploymentmetadata:  name: mysqlspec:  replicas: 1  selector:    matchLabels:      app: mysql  strategy:    type: Recreate  template:    metadata:      labels:        app: mysql    spec:      containers:      - image: mysql        name: mysql        imagePullPolicy: IfNotPresent        env:        - name: MYSQL_ROOT_PASSWORD          valueFrom:            secretKeyRef:              name: mysql-user-pwd              key: mysql-root-pwd        ports:        - containerPort: 3306          name: mysql        volumeMounts:        - name: mysql-config          mountPath: /etc/mysql/conf.d/        - name: mysql-persistent-storage          mountPath: /var/lib/mysql        - name: timezone          mountPath: /etc/localtime      volumes:      - name: mysql-config        configMap:          name: mysql-config      - name: timezone        hostPath:          path: /usr/share/zoneinfo/Asia/Shanghai      - name: mysql-persistent-storage        persistentVolumeClaim:          claimName: mysql-pv-claim

5.使用kubectl命令及以上yaml文件部署mysql

[root@k8s-master-01 mysql]# kubectl apply -f ./      configmap/mysql-config createdservice/mysql createddeployment.apps/mysql createdpersistentvolume/mysql-pv-volume createdpersistentvolumeclaim/mysql-pv-claim createdsecret/mysql-user-pwd created
  • 部署zabbix-server

vim zabbix-server-deploy.yaml
apiVersion: v1kind: Servicemetadata:  name: zabbixserverspec:  type: NodePort  ports:  - port:  10051    nodePort: 30051    protocol: TCP    targetPort: 10051  selector:    app: zabbix-server---apiVersion: apps/v1kind: Deploymentmetadata:  name: zabbix-serverspec:  replicas: 1  selector:    matchLabels:      app: zabbix-server  template:    metadata:      labels:        app: zabbix-server    spec:      containers:        - name: zabbix-server          image: zabbix/zabbix-server-mysql          imagePullPolicy: IfNotPresent          ports:          - containerPort: 10051            name: server            protocol: TCP          readinessProbe:            tcpSocket:              port: server            initialDelaySeconds: 5            periodSeconds: 10          livenessProbe:            tcpSocket:              port: server            initialDelaySeconds: 15            periodSeconds: 20          env:          - name: DB_SERVER_HOST            value: "mysql"          - name: MYSQL_USER            value: "zabbix"          - name: MYSQL_PASSWORD            value: "zabbix"          - name: MYSQL_DATABASE            value: "zabbix"          - name: ZBX_CACHESIZE            value: "1024M"          - name: ZBX_TRENDCACHESIZE            value: "1024M"          - name: ZBX_HISTORYCACHESIZE            value: "2048M"          - name: ZBX_HISTORYINDEXCACHESIZE            value: "1024M"          - name: ZBX_STARTTRAPPERS            value: "5"          - name: ZBX_STARTPREPROCESSORS            value: "10"          - name: ZBX_STARTDBSYNCERS            value: "10"          - name: DB_SERVER_PORT            value: "3306"        - name: zabbix-agent          image: zabbix/zabbix-agent          imagePullPolicy: Always          ports:          - containerPort: 10050            name: zabbix-agent          env:          - name: ZBX_HOSTNAME            value: "Zabbix server"          - name: ZBX_SERVER_HOST            value: "127.0.0.1"          - name: ZBX_PASSIVE_ALLOW            value: "true"          - name: ZBX_STARTAGENTS            value: "3"          - name: ZBX_TIMEOUT            value: "10"          securityContext:            privileged: true
  • 部署zabbix-web

vim zabbix-web.yaml
apiVersion: v1kind: Servicemetadata:  name: zabbix-webspec:  type: NodePort  ports:  - port: 80    protocol: TCP    nodePort: 30080    targetPort: 80  selector:    app: zabbix-web---apiVersion: apps/v1kind: Deploymentmetadata:  name: zabbix-webspec:  replicas: 2  selector:    matchLabels:      app: zabbix-web  template:    metadata:      labels:        app: zabbix-web    spec:      containers:      - image: zabbix/zabbix-web-nginx-mysql        name: zabbix-web        imagePullPolicy: IfNotPresent        ports:        - containerPort: 80          name: web          protocol: TCP        env:        - name: DB_SERVER_HOST          value: "mysql"        - name:  ZBX_SERVER_HOST          value: "zabbixserver"        - name: MYSQL_USER          value: "zabbix"        - name: MYSQL_PASSWORD          value: "zabbix"        - name: TZ          value: "Asia/Shanghai"

使用kubectl命令及以上yaml文件部署

[root@k8s-master-01 zabbix]# kubectl apply -f ./service/zabbixserver createddeployment.apps/zabbix-server createdservice/zabbix-web createddeployment.apps/zabbix-web created
  • 查看部署的组件状态

[root@k8s-master-01 zabbix]# kubectl get deploy,pod,svc,cm,secret,pv,pvc -o wideNAME                            READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS                   IMAGES                                           SELECTORdeployment.apps/mysql           1/1     1            1           15m     mysql                        mysql                                            app=mysqldeployment.apps/zabbix-server   1/1     1            1           3m23s   zabbix-server,zabbix-agent   zabbix/zabbix-server-mysql,zabbix/zabbix-agent   app=zabbix-serverdeployment.apps/zabbix-web      2/2     2            2           3m23s   zabbix-web                   zabbix/zabbix-web-nginx-mysql                    app=zabbix-webNAME                                READY   STATUS    RESTARTS   AGE     IP             NODE          NOMINATED NODE   READINESS GATESpod/mysql-ffcc44677-g2tlr           1/1     Running   0          15m     10.244.0.126   k8s-node-01              pod/zabbix-server-75cdd8865-rnxhx   2/2     Running   0          3m24s   10.244.0.127   k8s-node-01              pod/zabbix-web-856989975-8k45c      1/1     Running   0          3m23s   10.244.0.128   k8s-node-01              pod/zabbix-web-856989975-hxdfl      1/1     Running   0          3m24s   10.244.1.118   k8s-node-02              NAME                   TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)           AGE     SELECTORservice/kubernetes     ClusterIP   10.0.0.1             443/TCP           88d     service/mysql          NodePort    10.0.0.15            3306:30006/TCP    15m     app=mysqlservice/zabbix-web     NodePort    10.0.0.189           80:30080/TCP      3m23s   app=zabbix-webservice/zabbixserver   NodePort    10.0.0.234           10051:30051/TCP   3m23s   app=zabbix-serverNAME                     DATA   AGEconfigmap/mysql-config   1      15mNAME                         TYPE                                  DATA   AGEsecret/default-token-7qhlz   kubernetes.io/service-account-token   3      88dsecret/mysql-user-pwd        Opaque                                1      15msecret/tls-secret            kubernetes.io/tls                     2      61dNAME                               CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS   REASON   AGE   VOLUMEMODEpersistentvolume/mysql-pv-volume   20Gi       RWO            Retain           Bound    default/mysql-pv-claim   manual                  15m   FilesystemNAME                                   STATUS   VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS   AGE   VOLUMEMODEpersistentvolumeclaim/mysql-pv-claim   Bound    mysql-pv-volume   20Gi       RWO            manual         15m   Filesystem
  • 通过浏览器访问测试

浏览器地址栏输入任意node节点的ip:30080

输入用户名及密码访问

默认用户:Admin默认密码:zabbix

至此k8s部署zabbix-server测试完成。

本文暂不展开说明k8s基础环境部署,后期再专门就k8s基础环境部署做专门说明。

0