k8s全栈监控

news/2024/7/1 5:02:51

简介

整体概括

本文章主要介绍如何全面监控k8s

  • 使用metric-server收集数据给k8s集 群内使用,如kubectl,hpa,scheduler等
  • 使用prometheus-operator部署prometheus,存储监控数据
  • 使用kube-state-metrics收集k8s集群内资源对象数据
  • 使用node_exporter收集集群中各节点的数据
  • 使用prometheus收集apiserver,scheduler,controller-manager,kubelet组件数据
  • 使用alertmanager实现监控报警
  • 使用grafana实现数据可视化

prometheus-operator简介

prometheus-operator是一个整合prometheus和operator的项目,prometheus是一个集数据收集存储,数据查询,数据图表显示于一身的开源监控组件。operator是由coreos开源一套在k8s上管理应用的软件,通过operator可以方便的实现部署,扩容,删除应用等功能。

prometheus-operator利用k8s的CustomResourceDefinitions功能实现了只需要像写原生kubectl支持的yaml文件一样,轻松收集应用数据,配置报警规则等,包含如下CRDs :

  • Prometheus 用于部署Prometheus 实例
  • ServiceMonitor 用于配置数据收集,创建之后会根据DNS自动发现并收集数据
  • PrometheusRule 用于配置Prometheus 规则,处理规整数据和配置报警规则
  • Alertmanager 用于部署报警实例

安装

环境说明

收集kube-controller-manager,kube-scheduler数据,需要配置组件监听0.0.0.0地址

二进制安装启动时添加如下参数 --address=0.0.0.0

如果使用kubeadm启动的集群,初始化时加入如下参数

controllerManagerExtraArgs:address: 0.0.0.0
schedulerExtraArgs:address: 0.0.0.0
复制代码

如果是已经启动之后的集群,可以使用如下命令修改

sed -e "s/- --address=127.0.0.1/- --address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-controller-manager.yaml
sed -e "s/- --address=127.0.0.1/- --address=0.0.0.0/" -i /etc/kubernetes/manifests/kube-scheduler.yaml
复制代码

收集kubelet相关数据时需要配置kubelet使用如下认证方式。使用kubeadm默认情况下已经开启

--authentication-token-webhook=true
--authorization-mode=Webhook
复制代码

部署metric-server

# 下载
mkdir k8s-monitor && cd k8s-monitor
git clone https://github.com/kubernetes-incubator/metrics-server.git
cd metrics-server && git checkout v0.2.1 && cd ../# 修改配置(当前版本有bug)
sed -ri 's@gcr.io/google_containers/metrics-server-amd64:(.*)@mirrorgooglecontainers/metrics-server-amd64:\1@g' metrics-server/deploy/1.8+/metrics-server-deployment.yaml
sed -ri 's@--source=kubernetes.summary_api:.*@--source=kubernetes.summary_api:https://kubernetes.default?kubeletHttps=true\&kubeletPort=10250\&insecure=true@' metrics-server/deploy/1.8+/metrics-server-deployment.yaml# 部署
kubectl create -f metrics-server/deploy/1.8+/# 查看状态
kubectl get pods -n kube-system# 测试获取数据 # 由于采集数据间隔为1分钟 # 等待数分钟后查看数据
NODE=$(kubectl get nodes | grep 'Ready' | head -1 | awk '{print $1}')
METRIC_SERVER_POD=$(kubectl get pods -n kube-system | grep 'metrics-server' | awk '{print $1}')
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
kubectl get --raw /apis/metrics.k8s.io/v1beta1/pods
kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes/$NODEkubectl top node $NODE
kubectl top pod $METRIC_SERVER_POD -n kube-system
复制代码

下载相关部署文件

git clone https://github.com/mgxian/k8s-monitor.git
cd k8s-monitor
复制代码

部署prometheus-operator

# 创建 namespace
kubectl apply -f monitoring-namespace.yaml# 部署
kubectl apply -f prometheus-operator.yaml# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring
kubectl get crd
复制代码

部署k8s组件服务

# 部署
kubectl apply -f kube-k8s-service.yaml# 查看
kubectl get svc -n kube-system
复制代码

部署node_exporter

# 部署
kubectl apply -f node_exporter.yaml# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring
复制代码

部署kube-state-metrics

# 部署
kubectl apply -f kube-state-metrics.yaml# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring
复制代码

部署prometheus

# 部署
kubectl apply -f prometheus.yaml# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring
复制代码

配置数据收集

# 部署
kubectl apply -f kube-servicemonitor.yaml# 查看
kubectl get servicemonitors -n monitoring
复制代码

查看prometheus中的数据

