# monitoring-k8s **Repository Path**: jiusheng5/monitoring-k8s ## Basic Information - **Project Name**: monitoring-k8s - **Description**: K8S prometheus - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: https://github.com/jiusheng5/monitoring-k8s.git - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-12-23 - **Last Updated**: 2023-01-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README **搭建一套k8s的监控,是非常有必要的。** 采集方案: 通过prometheus-node-exporter采集主机的性能指标数据,并通过暴露的 /metrics 接口用prometheus抓取 通过kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy自身暴露的 /metrics 获取节点上与k8s集群相关的一些指标数据 通过cadvisor采集容器、Pod相关的性能指标数据,并通过暴露的 /metrics 接口用prometheus抓取 通过blackbox-exporter采集应用的网络性能(http、tcp、icmp等)数据,并通过暴露的 /metrics 接口用prometheus抓取 通过kube-state-metrics采集k8s资源对象的状态指标数据,并通过暴露的 /metrics 接口用prometheus抓取 应用自己采集容器中进程主动暴露的指标数据(暴露指标的功能由应用自己实现,并添加约定的annotation,prometheus负责根据annotation实现抓取) 通过搭建Prometheus+Grafana及上面的插件来实现k8s集群参数的监控。 通过dingtalk-hook+alertmanager配合Prometheus实现钉钉群报警等。 yaml文件已经基本准备完毕,需要做部署前的准备。 1、搭建nfs服务,做k8s pods的pv、pvc数据持续存储方案,避免本地存储。pods不熟是随机部署到node节点的,如pods节点被删除部署到了另外一台服务node节点,会加载不到之前各种数据。 ①安装部署nfs yum install nfs-utils systemctl start nfs-server.service systemctl enable nfs-server.service systemctl status nfs-server.service ②设置共享目录 mkdir -p /data/k8s/ chmod 777 /data/k8s/ #设置目录权限 ③配置nfs vim /etc/exports /data/k8s *(rw,sync,no_root_squash,no_subtree_check) ④安装rpcbind服务 yum install rpcbind systemctl start rpcbind.service systemctl enable rpcbind ⑤启动nfs服务(需要先起rpcbind) systemctl start nfs-server.service systemctl enable nfs-server.service systemctl status nfs-server.service 备注在k8s集群节点上只需要执行 ④⑤步骤,加载挂在nfs 例挂在命令如下: mount -t nfs 192.168.xxx.xx:/data/k8s/ /mnt 2、下载代码 git clone https://gitee.com/jiusheng5/monitoring-k8s.git 目录结构为: . |-- alertmanager | |-- alertmanager-configmap.yaml | |-- alertmanager-deployment.yaml | |-- alertmanager-ingress.yaml | |-- alertmanager-pvc.yaml | `-- alertmanager-service.yaml |-- blackbox-exporter | |-- blackbox-exporter.yaml | `-- config.yaml |-- dingtalk | |-- confog.yaml | |-- dingtalk-template.yaml | `-- dingtalk.yaml |-- grafana | |-- grafana-pvc.yaml | |-- grafana.yaml | `-- secret.yaml |-- k8s | |-- kube-controller-manager-prometheus-discovery.yaml | |-- kube-proxy-prometheus-discovery.yaml | `-- kube-scheduler-prometheus-discovery.yaml |-- kube-state-metrics | |-- kube-state-metrics.yaml | `-- rbac.yaml |-- namespace.yaml |-- node-exporter | `-- node-exporter.yaml `-- prometheus |-- config.yaml |-- prometheus.yaml |-- rbac.yaml |-- rules.yaml ①、 创建namespace kubectl apply -f namespace.yaml ② 安装blackbox-exporter插件 blackbox-exporter是一个黑盒探测工具,可以对服务的http、tcp、icmp等进行网络探测。 cd blackbox-exporter/ kubectl apply -f . ③ 安装k8s组件,controller-manager、kube-scheduler、kube-proxy cd k8s/ kubectl apply -f . 安装完成,后面再部署完prometheus后会有些监控项404报错的情况,需要修改k8s master节点/etc/kubernetes/manifests目录下的kube-controller-manager.yaml、kube-scheduler.yaml两个文件 # - --port=0 注释掉重启kubelet systemctl restart kubelet ④ 安装kube-state-metrics监控插件,监控node、pods状态及参数的插件。 cd kube-state-metrics/ kubectl apply -f . ⑤ 安装node-exporter插件 cd node-exporter/ kubectl apply -f . 注意: blackbox-exporter的配置文件为 /etc/blackbox_exporter/blackbox.yml, 运行时可以动态重载配置文件,当重新加载配置文件失败时,不影响运行中的配置。 重载方式:curl -XPOST http://ip:9115/-/reload ⑥ 安装钉钉服务 修改config.yaml中的钉钉机器人的webhook url: https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx cd dingdingtalk/ kubectl apply -f . ⑦ 安装alertmanager 插件,这个插件的数据用到了pvc存储数据 cd alertmanager/ kubectl apply -f . 注意:alertmanager的config文件中的调用钉钉配置,需要改为dingdingtalk部署的名字,调用url也需要改为自己部署的url alertmanager 中的ingress地址需要改成自己需要的域名地址。 ⑧ 安装prometheus插件 cd prometheus/ kubectl apply -f . 注意:安装之前,需要把配置文件中的一些参数进行修改。 config.yaml文件中的调用alertmanager服务的地址,需要改成自己服务集群中的地址: alerting: alertmanagers: - static_configs: - targets: - 192.168.xxx.xx:30093 replacement地址改为k8smatser节点地址: replacement: 192.168.xxx.xx:6443 配置文件中的其他端口一样也要修改。 rules.yaml 文件为prometheus 监控项,我的配置文件没有写全,只是写了一些我自己需要的监控项。 可以自定义 可以参考:https://awesome-prometheus-alerts.grep.to/rules#kubernetes prometheus.yaml 文件中需要修改ingress的地址。以及kubernetes.io/hostname,这个参数是k8s污点。 - name: prometheus emptyDir: {} nodeSelector: node-role.kubernetes.io/master: "" kubernetes.io/hostname: "bjaly-qiji-k8s-java-192-168-xxx-xx.vm.unicademy.lan" tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule prometheus安装完,发现有这种错误报错 Get http://192.168.xxx.xx:10249/metrics: dial tcp 192.168.xxx.xx:10249: connect: connection refused 解决方案: $ kubectl edit cm/kube-proxy -n kube-system ... kind: KubeProxyConfiguration metricsBindAddress: 0.0.0.0:10249 ... $ kubectl delete pod -l k8s-app=kube-proxy -n kube-system ⑩ 安装grafana 监控展示插件,这个插件的数据用到了pvc存储数据 cd grafana/ kubectl apply -f . 部署完所有服务,查看服务启动情况 kubectl get all -n monitoring alertmanager、prometheus、grafana的访问请绑定自己的ingress服务地址,通过服务的ingress地址访问。 grafana添加监控源,源为prometheus服务提供的,地址为:http://prometheus.monitoring.svc.cluster.local:9090 grafana添加一些常用模版们也可以定制自己需要的监控模块。 ** 注意:关于各个插件的配置,可以去各个插件的yaml文件中去修改,自己机器能给的配置。**