Zabbix 监控 Kubernetes 集群

Zabbix 监控 Kubernetes 集群

Zabbix作为一个成熟且功能强大的监控系统,被许多企业广泛采用。它能够对各种IT基础设施进行全面的监控,包括服务器、网络设备、应用程序等。而将Zabbix与Kubernetes结合,可以实现对Kubernetes集群的全面监控,从而提高集群的可观察性和管理效率。

Zabbix 的最低标准是它在监控 Kubernetes 和云原生应用程序方面与 Prometheus 一样有效。

Zabbix 提供与 Prometheus、警报管理器和 Grafana for Kubernetes 类似的指标和触发器,因为它们都使用相同的后端工具来执行此操作。然而,Zabbix 可以在一个产品中做到这一点,同时仍然保持灵活性,并允许您监视几乎任何您可以编写代码来收集的内容。关于应用程序监控,Zabbix 可以转换 Prometheus 导出器和端点提供给它的 Prometheus 指标。此外,由于 Zabbix 可以调用任何 HTTP 端点,因此它可以监视没有专用 Prometheus 端点的应用程序,这与 Prometheus 不同。

准备kubernets集群

bash 复制代码
root@node40:~# kubectl get nodes -o wide
NAME     STATUS   ROLES           AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
node40   Ready    control-plane   60d   v1.29.3   192.168.72.40   <none>        Ubuntu 22.04.2 LTS   5.15.0-105-generic   containerd://1.7.15
node41   Ready    <none>          60d   v1.29.3   192.168.72.41   <none>        Ubuntu 22.04.2 LTS   5.15.0-76-generic    containerd://1.7.15
node42   Ready    <none>          60d   v1.29.3   192.168.72.42   <none>        Ubuntu 22.04.2 LTS   5.15.0-76-generic    containerd://1.7.15

准备可用的默认storageclass存储

bash 复制代码
root@node40:~# kubectl get sc
NAME                         PROVISIONER        RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
openebs-hostpath (default)   openebs.io/local   Delete          WaitForFirstConsumer   false                  60d

部署zabbix-server

项目地址:https://github.com/zabbix-community/helm-zabbix

本示例在kubernetes集群中部署zabbix-server。

添加helm仓库

bash 复制代码
helm repo add zabbix-community https://zabbix-community.github.io/helm-zabbix

安装zabbix-server

bash 复制代码
helm upgrade --install zabbix-server zabbix-community/zabbix \
 -n monitoring --create-namespace \
 --set zabbixWeb.service.type=NodePort \
 --set postgresql.persistence.enabled=true

查看创建的pods

bash 复制代码
root@kube001:~# kubectl -n monitoring get pods
NAME                                             READY   STATUS    RESTARTS   AGE
zabbix-server-postgresql-0                         1/1     Running   0          47m
zabbix-server-zabbix-server-6fd6c44b57-hrdlx       2/2     Running   0          47m
zabbix-server-zabbix-web-79d84c458b-pwt7c          1/1     Running   0          47m
zabbix-server-zabbix-webservice-b8765d785-rj6g2    1/1     Running   0          47m

查看创建的service

bash 复制代码
root@kube001:~# kubectl -n monitoring get svc
NAME                            TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)               AGE
zabbix-server-postgresql              ClusterIP   10.96.1.32    <none>        5432/TCP              48m
zabbix-server-zabbix-server           ClusterIP   10.96.3.147   <none>        10051/TCP,10052/TCP   48m
zabbix-server-zabbix-web              NodePort    10.96.2.122   <none>        80:31080/TCP          48m
zabbix-server-zabbix-webservice       ClusterIP   10.96.0.126   <none>        10053/TCP             48m

查看为postgresql创建的pvc持久卷申请

bash 复制代码
root@node40:~# kubectl -n monitoring get pvc
NAME                                         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       VOLUMEATTRIBUTESCLASS   AGE
postgresql-data-zabbix-server-postgresql-0   Bound    pvc-21a8a49b-cc14-4d62-b08c-ba3a4c20ea8b   5Gi        RWO            openebs-hostpath   <unset>                 47s

