cadvisor监控Pod ,prmetheus服务发现

监控Pod指标数据需要使⽤cadvisor,cadvisor由⾕歌开源,在kubernetes v1.11及之前的版本内置在kubelet中
并监听在4194端⼝(https://github.com/kubernetes/kubernetes/pull/65707),从v1.12开始kubelet中的cadvisor
被移除,因此需要单独通过daemonset等⽅式部署。
cadvisor(容器顾问)不仅可以搜集⼀台机器上所有运⾏的容器信息,还提供基础查询界⾯和http接⼝,⽅便其
他组件如Prometheus进⾏数据抓取,cAdvisor可以对节点机器上的容器进⾏实时监控和性能数据采集,包括容器
的CPU使⽤情况、内存使⽤情况、⽹络吞吐量及⽂件系统使⽤情况。
https://github.com/google/cadvisor

1.cadvisor部署

1.1容器方式运行

使用国外服务器下载镜像上传到阿里云
docker pull gcr.io/cadvisor/cadvisor:v0.47.0
registry.cn-beijing.aliyuncs.com/luohuiwen20/cadvisor:v0.47.0
https://github.com/google/cadvisor

sudo docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=8080:8080 \
  --detach=true \
  --name=cadvisor \
  --privileged \
  --device=/dev/kmsg \
registry.cn-beijing.aliyuncs.com/luohuiwen20/cadvisor:v0.47.0

在这里插入图片描述

1.2 demonset 方式

kubectl apply -f case1-daemonset-deploy-cadvisor.yaml

2.node-exporter 部署

daemonset 运行 node-exporter
kubectl apply -f case2-daemonset-deploy-node-exporter.yaml
在这里插入图片描述
在这里插入图片描述
启动失败,换镜像也不行,发现在1.27上已经部二进制署过node-exporter,端口占用,停止node-exporter后重新部署

访问node节点8080端口测试
http://192.168.1.27:8080/containers/

3. 配置promethues

1.二进制部署

wget https://github.com/prometheus/prometheus/releases/download/v2.37.8/prometheus-2.37.8.linux-amd64.tar.gz
tar -xf prometheus-2.37.8.linux-amd64.tar.gz
root@k8s-master02:/apps# ln -s prometheus-2.37.8.linux-amd64/ prometheus

配置Prometheus service ,默认监听9090端口

root@k8s-master02:/apps/prometheus# cat  /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Server
Documentation=https://prometheus.io/docs/introduction/overview/
After=network.target

[Service]
Restart=on-failure
WorkingDirectory=/apps/prometheus/
#--web.enable-lifecycle表示启用配置热加载功能
ExecStart=/apps/prometheus/prometheus --config.file=/apps/prometheus/prometheus.yml --web.enable-lifecycle --storage.tsdb.retention=720h

[Install]
WantedBy=multi-user.target

在这里插入图片描述

prometheus添加被监控的node节点

- job_name: "prometheus-cadvisor"
    static_configs:
      - targets: ["192.168.1.24:8080","192.168.1.25:8080","192.168.1.26:8080","192.168.1.27:8080","192.168.1.28:8080","192.168.1.29:8080"]

重新加载配置
curl -X POST http://192.168.1.25:9090/-/reload

3.2deloyment方式部署

kubectl apply -f case3-1-prometheus-cfg.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus-server
  namespace: monitoring
  labels:
    app: prometheus
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus
      component: server
    #matchExpressions:
    #- {key: app, operator: In, values: [prometheus]}
    #- {key: component, operator: In, values: [server]}
  template:
    metadata:
      labels:
        app: prometheus
        component: server
      annotations:
        prometheus.io/scrape: 'false'
    spec:
      nodeName: 192.168.1.28
      serviceAccountName: monitor
      containers:
      - name: prometheus
        image: prom/prometheus:v2.31.2
        imagePullPolicy: IfNotPresent
        command:
          - prometheus
          - --config.file=/etc/prometheus/prometheus.yml
          - --storage.tsdb.path=/prometheus
          - --storage.tsdb.retention=720h
        ports:
        - containerPort: 9090
          protocol: TCP
        volumeMounts:
        - mountPath: /etc/prometheus/prometheus.yml
          name: prometheus-config
          subPath: prometheus.yml
        - mountPath: /prometheus/
          name: prometheus-storage-volume
        - mountPath: /etc/localtime
          name: time
      volumes:
        - name: prometheus-config
          configMap:
            name: prometheus-config
            items:
              - key: prometheus.yml
                path: prometheus.yml
                mode: 0644
        - name: prometheus-storage-volume
          hostPath:
           path: /data/prometheusdata
           type: Directory
        - name: time
          hostPath:
           path: /usr/share/zoneinfo/Asia/Shanghai

部署svc
kubectl apply -f case3-3-prometheus-svc.yaml
访问http://192.168.1.28:30090/

4.部署granfana

4.1部署grafana

机器192.168.1.21
https://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1

sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_9.5.2_amd64.deb
sudo dpkg -i grafana-enterprise_9.5.2_amd64.deb
systemctl start grafana-server.service
systemctl enable grafana-server.servic

http://192.168.1.21:3000/

4.2 配置grafana

访问http://192.168.1.21:3000/granfana添加数据源
地址填写promethues:http://192.168.1.28:30090/
在这里插入图片描述

4.3导入模板

14282
在这里插入图片描述
在这里插入图片描述

5.prmetheus服务发现

prometheus 默认是采用 pull 方式拉取监控数据的,也就是定时去目标主机上 抓 取metrics 数 据 , 每 一 个 被抓取 的目标 需 要 暴露 一个 HTTP 接口 ,prometheus 通过这个暴露的接口就可以获取到相应的指标数据,这种方式需要由目标服务决定采集的目标有哪些,通过配置在 scrape_configs 中的各种 job来实现,无法动态感知新服务,如果后面增加了节点或者组件信息,就得手动修promrtheus 配置,并重启 promethues,很不方便,所以出现了动态服务发现,动态服务发现能够自动发现集群中的新端点,并加入到配置中,通过服务发现,Prometheus 能查询到需要监控的 Target 列表,然后轮询这些 Target 获取监控数据。prometheus 获取数据源 target 的方式有多种,目前支持的服务发现有很多种,常用的主要分为以下几种:https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file

kubernetes_sd_configs: #基于 Kubernetes API 实现的服务发现,让 prometheus 动态发现 kubernetes 中被监控的目标
static_configs: #静态服务发现,基于 prometheus 配置文件指定的监控目标
dns_sd_configs: #DNS 服务发现监控目标
consul_sd_configs: #Consul 服务发现,基于 consul 服务动态发现监控目标file_sd_configs: #基于指定的文件实现服务发现,基于指定的文件发现监控目标

promethues 的静态静态服务发现 static_configs:每当有一个新的目标实例需要监控,都需要手动修改配置文件配置目标 target。
promethues 的 consul 服务发现 consul_sd_configs:Prometheus 一直监视 consul 服务,当发现在 consul中注册的服务有变化,prometheus 就会自动监控到所有注册到 consul 中的目标资源。promethues 的 k8s 服务发现
kubernetes_sd_configs:Prometheus 与 Kubernetes 的 API 进行交互,动态的发现 Kubernetes 中部署的所有可监控的目标资源。

5.1部署croedns
croedns 模板14981

在这里插入图片描述

原来只有一个endpoints,通过 kubectl scale deployment -n kube-system coredns --replicas=2
会自动发现
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、prometheus简介 Prometheus是一个开源的系统监控和告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,prometheus支持多种exporter采集数据,还支持通过pushgateway进行数据上报,Prometheus再性能上可支撑上万台规模的集群。 二、prometheus架构图 三、prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据。 2.Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。 3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端 4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。 5.Grafana:监控仪表盘 6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。 四、课程亮点 五、效果图展示 六、讲师简介 先超(lucky):高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作 主要研究方向: 1.云计算方向:容器 (kubernetesdocker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等2.系统/运维方向:linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等 七、课程大纲

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值