1. 部署 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
  1. 部署 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
  1. 部署 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
  1. 访问 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 中依次进行以下操作:

  1. 点击左侧菜单栏中的 'Configuration' 选项卡;
  2. 在左侧的 'Hosts' 下,选择 'Hosts';
  3. 点击右上角的 'Create host' 按钮;
  4. 在 'Host' 页面中,输入要监控的节点的名称,并在 'Groups' 下选择 'Linux servers';
  5. 在 'Templates' 下选择 'Template OS Linux';
  6. 在 'Agents' 下,选择 'Zabbix agent',并在 'IP address' 中输入要监控的节点的 IP 地址;
  7. 点击 'Add' 按钮,完成节点的添加。

现在,我们可以在 Zabbix Web 的 UI 中查看各个节点的监控信息了。可以在左侧菜单栏中选择 'Monitoring' 选项卡,并在 'Latest data' 下查看各个节点的监控数据。

Kubernetes 上部署 Zabbix 监控系统

原文地址: https://www.cveoy.top/t/topic/owH2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录