网上监控
Kubernetes的工具大部分是Promethues,基本很少有关于Zabbix实现监控Kubernetes的文章。Zabbix 6.0 LTS新增Kubernetes监控功能,可以从Kubernetes系统从多个维度采集指标。我们通过这篇文章实现对Kubernetes的监控。

一、集群监控模板
在 Zabbix 6.0 版本中默认带 Kubernetes 监控模板,如果是从低版本升级上来的,我们也可以通过下载官方模板进行导入。官方模板地址
| 模板名称 | 解释 |
|---|---|
| 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组件指标模板 |
Kubernetes 基础依赖模板
| 模板名称 | 解释 |
|---|---|
| Linux by Zabbix agent | OS Linux系统监控模板 |
二、服务部署
官方给我们提供了全套的容器化服务部署方式,这里采用官方提供的 Helm Chart 来安装。
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 repo add zabbix-chart-6.0 https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.0
# helm repo list
NAME URL
zabbix-chart-6.0 https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.0
3、配置values.yaml
templates目录中定义 Kubernetes 资源对象的配置文件变量值。
Zabbix Proxy与Agent参数配置
| 参数 | 值 | 解释 |
|---|---|---|
| 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版本 |
| zabbixAgent.env.ZBX_PROXYMODE | 0 | 一般修改为主动模式 |
| zabbixAgent.env.ZBX_ACTIVE_ALLOW | true | 客户端运行主动模式 |
| zabbixAgent.env.ZBX_ACTIVESERVERS | zabbix-proxy | ZabbixProxy地址,kubectl get svc 获取 |
- 资源限制配置
对 zabbix agent 需要限制其使用的最大资源,避免影响业务
# vim values.yaml
......
zabbixAgent:
## Enables use of Zabbix agent
enabled: true
resources:
requests:
cpu: 100m
memory: 54Mi
limits:
cpu: 200m
memory: 120Mi
......
kube-state-metrics参数配置
kube-state-metrics默认仓库镜像地址在国内被墙访问不上,所以修改成bitnami
| 参数 | 值 | 解释 |
|---|---|---|
| image.repository | bitnami/kube-state-metrics | kube-state-metrics 镜像库配置 |
4、安装Zabbix Chart
# kubectl create namespace monitoring
# cd zabbix-helm-chrt
# helm install zabbix . --dependency-update -n monitoring
# kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
zabbix-agent-ssf6x 1/1 Running 0 30h
zabbix-agent-wflqt 1/1 Running 0 30h
zabbix-kube-state-metrics-c4cc9c88-svgpf 1/1 Running 0 30h
zabbix-proxy-779754bfd6-gc6dh 1/1 Running 0 30h
通过 API 获取访问 Token
# kubectl get secret zabbix-service-account -n monitoring -o jsonpath={.data.token} | base64 -d
三、添加集群监控
1、创建 Zabbix Proxy

2、创建机器
创建节点机器,关联 Kubernets nodes by HTTP 模板,用于自动发现节点主机。


这三个宏变量参数是必填参数:
{$KUBE.API.ENDPOINT.URL}
{$KUBE.API.TOKEN}
{$KUBE.NODES.ENDPOINT.NAME} # kubectl get ep -n monitoring
集群节点监控添加后效果如下:

3、集群服务监控
新建一台集群状态机器,关联 Kubernets cluster state by HTTP 模板,用于自动发现集群组件并监控其状态。

依旧要修改如下三个宏变量参数

添加后效果如下


四、注意事项
当 Node 节点关联的 Linux by Zabbix agent 模板有部分监控项获取不到数据时,确认是不是只有 zabbix active 模式的监控项取不到值,如果是的话那么在 values.yml 没有设置 ZBX_ACTIVESERVERS 和 ZBX_ACTIVE_ALLOW 参数,按照文档开头修改参数值。替换后控制台可能会报 Kubernetes: Failed to get nodes 告警,是因为token 失效,重新获取最新的 token 替换。
Reference: