Kubernetes 全栈监控
简介
整体概括
本文章主要介绍如何全面监控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 # 修改配置(当前版本有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 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主页
生成图表container_network_receive_bytes_total{namespace=”monitoring”, name=~”. prometheus.“}
查看收集数据的端点
查看数据收集服务发现
部署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/"
查看图表
集群状态
集群状态以命名空间视角
本文转自中文社区- Kubernetes 全栈监控POD状态
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
kubeadm HA master集群master重置故障恢复
文章楔子 对于一个具有HA master的集群来说,发生单点故障通常不会影响集群的正常运行,只要及时复原单点故障,就可以避免潜在的数据、状态丢失。本文旨在指导读者,在kubeadm搭建的HA master集群中,某一master主机遭遇硬件更换、系统重置、k8s配置重置的情况下,应当如何恢复K8s HA master集群。 前置需求 一个HA master的Kubernetes集群,搭建过程可以参考 kubeadm HA集群搭建指南 单点重置恢复 故障重现 一个健康的HA master集群 首先登陆到其中一台master上,运行下面的命令以模拟单点重置的场景,随后k8s HA master陷入单点故障。 kubeadm reset - f HA master进入单点故障 故障恢复 本章节的全过程可以在此处查看演示视频: DEMO 首先在一台健康的master上运行下面的命令获取etcd集群中故障member的ID ETCD = ` docker ps | grep etcd | grep - v POD | awk '{print $1}' ` docker exec \ - it $...
- 下一篇
在kubernetes上部署consul集群
本教程将帮助你在kubernetes上部署一个拥有3个节点的consul集群 备注:consul教程见Consul; 预览 consul 集群的三个节点部署方式使用 StatefulSet consul集群成员之间使用TLS进行安全通信 TLS and encryption keys 预备知识 本教程利用了Kubernetes 1.7.0和更高版本的特性. kubernetes 1.7.x 下客户端必须安装在本教程所使用的机器上: consul 0.9.x cfssl and cfssljson 1.2 使用 Clone this repo: git clone https://github.com/nicklv/consul_cluster_on_kubernetes.git 进入到 consul-on-kubernetes 目录: cd consul-on-kubernetes 生成 TLS 证书 Consul集群中成员之间的RPC通信使用TLS进行加密。通过以下命令初始化CA证书: cfssl gencert -initca ca/ca-csr.json | cfssljson ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Hadoop3单机部署,实现最简伪集群
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路