k8s全栈监控之metrics-server和prometheus

摘要:
1、 概述使用度量服务器收集数据以供K8S集群使用。例如,kubectl、hpa、scheduler等使用profileus操作符来部署profileus。使用kube状态度量来存储监控数据。使用节点收集K8S集群中的资源对象数据_导出器收集集群中每个节点的数据,并使用prometheus收集apiserver、调度器和控制器

一、概述

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

1、部署metrics-server

git  clone  https://github.com/cuishuaigit/k8s-monitor.git
cd  k8s-monitor  

我都是把这种服务部署在master节点上面,此时需要修改metrics-server-deployment.yaml

---apiVersion: v1
kind: ServiceAccount
metadata:
  name: metrics-server
  namespace: kube-system
---apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: metrics-server
  namespace: kube-system
  labels:
    k8s-app: metrics-server
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  template:
    metadata:
      name: metrics-server
      labels:
        k8s-app: metrics-server
    spec:
      serviceAccountName: metrics-server
      tolerations:
        -effect: NoSchedule
          key: node.kubernetes.io/unschedulable
          operator: Exists
        -key: NoSchedule
          operator: Exists
          effect: NoSchedule
      volumes:
      # mount in tmp so we can safely use from-scratch images and/or read-only containers
      - name: tmp-diremptyDir: {}
      containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.1imagePullPolicy: Always
        command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP
        volumeMounts:
        - name: tmp-dirmountPath: /tmp
      nodeSelector:
        metrics: "yes"

为master节点添加label

kubectl label nodes ku  metrics=yes

部署

kubectl create -f metrics-server/deploy/1.8+/

验证:

k8s全栈监控之metrics-server和prometheus第1张

it's cool

注:metrics-server默认使用node的主机名,但是coredns里面没有物理机主机名的解析,一种是部署的时候添加一个参数:

- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

第二种是使用dnsmasq构建一个上游的dns服务,参照https://www.cnblogs.com/cuishuai/p/9856843.html。

2、部署prometheus

下载相关文件:

前面部署metrics-server已经把所有的文件pull到本地了,所以直接使用
cd k8s-monitor

1.搭建nfs服务动态提供持久化存储

1.安装nfs 
sudo apt-get install -y nfs-kernel-server
sudo apt-get install -y nfs-common 
sudo vi /etc/exports 
/data/opv *(rw,sync,no_root_squash,no_subtree_check)
注意将*换成自己的ip段,纯内网的话也可以用*,代替任意
sudo /etc/init.d/rpcbind restart 
sudo /etc/init.d/nfs-kernel-server restart 
sudo systemctl enable rpcbind nfs-kernel-server 

客户端挂在使用
sudo apt-get install -y nfs-common
mount -t nfs ku13-1:/data/opv  /data/opv -o proto=tcp -o nolock
为了方便使用将上面的mount命令直接放到.bashrc里面 
2.创建namesapce
kubectl creaet -f nfs/monitoring-namepsace.yaml 
3.为nfs创建rbac 
kubectl create -f nfs/rbac.yaml 
4.创建deployment,将nfs的地址换成自己的
kubectl create -f nfs/nfs-deployment.yaml 
5.创建storageclass
kubectl create -f nfs/storageClass.yaml 

2.安装Prometheus

cd k8s-monitor/Promutheus/prometheus

1.创建权限
kubectl create -f rbac.yaml
2.创建 node-exporter
kubectl create -f prometheus-node-exporter-daemonset.yaml
kubectl create -f prometheus-node-exporter-service.yaml
3.创建 kube-state-metrics
kubectl create -f kube-state-metrics-deployment.yaml
kubectl create -f kube-state-metrics-service.yaml
4.创建 node-directory-size-metrics
kubectl create -f node-directory-size-metrics-daemonset.yaml
5.创建 prometheus
kubectl create -f prometheus-pvc.yaml
kubectl create -f prometheus-core-configmap.yaml
kubectl create -f prometheus-core-deployment.yaml
kubectl create -f prometheus-core-service.yaml
kubectl create -f prometheus-rules-configmap.yaml
6.修改core-configmap里的etcd地址

