云原生热潮席卷全球
KCD上海站2024圆满落幕
累计600+参会者报名
300+开发者齐聚上海燃动现场
台上共同探讨云原生技术的最新进展
Zabbix参与其中
分享Zabbix对K8S的监控支持!
这次参与充分体现了Zabbix对于云原生技术的高度关注及积极探索,同时也展示了Zabbix在容器化环境监控方面的最新成果和前瞻性思考。大会上分享了Zabbix如何与Kubernetes平台深度融合,实现从基础架构到微服务全方位的智能化监控。
以下内容将详细介绍Zabbix对Kubernetes集群的深度监控能力,包括节点状态、Pod生命周期管理、容器资源使用率、网络流量分析以及服务健康状况等方面的内容,简化运维人员的工作流程,并提升大规模容器环境下的问题定位和故障排查效率。
文本将探讨如何使用Zabbix监控Kubernetes集群,并了解Zabbix生成的指标。
请查看详细的Zabbix Kubernetes监控配置和部署指南。
目 录
1. 为什么选择Zabbix监控Kubernetes?
2. Zabbix Helm Chart
3. 安装Zabbix Helm Chart
4. 添加Proxy
5. 创建额外的主机
在选择Zabbix作为Kubernetes监控工具之前,我们问自己:“为什么我们选择使用Zabbix而不是Prometheus、Grafana和alertmanager呢?”
毕竟,它们已经成为云生态系统中的标准监控工具。我们决定对Zabbix的最低要求是,它在监控Kubernetes和云原生应用程序方面至少与Prometheus一样有效。
通过探索,我们得出结论, Zabbix满足(甚至超过)了这一最低要求。 Zabbix提供与Prometheus、alert manager和Grafana相似的指标和触发器,因为它们都使用相同的后端工具来实现这一点。
但是,Zabbix可以在一个产品中完成这一切,同时保持灵活性,并允许您监控几乎任何可以编写代码采集的内容。在应用程序监控方面,Zabbix可以将由Prometheus exporter和端点提供的Prometheus指标转换。
此外,由于Zabbix可以调用任何HTTP端点,因此它可以监控没有专用Prometheus端点的应用程序,而Prometheus不能做到这一点。
Zabbix采集Kubernetes API和kube-state-metrics公开的指标监控Kubernetes。Zabbix Helm Chart在集群中安装监控组件。Helm Chart包括以Daemonset方式运行的Zabbix Agent,用于监控每个节点上的本地资源和应用程序。还安装了一台Zabbix Proxy,用于采集监控数据并将其传输到外部的Zabbix Server。
只有Zabbix Proxy需要访问Zabbix Server,而Zabbix Agent可以将数据发送到与每个Agent安装在相同命名空间中的Zabbix Proxy。
基于集群角色,Zabbix可以通过Kubernetes API访问集群中的资源。虽然可以修改集群角色以限制授予Zabbix的权限,但这将导致一些监控项变为不支持的。我们建议如果希望充分利用Zabbix监控Kubernetes,则保持不变。
Zabbix Helm Chart将kube-state-metrics项目作为依赖项安装。您可能已经熟悉这个项目,该项目在Kubernetes组织下生成基于当前Kubernetes资源状态的Prometheus格式指标。
此外,如果您有使用Prometheus监控集群的经验,可能已经安装了它。如果是这种情况,您可以指向此部署,而不是另外安装。
在本教程中,我们将通过Zabbix Helm Chart安装kube-state-metrics。
要获取有关跳过此步骤的更多信息,请参阅Zabbix Kubernetes Helm Chart中的values文件。
现在我们已经解释了Zabbix Helm Chart的工作原理,让我们开始安装它。在这个示例中,我们将假设您有一个运行中的Zabbix 6.0(或更高版本)实例,可以从要监控的集群访问。我在与我们想要监控的集群不同的集群中运行一个6.0实例。服务器可通过DNS名称mdeforest.zabbix.atsgroup.io和非标准端口31103访问。
我们将首先安装最新的Zabbix Helm Chart。
建议访问,获取在本教程中可能会提到的任何来源。在那里,您将找到指向Zabbix Helm Chart和模板的链接。在大多数情况下,我们将按照自述文件中概述的步骤进行操作。
使用终端窗口,我将确保活动集群设置为要监控的集群:
kubectl config use-context
然后,我将Zabbix Chart存储库添加到本地Helm存储库:
helm repo add zabbix-chart-6.0 https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.0/
如果您使用的是Zabbix 6.2或更高版本,请将此命令中的6.0引用更改为6.2。
根据您的情况,您需要为安装设置一些值。在大多数情况下,您只需要为Zabbix Agent和Proxy设置一些环境变量。完整的值和环境变量列表可在Helm Chart存储库中找到,以及Docker Hub上的Zabbix Agent和Proxy镜像。
在这种情况下,我正在为Zabbix Agent设置被动服务器环境变量,以允许任何IP连接。对于Zabbix Proxy,我正在设置它可访问的服务器主机以及非标准端口。我还在这里设置了一些与缓存大小相关的变量。这些变量可能取决于您的集群大小,因此您可能需要调整它们以找到正确的值。
现在,我已经准备好values文件,可以开始安装chart。因此,我们将使用以下命令。当然,chart路径可能根据您使用的版本而有所不同。
helm install -f [-n ] zabbix zabbix-chart-6.0/zabbix-helm-chart
您还可以选择添加一个命名空间。您必须等到一切都运行正常,使用以下命令来检查:
watch kubectl get pods
现在,一切都安装完成,我们准备在Zabbix中设置与集群关联的主机。在我们获取所需的所有信息之前的最后一步是获取通过使用Helm Chart安装的服务帐户创建的令牌。我们将通过运行以下命令获取创建的服务帐户的名称:
kubectl get secret -o jsonpath={.data.token} zabbix service-account | base64 -d
这将获取为服务帐户创建的密钥,并从中提取令牌,然后通过base64实用程序传递给解码。请务必将该值复制到某个地方,因为稍后您将需要它。
您还需要Kubernetes API端点。在大多数情况下,您将使用安装在集群内部的Zabbix Proxy而不是直接使用Zabbix Server或集群外部的Zabbix Proxy。如果是这种情况,您可以使用API的服务DNS。
我们应该能够通过指向来访问它。
如果不是这种情况,您可以使用以下命令的输出:
kubectl cluster-info
现在,让我们转到Zabbix UI。我们需要的所有模板都包含在Zabbix 6中。如果由于某种原因找不到它们,可以通过访问我之前在Zabbix网站上指出的集成页面下载并导入。
我们将转到Administration -> Proxies来添加Proxy:
1. 单击Create Proxy按钮。因为这默认是主动Proxy,所以我们只需要指定Proxy名称。如果您没有对Helm Chart进行任何更改,则这应该默认为zabbix-proxy。如果您想以不同的方式命名它,可以在Helm Chart中为Proxy更改环境变量zbx_hostname。我们现在将其保留为默认值。输入此名称,然后单击“Add”按钮。几分钟后,Proxy已被看到。
2. 创建一个主机组以放置与Kubernetes相关的主机。例如,我们创建一个名为Kubernetes的主机组。
3. 转到配置下的主机页面,单击Create Host按钮。第一个主机将采集与监控Kubernetes节点相关的指标,并且我们将使用Zabbix低级别自动发现来发现节点并创建新主机。
4. 给此主机命名Kubernetes Nodes。我们还将此主机分配给创建的Kubernetes主机组,并关联模板kubernetes nodes by HTTP。
5. 将“Monitored by proxy”一行更改为之前创建的Proxy,名为zabbix-proxy。
6. 单击Macros选项卡,并选择“Inherited and host macros”。您应该能够看到可能设置为影响集群中监控内容的所有宏。在这种情况下,我们需要更改前两个宏。第一个宏{KUBE.API.ENDPOINT.URL}应设置为Kubernetes API端点。在我们的环境中,设置为之前提到的内容:default.svc.cluster.local:443/api。接下来,令牌应设置为从命令行之前检索到的值。
7. 点击Add按钮。几分钟后,您应该开始在最新数据页面上看到数据,以及在主机页面上表示每个节点的新主机。
现在让我们创建另一个主机,该主机将代表通过Kubernetes API和kube-state-metrics端点可用的指标。
再次单击Create Host按钮,将此主机命名为Kubernetes Cluster State,并再次将其添加到Kubernetes组中。
让我们再次为该主机关联HTTP方式采集数据的模板。同样,我们将选择之前创建的Proxy。
在Macro部分中,将kube.api.url更改为我们之前使用的相同内容,但这次在末尾省略/api。简单地:default.svc.cluster.local:443。确保像之前那样设置令牌。
假设在安装Helm Chart时没有更改任何其他内容,现在我们可以添加该主机。
几分钟后,您应该会收到与群集状态相关的指标,包括代表每个节点上的kubelet的主机。
下一步是什么? 现在,您已准备好在Zabbix中开始监控您的Kubernetes集群!试试看,并在评论中告诉我们您的想法。
Zabbix Meetup重庆站
Zabbix Meetup重庆站将在5月25日举办,免费报名,欢迎参加,了解更多客户案例!
Zabbix大中华区首位培训师周松荣获“5周年优秀培训师”称号,轻易不发言,发言必属精品,将给大家带来重磅精彩案例和Zabbix7.0新功能分享!
5
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.