浏览器访问zabbix-web,通过NodePort service 端口在集群外访问,默认账号密码为Admin/zabbix

bash 复制代码
http://192.168.72.40:31080

web访问如下:

部署zabbix-agent

项目地址:https://git.zabbix.com/projects/ZT/repos/kubernetes-helm/browse

官方博客:https://blog.zabbix.com/monitoring-kubernetes-with-zabbix/25055/

helm chart地址:https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/7.0/

Zabbix 通过收集 Kubernetes API 和 kube-state-metrics 公开的指标来监控 Kubernetes。使用 Zabbix 提供的 Helm Chart 将监视集群所需的组件安装在集群内。 Helm Chart 包括作为守护进程集安装的 Zabbix 代理,用于监视每个节点上的本地资源和应用程序。还安装了Zabbix代理来收集监控数据并将其传输到外部Zabbix服务器。

只有 Zabbix proxy 需要访问 Zabbix server,而代理可以将数据发送到安装在与每个代理相同的命名空间中的代理。集群角色允许 Zabbix 通过 Kubernetes API 访问集群中的资源。虽然可以修改集群角色来限制授予 Zabbix 的权限,但这将导致某些项目不受支持。如果您想通过 Zabbix 充分利用 Kubernetes 监控,我们建议保持不变。

Zabbix Helm Chart 将 kube-state-metrics 项目安装为依赖项。您可能已经熟悉 Kubernetes 组织下的这个项目,该项目根据 Kubernetes 资源的当前状态生成 Prometheus 格式的指标。此外,如果您有使用 Prometheus 监控集群的经验,您可能已经安装了它。如果是这种情况,您可以指向此部署,而不是安装另一个部署。

添加helm仓库

basg 复制代码
helm repo add zabbix-chart-7.0 https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/7.0

安装zabbix-agent

bash 复制代码
helm upgrade --install zabbix-agent zabbix-chart-7.0/zabbix-helm-chrt \
  -n monitoring --create-namespace \
  --set zabbixProxy.enabled=true \
  --set zabbixProxy.env[0].name=ZBX_HOSTNAME \
  --set zabbixProxy.env[0].value=zabbix-proxy \
  --set zabbixProxy.env[1].name=ZBX_SERVER_HOST \
  --set zabbixProxy.env[1].value=zabbix-server-zabbix-server \
  --set zabbixAgent.enabled=true

查看创建的pods

bash 复制代码
root@node40:~# kubectl -n monitoring get pods
......
NAME                                               READY   STATUS    RESTARTS   AGE
zabbix-agent-9dxl6                                 1/1     Running   0          43m
zabbix-agent-kube-state-metrics-67f68d9db9-fpw79   1/1     Running   0          43m
zabbix-agent-svv4l                                 1/1     Running   0          43m
zabbix-agent-wq2dt                                 1/1     Running   0          43m
zabbix-proxy-58bcbcf55c-g44q6                      1/1     Running   0          39m

查看创建的service

bash 复制代码
......
root@node40:~# kubectl -n monitoring get svc
NAME                                  TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)               AGE
zabbix-agent-kube-state-metrics       ClusterIP   10.96.2.212   <none>        8080/TCP              43m
zabbix-agent-zabbix-helm-chrt-agent   ClusterIP   10.96.1.235   <none>        10050/TCP             43m
zabbix-agent-zabbix-helm-chrt-proxy   ClusterIP   10.96.2.129   <none>        10051/TCP             43m

需要从我们的 zabbix 服务器中提取对 api 服务器进行身份验证所需的 zabbix 服务帐户令牌。将此命令的输出保存在某处,因为我们需要它来配置 zabbix UI。

bash 复制代码
kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d

配置zabbix-web

添加代理

