原博客的位置:

https://blog.csdn.net/shenhonglei1234/article/details/80503353

感谢原作者

这里记录一下自己试验过程中遇到的问题:

. 自己查看prometheus 里面的配置文件时 对mount的路径理解不清晰,以为是需要宿主机里面需要有目录才可以, 实际上不需要. 是k8s 将证书和token注入到container 里面去 使之能够与集群交互.

这里自己学习的不系统, 浪费了很多时间. 以为需要生成一个token 挂在进去才可以.

. 配置文件里面使用了nfs 的方式来挂作为pv和pvc的处理
一开始没注意,发现pod 总是 error 使用kubectl logs 命令找到问题原因后 修改了配置文件 创建自己的nfs server 才可以. 可以参考自己之前的 blog 有写制作blog
. nfs创建完成之后依旧报错. 这里的问题是 nfs 的目录的权限问题 提示 授权失败 无法绑定路径
翻墙google了下解决方案 将 nfs 目录修改成为 777权限,并且把owner 修改成 nobody 问题解决.
. service 如何暴露成为主机端口以及ingress的使用暂时还没弄清楚. 后续继续进行学习

感谢原作者的奉献  自己直接讲blog copy过来. 遇到的问题 在这里填充一下.

Prometheus+Grafana监控Kubernetes

2018年05月29日 23:43:54

阅读数:476

涉及文件下载地址:链接:https://pan.baidu.com/s/18XHK7ex_J0rzTtfW-QA2eA 密码:0qn6 
文件中需要下载的镜像需要自己提前下载好,eg:prom/node-exporter:v0.16.0

Prometheus官方网址,或者百度自己了解脑补https://prometheus.io/ 

官方文档说明链接

Prometheus是一个开源的系统监控工具。
根据配置的任务(job)以http/s周期性的收刮(scrape/pull)
指定目标(target)上的指标(metric)。目标(target)
可以以静态方式或者自动发现方式指定。
Prometheus将收刮(scrape)的指标(metric)保存在本地或者远程存储上。 Prometheus以pull方式来收集指标。对比push方式,
pull可以集中配置、针对不同的视角搭建不同的监控系统 Prometheus Server:核心组件,负责收刮和存储时序数据(time series data),并且提供查询接口; Jobs/Exporters:客户端,监控并采集指标,对外暴露HTTP服务(/metrics);
目前已经有很多的软件原生就支持Prometjeus,提供/metrics,可以直接使用;
对于像操作系统已经不提供/metrics的应用,可以使用现有的exporters
或者开发自己的exporters来提供/metrics服务; Pushgateway:针对push系统设计,Short-lived jobs定时将指标push到Pushgateway,再由Prometheus Server从Pushgateway上pull; Alertmanager:报警组件,根据实现配置的规则(rule)进行响应,例如发送邮件; Web UI:Prometheus内置一个简单的Web控制台,可以查询指标,查看配置信息或者Service Discovery等,实际工作中,查看指标或者创建仪表盘通常使用Grafana,Prometheus作为Grafana的数据源; 数据结构
Prometheus按照时间序列存储指标,每一个指标都由Notation + Samples组成:
Notation:通常有指标名称与一组label组成:
<metric name>{<label name>=<label value>, ...}
Samples:样品,通常包含一个64位的浮点值和一个毫秒级的时间戳

下面是在Mac上安装使用Prometheus+Grafana监控Kubernetes演示

链接==-==Kubernetes Dashboard 安装,快速,简便运行Dashboard

  • 环境如下:Docker for Mac 或者 Edge 版本的内置的 Kubernetes 集群 

    • 命令查看环境信息

kubectl get nodes -o wide
[root@k8smaster01 PrometheusGrafana]# kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
k8smaster01 Ready master 77d v1.10.1 <none> CentOS Linux (Core) 3.10.-.el7.x86_64 docker://17.3.2
k8snode01 Ready <none> 77d v1.10.1 <none> CentOS Linux (Core) 3.10.-.el7.x86_64 docker://17.3.2
k8snode02 Ready <none> 77d v1.10.1 <none> CentOS Linux (Core) 3.10.-.el7.x86_64 docker://17.3.2

kubectl get pods --all-namespaces -o wide

NAMESPACE     NAME                                       READY     STATUS             RESTARTS   AGE       IP             NODE
default brown-iguana-postgresql-7b485855c8-8jnsf / Pending 39d <none> <none>
default brown-iguana-sonarqube-799854bf8-ptcp6 / CrashLoopBackOff 11d 10.244.0.79 k8smaster01
default frontend-7vlmm / Running 11d 10.244.0.78 k8smaster01
default frontend-krz57 / Running 21d 10.244.0.80 k8smaster01
default frontend-pzlnd / Running 11d 10.244.0.82 k8smaster01
default my-release-jenkins-5d77b99899-9g7mr / Pending 39d <none> <none>
default nfs-busybox-l596c / Running 39d 10.244.0.84 k8smaster01
default nfs-web-5pj87 / Running 21d 10.244.0.83 k8smaster01
default prometheus-675b6f7b46-7p9kd / Running 4h 10.244.1.30 k8snode01
default redis-master-4hkwr / Evicted 11d <none> k8smaster01
default redis-master-fqrkh / Running 6d 10.244.2.186 k8snode02
default redis-slave-9dfx5 / Running 11d 10.244.0.81 k8smaster01
default redis-slave-gnjvb / Running 21d 10.244.0.85 k8smaster01
kube-system etcd-k8smaster01 / Running 77d 10.24.103.1 k8smaster01
kube-system kube-apiserver-k8smaster01 / Running 77d 10.24.103.1 k8smaster01
kube-system kube-controller-manager-k8smaster01 / Running 77d 10.24.103.1 k8smaster01
kube-system kube-dns-86f4d74b45-bq26h / Running 11d 10.244.0.88 k8smaster01
kube-system kube-flannel-ds-6xw52 / Running 77d 10.24.103.3 k8snode02
kube-system kube-flannel-ds-9kflb / Running 77d 10.24.103.2 k8snode01
kube-system kube-flannel-ds-ql64x / Running 77d 10.24.103.1 k8smaster01
kube-system kube-proxy-fdnhw / Running 77d 10.24.103.1 k8smaster01
kube-system kube-proxy-k5bq6 / Running 77d 10.24.103.3 k8snode02
kube-system kube-proxy-zzfm5 / Running 77d 10.24.103.2 k8snode01
kube-system kube-scheduler-k8smaster01 / Running 77d 10.24.103.1 k8smaster01
kube-system kubernetes-dashboard-5c469b58b8-847pl / Running 11d 10.244.0.87 k8smaster01
kube-system tiller-deploy-64cc99bc7-ntr7v / Running 11d 10.244.0.86 k8smaster01
ns-monitor grafana-865bdd58bc-znhdg / Running 41m 10.244.1.35 k8snode01
ns-monitor node-exporter-2xj9m / Running 2h 10.24.103.3 k8snode02
ns-monitor node-exporter-spntx / Running 2h 10.24.103.1 k8smaster01
ns-monitor node-exporter-tdtq8 / Running 2h 10.24.103.2 k8snode01
ns-monitor prometheus-544bf54848-fxl9r / Running 48m 10.244.2.190 k8snode02


  • Kubernetes的Dashboard 
  • 在kubernetest中创建namespace叫做ns-monitor

创建文件名:namespace.yaml,内容如下: 
【文件在百度云盘可下载链接:https://pan.baidu.com/s/18XHK7ex_J0rzTtfW-QA2eA 密码:0qn6】

apiVersion: v1
kind: Namespace
metadata:
name: ns-monitor
labels:
name: ns-monitor

在文件目录处,执行创建命令如下: 

kubectl apply -f namespace.yaml
  • 在kubernetest中部署node-exporter,Node-exporter用于采集kubernetes集群中各个节点的物理指标,比如:Memory、CPU等。可以直接在每个物理节点是直接安装,这里我们使用DaemonSet部署到每个节点上,使用 hostNetwork: true 和 hostPID: true 使其获得Node的物理指标信息,配置tolerations使其在master节点也启动一个pod。

创建文件名:node-exporter.yaml文件,内容如下: 
【文件在百度云盘可下载链接:https://pan.baidu.com/s/18XHK7ex_J0rzTtfW-QA2eA 密码:0qn6】

kind: DaemonSet
apiVersion: apps/v1beta2
metadata:
labels:
app: node-exporter
name: node-exporter
namespace: ns-monitor
spec:
revisionHistoryLimit:
selector:
matchLabels:
app: node-exporter
template:
metadata:
labels:
app: node-exporter
spec:
containers:
- name: node-exporter
image: prom/node-exporter:v0.16.0
ports:
- containerPort:
protocol: TCP
name: http
hostNetwork: true
hostPID: true
tolerations:
- effect: NoSchedule
operator: Exists ---
kind: Service
apiVersion: v1
metadata:
labels:
app: node-exporter
name: node-exporter-service
namespace: ns-monitor
spec:
ports:
- name: http
port:
nodePort:
protocol: TCP
type: NodePort
selector:
app: node-exporter

在文件目录处,执行创建命令如下:

kubectl apply -f node-exporter.yaml 

查看创建是否成功: 

kubectl get pods -n ns-monitor -o wide

检验node-exporter是否都成功运行 
http://127.0.0.1:31672/metrics或者http://127.0.0.1:9100/metrics 

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: prometheus
rules:
- apiGroups: [""] # "" indicates the core API group
resources:
- nodes
- nodes/proxy
- services
- endpoints
- pods
verbs:
- get
- watch
- list
......为节省篇幅,此处省略,请在百度云盘下载

执行创建命令

kubectl apply -f prometheus.yaml
kubectl get pods -n ns-monitor -o wide


验证prometheus的正确性:http://127.0.0.1:31710/graph 或者 http://127.0.0.1:31710/service-discovery 或者 http://127.0.0.1:31710/targets 


apiVersion: v1
kind: PersistentVolume
metadata:
name: "grafana-data-pv"
labels:
name: grafana-data-pv
release: stable
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
nfs:
path: /nfs/grafana/data
server: 192.168.65.3
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: grafana-data-pvc
namespace: ns-monitor
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
selector:
matchLabels:
name: grafana-data-pv
release: stable
---
kind: Deployment
apiVersion: apps/v1beta2
metadata:
labels:
app: grafana
name: grafana
namespace: ns-monitor
spec:
replicas:
revisionHistoryLimit:
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:latest
env:
- name: GF_AUTH_BASIC_ENABLED
value: "true"
- name: GF_AUTH_ANONYMOUS_ENABLED
value: "false"
readinessProbe:
httpGet:
path: /login
port:
volumeMounts:
- mountPath: /var/lib/grafana
name: grafana-data-volume
ports:
- containerPort:
protocol: TCP
volumes:
- name: grafana-data-volume
persistentVolumeClaim:
claimName: grafana-data-pvc
---
kind: Service
apiVersion: v1
metadata:
labels:
app: grafana
name: grafana-service
namespace: ns-monitor
spec:
ports:
- port:
targetPort:
selector:
app: grafana
type: NodePort

执行创建命令、并查看

kubectl apply -f grafana.yaml
kubectl get pods -n ns-monitor -o wide

验证grafana是否成功运行:http://127.0.0.1:30591/login 默认用户名和密码:admin/admin 

