在 Kubernetes 集群中部署 Zabbix 监控系统,核心在于资源编排与网络连通性处理。以下记录完整的搭建流程,包含镜像准备、组件 YAML 配置及 Proxy 的特殊处理方案。
1. 镜像准备
首先将 Zabbix 相关镜像拉取并推送到私有仓库 Harbor,确保集群内可访问。
docker login 192.168.1.206
# 输入用户名和密码后显示 Login Succeeded
docker pull zabbix/zabbix-web-nginx-mysql
docker pull zabbix/zabbix-server-mysql
docker pull zabbix/zabbix-proxy-mysql
docker pull zabbix/zabbix-snmptraps
docker pull mariadb
重复以下步骤打标签并推送:
docker tag zabbix-web-nginx-mysql 192.168.1.206/mzh/zabbix-web-nginx-mysql
docker push 192.168.1.206/mzh/zabbix-web-nginx-mysql
2. 数据库部署 (MariaDB)
创建 MariaDB 的 Deployment 和 Service 文件。注意存储卷挂载 NFS 路径需提前准备好。
mariadb-server.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mariadb-server
spec:
replicas: 1
selector:
matchLabels:
app: mariadb-server
template:
metadata:
labels:
app: mariadb-server
spec:
containers:
- image: 192.168.1.206/mzh/mariadb
name: mariadb-server
ports:
- containerPort: 3306
name: db
protocol: TCP
env:
- name: MYSQL_ROOT_PASSWORD
value: "redhat"
volumeMounts:
- name: db-nfs
mountPath: /var/lib/mysql
volumes:
- name: db-nfs
nfs:
server: 192.168.1.206
path: "/bak/mariadb-server"
mariadb-server-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: mariadbserver
labels:
app: mariadbserver
spec:
selector:
app: mariadb-server
ports:
- name: db
port: 3306
protocol: TCP
应用配置:
kubectl create -f mariadb-server.yaml -f mariadb-server-svc.yaml
3. Zabbix Server 部署
Server 组件需要连接数据库,环境变量中指定了 DB 地址及凭据。
zabbix-server.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: zabbix-server
spec:
replicas: 1
selector:
matchLabels:
app: zabbix-server
template:
metadata:
labels:
app: zabbix-server
spec:
containers:
- image: 192.168.1.206/mzh/zabbix-server-mysql
name: zabbix-server
ports:
- containerPort: 10051
name: server
protocol: TCP
env:
- name: DB_SERVER_HOST
value: "mariadbserver"
- name: MYSQL_USER
value: "zabbix"
- name: MYSQL_PASSWORD
value: "zabbix"
- name: MYSQL_DATABASE
value: "zabbix"
- name: ZBX_CACHESIZE
value: "2048M"
zabbix-server-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: zabbixserver
labels:
app: zabbix-server
spec:
clusterIP: 10.254.0.3
selector:
app: zabbix-server
ports:
- name: server
port: 10051
protocol: TCP
应用配置:
kubectl create -f zabbix-server.yaml -f zabbix-server-svc.yaml
4. Zabbix Web 部署
Web 端负责提供 UI 界面,通过 NodePort 暴露服务以便外部访问。
zabbix-web.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: zabbix-web
spec:
replicas: 1
selector:
matchLabels:
app: zabbix-web
template:
metadata:
labels:
app: zabbix-web
spec:
containers:
- image: 192.168.1.206/mzh/zabbix-web-nginx-mysql
name: zabbix-web
ports:
- containerPort: 80
name: web
protocol: TCP
env:
- name: DB_SERVER_HOST
value: "mariadbserver"
- name: ZBX_SERVER_HOST
value: "zabbixserver"
- name: MYSQL_USER
value: "zabbix"
- name: MYSQL_PASSWORD
value: "zabbix"
- name: TZ
value: "Asia/Shanghai"
zabbix-web-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: zabbix-web
labels:
app: zabbix-web
spec:
type: NodePort
selector:
app: zabbix-web
ports:
- name: web
port: 80
protocol: TCP
应用配置:
kubectl create -f zabbix-web.yaml -f zabbix-web-svc.yaml
验证服务状态:
kubectl get svc
# 输出示例:zabbix-web 10.254.165.249 <nodes> 80:10158/TCP 26d
此时可通过浏览器访问对应 IP 进入 Zabbix 登录页面。
5. Proxy 代理配置说明
关于 Zabbix Proxy,原计划使用容器化部署,但实际测试发现容器内部无法访问外部 Agent 获取数据。因此调整方案,将 Proxy 安装在 K8s 集群外的物理节点上,利用固定 ClusterIP 进行通信。
此前创建的 zabbix-server 和 mariadb-proxy 分别分配了固定的 ClusterIP(10.254.0.3 和 10.254.0.4),Proxy 配置文件需指向这些地址。
proxy.conf 关键参数:
Server=10.254.0.3
ServerPort=10051
Hostname=Zabbix_proxy01
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
DBHost=10.254.0.4
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=zabbix
JavaGateway=192.168.1.208
JavaGatewayPort=10052
StartJavaPollers=5
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
CacheSize=4G
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/sbin/fping
LogSlowQueries=3000
具体安装过程参考官方文档即可,重点在于网络策略允许 Proxy 访问上述 IP 端口。

