热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

k8s全栈监控

简介整体概括本文章主要介绍如何全面监控k8s使用metric-server收集数据给k8s集群内使用,如kubectl,hp

简介

整体概括

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

参考文档

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

推荐阅读
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文记录了在vue cli 3.x中移除console的一些采坑经验,通过使用uglifyjs-webpack-plugin插件,在vue.config.js中进行相关配置,包括设置minimizer、UglifyJsPlugin和compress等参数,最终成功移除了console。同时,还包括了一些可能出现的报错情况和解决方法。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
  • 我创建了一个新的AWSSSO(使用内部IDP作为身份源,因此不使用ActiveDirectory)。我能够登录AWSCLI、AWSGUI,但 ... [详细]
  • adfs是什么_培训与开发的概念
    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候 ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • 今天在node节点发现不能查看pod了输入命令错误如下[rootnode01~]#kubectlgetpodTheconnectiontotheserverlocalhost:8 ... [详细]
  • kubeadm构建k8s之Prometheusoperated监控(0.18.1)
       介绍:    大家好,k8s的搭建有许多方式,也有许多快速部署的,为了简化部署的复杂度,官方也提供了开源的kubeadm快速部署,最新1.10.x版本已经可以实现部署集群,  ... [详细]
  • 这篇文章主要讲解了“Kubernetes1.21.0如何部署管理界面Dashboard2”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢 ... [详细]
  • 开发笔记:Prometheus监控系列最佳实践
    Prometheus是继kubernetes第二个从CNCF中毕业的项目,个人也是非常的喜欢这款通过数据指标发现和预测告警的开源监控平台,官方的话就不多说了,根据官网的 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
author-avatar
我是小储哥
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有