手把手教你实现zabbix对Kubernetes的监控

手把手教你实现zabbix对Kubernetes的监控

Posted by ChloeClockc on December 10, 2022

手把手教你实现zabbix对Kubernetes的监控

Zabbix 6.0 新特性

​ Zabbix 6.0 LTS新增Kubernetes监控功能,可以在Kubernetes系统从多个维度采集指标。我们今天就来实现Zabbix6.0对K8S的监控。

架构

指标模板

K8S集群以及组件模板

模板名称 解释
Kubernetes API server by HTTP K8S ApiServer组件指标模板
Kubernetes cluster state by HTTP K8S 集群指标模板
Kubernetes Controller manager by HTTP K8S ControllerManager组件指标模板
Kubernetes kubelet by HTTP K8S Kubelet组件指标模板
Kubernetes nodes by HTTP K8S 集群节点发现以及状态指标模板
Kubernetes Scheduler by HTTP K8S Scheduler组件指标模板

K8S节点基础信息指标模板

模板名称 解释
Linux by Zabbix agent OS Linux系统监控模板

方法

主要监控方式

Agent

通过zabbix agent客户端,采集集群节点的CPU、内存、磁盘等基础信息指标。

Agentless

通过Zabbix内置的“HTTP agent”、“Script”两种类型的监控项,无需安装客户端,通过访问被监控端的API接口即可采集监控指标数据,主要用于K8S集群、服务组件、pod容器状态及性能指标的采集。

机器分布

本次实现使用两台虚拟机

主机名 IP
k8s-master01 192.168.119.81
k8s-node01 192.168.119.91

部署Zabbix Proxy、Agent

在K8S集群中部署Zabbix Proxy 与 Zabbix Agent监控组件,这里采用官方提供的Helm Chart来安装。

文档:https://git.zabbix.com/projects/ZT/repos/kubernetes-helm/browse?at=refs%2Fheads%2Frelease%2F6.0

1、首先需要安装Helm工具

wget https://get.helm.sh/helm-v3.8.1-linux-amd64.tar.gz tar zxvf helm-v3.8.1-linux-amd64.tar.gz cp linux-amd64/helm /usr/local/bin/helm

2、添加Helm Chart Repository

helm repo add zabbix-chart-6.0 https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.0 helm repo list

3、下载Zabbix Helm Chart,并解压

helm pull zabbix-chart-6.0/zabbix-helm-chrt tar xf zabbix-helm-chrt-1.1.1.tgz

配置Chart.yaml

主要记录的是当前Chart的基本信息,包括版本、名称、依赖等。

参数 解释
apiVersion Chart API 版本
name Chart 名称
description 描述信息
home 项目home页面的URL
icon 用做icon的SVG或PNG图片URL
type Chart 类型
version 语义化2 版本
appVersion 包含的应用版本
dependencies 依赖的Chart列表,缓存在同级下charts目录中

配置values.yaml

主要为templates目录中定义K8S资源对象的配置文件变量值。

1、Zabbix Proxy 与 Agent参数配置

参数 解释
fullnameOverride zabbix 覆盖完全限定应用名称
kubeStateMetricsEnabled true 部署kube-state-metrics
zabbixProxy.image.tag alpine-6.0.1 ZabbixProxy Docker镜像tag,用于指定ZabbixProxy版本
zabbixProxy.env.ZBX_HOSTNAME zabbix-proxy-k8s ZabbixProxy hostname
zabbixProxy.env.ZBX_SERVER_HOST ZabbixServer地址
zabbixAgent.image.tag alpine-6.0.1 ZabbiAgent Docker镜像tag,用于指定ZabbiAgent版本

2、kube-state-metrics 依赖Chart参数配置

参数 解释
Image.repository bitnami/kube-state-metrics kube-state-metrics 镜像库配置
Image.tag 2.2.0 kube-state-metrics容器镜像本版本

1、创建monitoring命名空间

kubectl create namespace monitoring

2、Helm 安装Zabbix Chart

cd zabbix-helm-chrt helm install zabbix . --dependency-update -n monitoring

3、查看K8S Zabbix Pod

kubectl get pods -n monitoring -o wide

4、获取API接口访问Token

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

集群节点监控

1、页面创建Zabbix Proxy

注意此处的proxy ip 地址为kubectl get 到的值

2、创建“k8s-nodes”,挂载“Kubernets nodes by HTTP”,用于自动发现节点主机。

集群节点监控-宏变量配置

1、宏变量

{$KUBE.API.ENDPOINT} https://192.168.119.81:6443/api

{$KUBE.API.TOKEN} 之前获取的一长串值

{$KUBE.NODES.ENDPOINT.NAME} zabbix-agent

2、查看K8S服务endpoint信息

kubectl get ep -n monitoring

集群节点监控效果

1、自动发现的节点主机

2、最新数据

集群服务监控

创建“k8s-cluster”,挂载“Kubernetes cluster state by HTTP”,用于自动发现服务组件。

集群服务监控-宏变量配置

{$KUBE.API.HOST} 192.168.119.81
{$KUBE.API.PORT} 6443
{$KUBE.API.TOKEN}
{$KUBE.API_SERVER.PORT} 6443
{$KUBE.API_SERVER.SCHEME} https
{$KUBE.CONTROLLER_MANAGER.PORT} 10252
{$KUBE.CONTROLLER_MANAGER.SCHEME} http
{$KUBE.KUBELET.PORT} 10250
{$KUBE.KUBELET.SCHEME} https
{$KUBE.SCHEDULER.PORT} 10251
{$KUBE.SCHEDULER.SCHEME} http
{$KUBE.STATE.ENDPOINT.NAME} zabbix-kube-state-metrics

集群服务监控效果

1、自动发现的集群服务组件主机

2、最新数据

至此,我们已经完成了Zabbix6.0对K8S的监控。