{
"__inputs": [
{
"name": "DS_PROMETHEUS",
"label": "prometheus",
"description": "",
"type": "datasource",
"pluginId": "prometheus",
"pluginName": "Prometheus"
}
],
"__requires": [
{
"type": "grafana",
"id": "grafana",
"name": "Grafana",
"version": "5.0.4"
},
......为节省篇幅,此处省略内容



Dashboard中的每一个Panel可以自行编辑、保存和回滚!
如果instance下拉框显示有问题,点击右上方的设置(settings)~变量(Variables),
修改$instance变量的Regex值,可以直接清空;
配置数据源、导入Dashboard、安装插件等这些操作可以配置到grafana.yaml文件中,
但是配置过程比较麻烦,这里先提供在界面上操作的说明,后期需要再处理。


自己的环境监测信息

 

[转帖]Prometheus+Grafana监控Kubernetes的更多相关文章

  1. Prometheus+Grafana监控Kubernetes

    涉及文件下载地址:链接:https://pan.baidu.com/s/18XHK7ex_J0rzTtfW-QA2eA 密码:0qn6 文件中需要下载的镜像需要自己提前下载好,eg:prom/node ...

  2. Rancher2.x 一键式部署 Prometheus + Grafana 监控 Kubernetes 集群

    目录 1.Prometheus & Grafana 介绍 2.环境.软件准备 3.Rancher 2.x 应用商店 4.一键式部署 Prometheus 5.验证 Prometheus + G ...

  3. [转帖]安装prometheus+grafana监控mysql redis kubernetes等

    安装prometheus+grafana监控mysql redis kubernetes等 https://www.cnblogs.com/sfnz/p/6566951.html plug 的模式进行 ...

  4. 使用 Prometheus + Grafana 对 Kubernetes 进行性能监控的实践

    1 什么是 Kubernetes? Kubernetes 是 Google 开源的容器集群管理系统,其管理操作包括部署,调度和节点集群间扩展等. 如下图所示为目前 Kubernetes 的架构图,由 ...

  5. cAdvisor+Prometheus+Grafana监控docker

    cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor ...

  6. Prometheus Operator 监控Kubernetes

    Prometheus Operator 监控Kubernetes 1. Prometheus的基本架构 ​ Prometheus是一个开源的完整监控解决方案,涵盖数据采集.查询.告警.展示整个监控流程 ...

  7. 【Springboot】用Prometheus+Grafana监控Springboot应用

    1 简介 项目越做越发觉得,任何一个系统上线,运维监控都太重要了.关于Springboot微服务的监控,之前写过[Springboot]用Springboot Admin监控你的微服务应用,这个方案可 ...

  8. Prometheus + Grafana 监控系统搭

    本文主要介绍基于Prometheus + Grafana 监控Linux服务器. 一.Prometheus 概述(略) 与其他监控系统对比 1 Prometheus vs. Zabbix Zabbix ...

  9. 部署Prometheus+Grafana监控

    Prometheus 1.不是很友好,各种配置都手写 2.对docker和k8s监控有成熟解决方案 Prometheus(普罗米修斯) 是一个最初在SoudCloud上构建的监控系统,开源项目,拥有非 ...

随机推荐

  1. WinForm中Component Class、User Control及Custom Control的区别和使用

    NET Framework 为您提供了开发和实现新控件的能力.除了常见的用户控件外,现在您会发现,您可以编写能执行自身绘图的自定义控件,甚至还可以通过继承扩展现有控件的功 能.确定创建何种类型的控件可 ...

  2. Python2.7-os.path

    os.path 模块,实现了对文件路径的操作,但是不操作文件.由于不同系统文件路径格式不同,os.path 总是调用适合当前系统的版本,你也可以手动导入别的系统的(posixpath,ntpath,m ...

  3. 1-关于单片机通信数据传输(中断发送,大小端,IEEE754浮点型格式,共用体,空闲中断,环形队列)

    补充: 程序优化 为避免普通发送和中断发送造成冲突(造成死机,复位重启),printf修改为中断发送 写这篇文章的目的呢,如题目所言,我承认自己是一个程序猿.....应该说很多很多学单片机的对于... ...

  4. linux找到目录下所有目录文件

    想要删除掉该目录下的所有文件类型是目录的文件? 这样运行: $ ls -F | grep /$ | xargs rm -rf ls 中F参数,作用是能把目录文件的名字后边加上一个斜杠/ 然后匹配以斜杠 ...

  5. Dozer 使用小结

    这篇文章是本人在阅读Dozer官方文档(5.5.1版本,官网已经一年多没更新了)的过程中,整理下来我认为比较基础的应用场景. 本文中提到的例子应该能覆盖JavaBean映射的大部分场景,希望对你有所帮 ...

  6. ubuntu14.04上设置默认python命令是执行python3而不是Python2

    update-alternatives --install /usr/bin/python python /usr/bin/python2 100 update-alternatives --inst ...

  7. 20155209 林虹宇 Exp 8 Web基础

    Exp 8 Web基础 Web前端HTML 正常安装.启停Apache kali本机自带apache,上个实验已经使用过,直接使用 查看80端口. 127.0.0.1 编写一个含有表单的html 在浏 ...

  8. 5.Xilinx RapidIO核例子工程源码分析

    https://www.cnblogs.com/liujinggang/p/10091216.html 一.软件平台与硬件平台 软件平台: 操作系统:Windows 8.1 64-bit 开发套件:V ...

  9. Jmeter(八)-发送JDBC请求

    下午花了两个小时研究了一下Jmeter发送JDBC请求,现在把基本操作流程分享一下. 做JDBC请求,首先需要两个jar包:mysql驱动-mysql-connector-java-5.1.13-bi ...

  10. Python魔术世界 1 如何使用Visual Studio在WIN10中一键安装Python3入门编程环境并测试Django

    本文通过VS安装Python和Django的环境,创建了一个Web程序,前后5分钟的操作,让你快速入门Python的编程世界,各种Python和Django的概念会在实战中给你娓娓道来. Django ...