Kubernetes 上部署 Zabbix 监控系统
- 部署 Zabbix Server 在 node2 且部署在 namespace 'mirrors' 内,使用 service,映射端口 8888
首先,创建一个名为 'mirrors' 的 namespace:
kubectl create namespace mirrors
然后,创建一个 'zabbix-server-deployment.yaml' 文件,并在其中定义 Zabbix Server 的 deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: zabbix-server
namespace: mirrors
spec:
replicas: 1
selector:
matchLabels:
app: zabbix-server
template:
metadata:
labels:
app: zabbix-server
spec:
containers:
- name: zabbix-server
image: zabbix/zabbix-server-mysql:latest
ports:
- containerPort: 10051
env:
- name: DB_SERVER_HOST
value: zabbix-mysql
- name: MYSQL_USER
value: zabbix
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: zabbix-db-secret
key: password
- name: MYSQL_DATABASE
value: zabbix
volumeMounts:
- name: zabbix-server-persistent-storage
mountPath: /var/lib/zabbix
volumes:
- name: zabbix-server-persistent-storage
emptyDir: {}
在上面的定义中,我们使用了 'zabbix/zabbix-server-mysql' 的镜像,并定义了一个名为 'zabbix-server' 的 container,运行在端口 10051 上。我们还将 Zabbix Server 部署到了 'mirrors' 这个 namespace 中,并挂载了一个名为 'zabbix-server-persistent-storage' 的 volume 来存储 Zabbix Server 的数据。
接下来,我们需要创建一个 'zabbix-server-service.yaml' 文件,并在其中定义 Zabbix Server 的 service:
apiVersion: v1
kind: Service
metadata:
name: zabbix-server
namespace: mirrors
spec:
selector:
app: zabbix-server
ports:
- name: zabbix
port: 8888
targetPort: 10051
type: ClusterIP
在上面的定义中,我们将 Zabbix Server 的 service 暴露在 8888 端口,并将它的 targetPort 设置为 10051。
最后,我们需要使用 kubectl apply 命令来部署 Zabbix Server 的 deployment 和 service:
kubectl apply -f zabbix-server-deployment.yaml
kubectl apply -f zabbix-server-service.yaml
- 部署 Zabbix UI 在 node3 且部署在 namespace 'webui' 内,使用 service,映射端口 8080
类似于上面的步骤,我们需要首先创建一个名为 'webui' 的 namespace:
kubectl create namespace webui
然后,我们可以创建一个 'zabbix-web-deployment.yaml' 文件,并在其中定义 Zabbix Web 的 deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: zabbix-web
namespace: webui
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-mysql
- name: MYSQL_USER
value: zabbix
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: zabbix-db-secret
key: password
- name: MYSQL_DATABASE
value: zabbix
- name: ZBX_SERVER_HOST
value: zabbix-server
- name: PHP_TZ
value: Asia/Shanghai
ports:
- containerPort: 80
volumeMounts:
- name: zabbix-web-persistent-storage
mountPath: /var/lib/zabbix
volumes:
- name: zabbix-web-persistent-storage
emptyDir: {}
在上面的定义中,我们使用了 'zabbix/zabbix-web-nginx-mysql' 的镜像,并定义了一个名为 'zabbix-web' 的 container,运行在端口 80 上。我们还将 Zabbix Web 部署到了 'webui' 这个 namespace 中,并挂载了一个名为 'zabbix-web-persistent-storage' 的 volume 来存储 Zabbix Web 的数据。
接下来,我们需要创建一个 'zabbix-web-service.yaml' 文件,并在其中定义 Zabbix Web 的 service:
apiVersion: v1
kind: Service
metadata:
name: zabbix-web
namespace: webui
spec:
selector:
app: zabbix-web
ports:
- name: http
port: 8080
targetPort: 80
type: ClusterIP
在上面的定义中,我们将 Zabbix Web 的 service 暴露在 8080 端口,并将它的 targetPort 设置为 80。
最后,我们需要使用 kubectl apply 命令来部署 Zabbix Web 的 deployment 和 service:
kubectl apply -f zabbix-web-deployment.yaml
kubectl apply -f zabbix-web-service.yaml
- 部署 Zabbix Agent 在所有 node,且部署在 namespace 'default' 内
在所有 node 上部署 Zabbix Agent,我们可以使用 DaemonSet 来实现。首先,我们需要创建一个 'zabbix-agent-daemonset.yaml' 文件,并在其中定义 Zabbix Agent 的 daemonset:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: zabbix-agent
spec:
selector:
matchLabels:
app: zabbix-agent
template:
metadata:
labels:
app: zabbix-agent
spec:
containers:
- name: zabbix-agent
image: zabbix/zabbix-agent:latest
ports:
- containerPort: 10050
name: zabbix-agent
env:
- name: ZBX_HOSTNAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
volumeMounts:
- name: var-run
mountPath: /var/run/docker.sock
- name: sys-fs
mountPath: /sys/fs/cgroup
volumes:
- name: var-run
hostPath:
path: /var/run/docker.sock
- name: sys-fs
hostPath:
path: /sys/fs/cgroup
在上面的定义中,我们使用了 'zabbix/zabbix-agent' 的镜像,并定义了一个名为 'zabbix-agent' 的 container,运行在端口 10050 上。我们还将 Zabbix Agent 部署到了 'default' 这个 namespace 中,并将它的 hostname 设置为节点的名称。
接下来,我们需要使用 kubectl apply 命令来部署 Zabbix Agent 的 daemonset:
kubectl apply -f zabbix-agent-daemonset.yaml
- 访问 UI 可以监控到各个节点信息怎么做
要访问 Zabbix Web 的 UI,我们需要先暴露 Zabbix Web 的 service,以便可以从外部访问它。我们可以使用 kubectl port-forward 命令来实现:
kubectl port-forward service/zabbix-web 8080:8080 -n webui
然后,我们可以在浏览器中访问 http://localhost:8080 来访问 Zabbix Web 的 UI。
在 Zabbix Web 的 UI 中,我们需要添加各个节点的主机信息,以便 Zabbix Web 可以收集并显示它们的监控信息。我们可以在 Zabbix Web 的 UI 中依次进行以下操作:
- 点击左侧菜单栏中的 'Configuration' 选项卡;
- 在左侧的 'Hosts' 下,选择 'Hosts';
- 点击右上角的 'Create host' 按钮;
- 在 'Host' 页面中,输入要监控的节点的名称,并在 'Groups' 下选择 'Linux servers';
- 在 'Templates' 下选择 'Template OS Linux';
- 在 'Agents' 下,选择 'Zabbix agent',并在 'IP address' 中输入要监控的节点的 IP 地址;
- 点击 'Add' 按钮,完成节点的添加。
现在,我们可以在 Zabbix Web 的 UI 中查看各个节点的监控信息了。可以在左侧菜单栏中选择 'Monitoring' 选项卡,并在 'Latest data' 下查看各个节点的监控数据。
原文地址: https://www.cveoy.top/t/topic/owH2 著作权归作者所有。请勿转载和采集!