k8s全栈监控-阿里云开发者社区

开发者社区> 店家小二> 正文

k8s全栈监控

简介: 简介 整体概括 本文章主要介绍如何全面监控k8s 使用metric-server收集数据给k8s集群内使用,如kubectl,hpa,scheduler等 使用prometheus-operator部署prometheus,存储监控数据 使用kube-state-metrics收集k8s集群内资源.
+关注继续查看

简介

整体概括

本文章主要介绍如何全面监控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/$NODE

kubectl 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

参考文档

本文转自掘金-k8s全栈监控

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9494 0
Foo
阿里云InfluxDB®:一条命令完成k8s监控采集
前言 Kubernetes是当今流行的容器调度系统,已经成为很多软件系统的底座,而kubernetes的监控也有很多方案可选,阿里云InfluxDB®提供时序数据的长期稳定存储,同时集成了grafana可视化组件,可以帮助用户快速搭建监控方案。
4074 0
Yurt-Tunnel 详解|如何解决 K8s 在云边协同下的运维监控挑战
伴随着 5G、IoT 等技术的快速发展,边缘计算被越来越广泛地应用于电信、媒体、运输、物流、农业、零售等行业和场景中,成为解决这些领域数据传输效率的关键方式。与此同时,边缘计算形态、规模、复杂度的日益增长,边缘计算领域的运维手段、运维能力对边缘业务创新速度的支撑日趋乏力。于是,Kubernetes 迅速成为边缘计算的关键要素,帮助企业在边缘更好地运行容器,最大化利用资源、缩短研发周期。
377 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10843 0
k8s 监控程序Metric-server pod运行异常报:it doesn't contain any IP SANs
k8s 监控程序Metric-server pod运行异常:出现 metrics-server error because it doesn't contain any IP SANs 解决方法
3146 0
从零开始入门 K8s | 可观测性:监控与日志
作者 | 莫源  阿里巴巴技术专家 一、背景 监控和日志是大型分布式系统的重要基础设施,监控可以帮助开发者查看系统的运行状态,而日志可以协助问题的排查和诊断。 在 Kubernetes 中,监控和日志属于生态的一部分,它并不是核心组件,因此大部分的能力依赖上层的云厂商的适配。
3162 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13177 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
6890 0
+关注
651
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载