我们将通过管理 -> 代理来添加代理:

  1. 单击创建代理。因为默认情况下这是一个主动代理,所以我们只需要指定代理名称。如果您没有对 helm 图表进行任何更改,则默认为 zabbix-proxy。如果您想以不同的方式命名,可以在 helm 图表中更改代理的环境变量 zbx_hostname。我们暂时将其保留为默认值。您将输入该名称,然后单击"添加"。几分钟后,您将开始看到它说代理已被看到。
  2. 创建一个Host Group,放置与Kubernetes相关的主机。对于这个例子,我们创建一个,我们将其称为 Kubernetes。
  3. 前往配置下的主机页面,然后单击创建主机。第一个主机将收集与监控 Kubernetes 节点相关的指标,我们将使用 Zabbix 低级发现来发现节点并创建新主机。
  4. 将此主机命名为 Kubernetes Nodes。我们还将将此主机分配给我们创建的 Kubernetes 主机组,并通过 HTTP 附加模板 Kubernetes 节点。
  5. 将"Monitored by proxy"行更改为之前创建的代理,称为 zabbix-proxy。
  6. 单击"宏"选项卡并选择"继承和宿主宏"。您应该能够看到可能设置为影响集群中监视内容的所有宏。在这种情况下,我们需要更改前两个宏。第一个 {KUBE.API.ENDPOINT.URL} 应设置为 Kubernetes API 端点。在我们的例子中,我们可以将其设置为我之前提到的:default.svc.cluster.local:443/api。接下来,应将令牌设置为之前从命令行检索到的值。
  7. 点按添加。几分钟后,您应该开始在最新数据页上看到数据,并在代表每个节点的主机页上看到新主机。

zabbix-web创建proxy,选择管理--Proxy

确认proxy 状态为online

添加主机

新建主机组,选择数据采集--主机群组

zabbix-web创建host,选择数据采集--主机,在Templates/Applications中勾选Kubernetes nodes by HTTP模板。

配置宏

您还需要 Kubernetes API 端点。在大多数情况下,您将使用已安装的代理,而不是直接使用服务器或集群外部的代理。如果是这种情况,您可以使用 API 的服务 DNS。我们应该能够通过指向 https://kubernetes.default.svc.cluster.local:443 来访问它。

查看kubernetes监控指标,选择监测--最新数据

创建附加主机

现在让我们创建另一个主机来表示通过 Kubernetes API 和 kube-state-metrics 端点可用的指标。

  1. 再次单击"创建主机",将该主机命名为"Kubernetes Cluster State",并再次将其添加到 Kubernetes 组中。
  2. 我们还通过 HTTP 附加 Kubernetes 集群状态模板。同样,我们将选择之前创建的代理。
  3. 假设 Helm Chart 安装过程中没有进行任何其他更改,我们现在可以添加该主机。

几分钟后,您应该会收到与集群状态相关的指标,包括代表每个节点上 kubelet 的主机。

相关推荐
狂奔solar32 分钟前
分享个好玩的,在k8s上部署web版macos
前端·macos·kubernetes
mit6.8241 小时前
[Docker#9] 存储卷 | Volume、Bind、Tmpfs | -v/mount | MySQL 灾难恢复 | 问题
linux·运维·docker·容器·架构
qq_167401511 小时前
Docker 组添加用户,设置允许普通用户操作 docker
docker·容器
Z1eaf_complete1 小时前
Docker的基础使用
运维·docker·容器·云计算
李少兄2 小时前
Docker 命令总结:从入门到入土
docker·容器·eureka
想学习java初学者4 小时前
Docker compose部署elasticsearch(单机版)
运维·docker·容器
微刻时光5 小时前
Docker部署Nginx
运维·nginx·docker·容器·经验
@东辰6 小时前
【golang-技巧】-自定义k8s-operator-by kubebuilder
开发语言·golang·kubernetes
小安运维日记6 小时前
CKA认证 | Day3 K8s管理应用生命周期(上)
运维·云原生·容器·kubernetes·云计算·k8s
陈小肚6 小时前
k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储
docker·容器·kubernetes