3.安装Grafana

cdk8s-monitor/Promutheus/grafana

1.安装grafana service
kubectl create -f grafana-svc.yaml
2.创建configmap
kubectl create -f grafana-configmap.yaml
3.创建pvc
kubectl create -f grafana-pvc.yaml
4.创建gragana deployment
kubectl create -f grafana-deployment.yaml
5.创建dashboard configmap
kubectl create configmap "grafana-import-dashboards" --from-file=dashboards/ --namespace=monitoring
6.创建job,导入dashboard等数据
 kubectl create -f grafana-job.yaml

查看部署:

k8s全栈监控之metrics-server和prometheus第2张

prometheus和grafana都是采用的nodePort方式暴漏的服务,所以可以直接访问。

grafana默认的用户名密码:admin/admin

k8s全栈监控之metrics-server和prometheus第3张

QA:

1、集群是使用kubeadm部署的,controller-manager和schedule都是监听的127.0.0.1,导致prometheus收集不到相关的数据?

可以在初始化之前修改其监听地址:

apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
controllerManager:
  extraArgs:
    address: 0.0.0.0scheduler:
  extraArgs:
    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

2、metrics-server不能使用,报错不能解析node节点的主机名?

需要修改deployment文件,

- --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

3、metrics-server报错,x509,证书是非信任的?

command:
        - /metrics-server
        - --kubelet-insecure-tls

4、完整的配置文件

containers:
      - name: metrics-server
        image: k8s.gcr.io/metrics-server-amd64:v0.3.1command:
        - /metrics-server
        - --metric-resolution=30s
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

免责声明:文章转载自《k8s全栈监控之metrics-server和prometheus》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇设计模式六大原则(5):迪米特法则linux制作RPM包下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Jenkins基于https的k8s配置

Jenkins基于https的k8s配置 登录jenkins,点击 Manage Jenkins --> Manage Plugins --> 可选插件 在搜索框中,输入关键字 kubernetes 选择安装完成后重启Jenkins 重新登录后,点击 Manage Jenkins --> Configure System, 将网页拉...

第五篇 kubernetes 部署Helm包管理工具

1.Kubernetes应用部署工具-Helm简介 随着业务容器化与向微服务架构转变,通过分解巨大的单体应用为多个服务的方式, 分解了单体应用的复杂性,使每个微服务都可以独立部署和扩展,实现了敏捷开发和快速迭代和部署。 但任何事情都有两面性,虽然微服务给我们带来了很多便利,但由于应用被拆分成多个组件,导致服务数量大幅增加, 对于Kubernetest编排来...

prometheus学习笔记(1)-mac单机版环境搭建

注:以下所有环境均为mac笔记本 一、安装prometheus brew install prometheus 安装完后,默认的安装路径为: /usr/local/Cellar/prometheus/2.16.0/ 同时还会生成一个默认配置文件:/usr/local/etc/prometheus.yml global: scrape_interva...

使用 Tye 辅助开发 k8s 应用竟如此简单(五)

续上篇,这篇我们来进一步探索 Tye 更多的使用方法。本篇我们来了解一下如何在 Tye 中实现对分布式链路追踪。 Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架。如果您是首次阅读本系列文章。建议可以先从本文末尾的入门文章开始了解。 我是谁?我在哪儿?我咋了? 分布式系统纷繁复杂,特别以现在微服务架构的出现,使得应用系统中的应用实...

K8S(rancher) 服务(POD)定时重启服务方案

目标 每天在固定时间点,重启服务。 运行N小时后重启服务。 难点: 原先Linux虚拟机部署中,可以轻易实现。 现在Docker K8S 如何实现? 解决方案: 巧用 rancher 2.* 新特性 -- 存活状态检查(liveness)特性说明健康检查 在容器启动后的N秒后以N秒的频率执行一次检查 TCP 端口检查  HTTP 请求状态检查(2...

prometheus 配置支持consul动态拉取

/etc/prometheus/prometheus.yml - job_name: 'consul'consul_sd_configs: - server: 'consul-dev.cmsp-dev.svc.cluster.local:8500'scrape_interval: 5s # my global config global:...