# 查看 nodeport
kubectl get svc -n monitoring | grep prometheus-k8s# 获取访问链接 # 11.11.11.111 为其中一个node ip
NODE_IP='11.11.11.112'
PROMETHEUS_NODEPORT=$(kubectl get svc -n monitoring | grep prometheus-k8s | awk '{print $(NF-1)}' | cut -d ':' -f 2 | cut -d '/' -f 1)
echo "http://$NODE_IP:$PROMETHEUS_NODEPORT/" 复制代码

prometheus主页

1

生成图表 container_network_receive_bytes_total{namespace="monitoring", name=~".prometheus."}

1

查看收集数据的端点

1

查看数据收集服务发现

1

部署grafana

# 部署
kubectl apply -f grafana.yaml# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring# 查看 nodeport
kubectl get svc -n monitoring | grep grafana# 获取访问链接 # 11.11.11.111 为其中一个node ip
NODE_IP='11.11.11.112'
GRAFANA_NODEPORT=$(kubectl get svc -n monitoring | grep grafana | awk '{print $(NF-1)}' | cut -d ':' -f 2 | cut -d '/' -f 1)
echo "http://$NODE_IP:$GRAFANA_NODEPORT/" 复制代码

部署alertmanager

# 部署
kubectl apply -f alertmanager.yaml# 查看
kubectl get pods -n monitoring
kubectl get svc -n monitoring# 查看 nodeport
kubectl get svc -n monitoring | grep alertmanager-main# 获取访问链接 # 11.11.11.111 为其中一个node ip
NODE_IP='11.11.11.112'
ALERTMANAGER_MAIN_NODEPORT=$(kubectl get svc -n monitoring | grep alertmanager-main | awk '{print $(NF-1)}' | cut -d ':' -f 2 | cut -d '/' -f 1)
echo "http://$NODE_IP:$ALERTMANAGER_MAIN_NODEPORT/" 复制代码

查看图表

集群状态

1

集群状态以命名空间视角

1

POD状态

1

参考文档

  • github.com/coreos/prom…
  • github.com/coreos/prom…
  • github.com/coreos/prom…
本文转自掘金-k8s全栈监控

http://lihuaxi.xjx100.cn/news/269508.html

相关文章

celery介绍

celery介绍 特点: 简单 Celery 上手比较简单,不需要配置文件就可以直接运行。 高可用 如果出现丢失连接或连接失败,职程(Worker)和客户端会自动重试,并且中间人通过 主/主 主/从 的方式来进行提高可用性…

为了毕业,我花了1800元给原创论文查重

点击上方“视学算法”,选择加"星标"或“置顶”重磅干货,第一时间送达金磊 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI一年一度的毕业论文查重“盛宴”,又开始了。然而,隔着屏幕都能感受到毕业生们的痛苦&#xff1a…

程序员眼中的英文单词是这样的

来源:Jackie Han英语中一个单词可能有很多不同的意思。很多中国开发者外语本来就不好,概念是往往先入为主。甚至在不清楚一般意义的情况下,先记住了特定环境中的意思。 转载于:https://www.cnblogs.com/agileai/p/5166982.html

认识HTML5的WebSocket 认识HTML5的WebSocket

2019独角兽企业重金招聘Python工程师标准>>> 在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API。WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端…

html左浮动不管用图片往下放,html - 如何在HTML / CSS中水平对齐图像(浮动和显示内联块不起作用) - 堆栈内存溢出...

我有一个水平排列的图像库,但是后来我做到了,以便当您将鼠标悬停在图像上时,图像上会覆盖文字,现在我以前没有什么东西可以用来使它们水平排列。 我尝试在所有选择器上使用左浮点数(同样使用display inline-block),但是…

超越英伟达的,不会是另一款GPU?这家深圳公司发布全球首款数据流AI芯片

2020年6月23日,鲲云科技在深圳举行产品发布会,发布全球首款数据流AI芯片CAISA,定位于高性能AI推理,已完成量产。鲲云通过自主研发的数据流技术在芯片实测算力上实现了技术突破,较同类产品在芯片利用率上提升了最高11.6…

Mysql 查看连接数,状态 最大并发数 怎么设置才合理

show status like %max_connections%; ##mysql最大连接数 set global max_connections1000 ##重新设置 show variables like %max_connections%; ##查询数据库当前设置的最大连接数 show global status like Max_used_connections; ##服务器响应的最大连接数 show status like …

多光谱和高光谱图像有什么区别?

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达当你阅读这篇文章时,你的眼睛会看到反射的能量。但计算机可以通过三个通道看到它:红色、绿色和蓝色。如果你是一条金鱼,你会看到不同的…