【云原生】Prometheus+Grafana对k8s集群服务资源pod进行监控;kubernetes常见问题汇总和排查

前言

此前已经在树莓派集群中部署k3s+node_exporter+Prometheus+Grafana进行集群的监测:
https://blog.csdn.net/weixin_39589455/article/details/125759769?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167324234616782425650741%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=167324234616782425650741&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-2-125759769-null-null.blog_rank_default&utm_term=k3s&spm=1018.2226.3001.4450

本文钟,我们要实现通过Prometheus监控k8s集群中各种资源:如微服务,容器资源指标 并在Grafana显示

思路

  • 可以通过外部prometheus通过连接apiserver去监控k8s集群内指标。(前提k8s集群内安装好相应的exports)

  • 可以通过部署kube-prometheus(集群内部起了一套监控) 在通过联邦的方式,进行监控。

包括监控k8s节点、监控coreDns服务以及监控Ingress-nginx,但是本文侧重于监控k8s的指标

以下采用 外部prometheus监控cadvisor,kube-state-metrics来获取k8s集群指标资源

一、Node Exporter 监控k8s节点

安装node_exporter,我这边是采用的DaemonSet来确保每个节点都有对应的pod。创建node-export.yaml如下:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter
  namespace: monitor
  labels:
    k8s-app: node-exporter
spec:
  selector:
    matchLabels:
      k8s-app: node-exporter
  template:
    metadata:
      labels:
        k8s-app: node-exporter
    spec:
      hostPID: true			#这几项是定义了该pod直接共享node的资源,这样也不需要用svc来暴露端口了
      hostIPC: true
      hostNetwork: true
      containers:
      - image: bitnami/node-exporter:latest
        args: 
        - --web.listen-address=$(HOSTIP):9100
        - --path.procfs=/host/proc
        - --path.sysfs=/host/sys
        - --path.rootfs=/host/root
        - --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+)($|/)
        - --collector.filesystem.ignored-fs-types=^(autofs|binfmt_misc|cgroup|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|sysfs|tracefs)$
        name: node-exporter
        env:
        - name: HOSTIP
          valueFrom:
            fieldRef:
              fieldPath: status.hostIP
        resources: 
          requests: 
            cpu: 150m
            memory: 180Mi
          limits:
            cpu: 150m
            memory: 180Mi
        securityContext:
          runAsNonRoot: true
          runAsUser: 65534
        volumeMounts:
        - name: proc		# 我对应的卷都是用的hostPath,直接将宿主机卷挂给pod避免pod无法正常获取node信息
          mountPath: /host/proc
        - name: sys
          mountPath: /host/sys
        - name: root
          mountPath: /host/root
          mountPropagation: HostToContainer
          readOnly: true
        ports:
        - containerPort: 9100
          protocol: TCP
          name: http
      tolerations: 	#这里是为了让pod能在master上运行,加了容忍度
      - key: node-role.kubernetes.io/control-plane 	
        operator: Exists
        effect: NoSchedule
      volumes: 
      - name: proc
        hostPath:
          path: /proc
      - name: dev
        hostPath:
          path: /dev
      - name: sys
        hostPath:
          path: /sys
      - name: root
        hostPath:
          path: /

应用:

kubectl apply -f node-export.yaml 

查看状态

kubectl get pod -n monitor 

在这里插入图片描述

监控web端查看状况,可以看到它直接使用了宿主机的9100端口

ss -lntp |grep node_exporter

返回:

LISTEN    0         4096          10.10.21.170:9100             0.0.0.0:*        users:(("node_exporter",pid=2597275,fd=3))   

二、监控coreDns服务

coredns自身提供了/metrics接口,我们直接配置prometheus去它的9153拿数据即可

kubectl -n kube-system get svc 

在这里插入图片描述

kubectl -n kube-system get cm

在这里插入图片描述

kubectl -n kube-system get cm coredns -o yaml

在这里插入图片描述

三、监控Ingress-nginx

ngress-nginx自身默认也提供了/metrics接口,但是需要我们先给他暴露10254端口,暴露之后我们直接配置prometheus去它的9153拿数据即可

暴露Ingress端口有多种方法,比如把对应deployment的网络模式改为hostNetwork,直接将node的10254给到Ingress
或者先在deployment中将端口加上,再去Ingress对应的svc里面将10254端口代理一下

这边我用的是第一种方式

kubectl -n ingress-nginx edit deployments.apps ingress-nginx-controller 

需要改的地方有两处

kubectl -n ingress-nginx get deployments.apps ingress-nginx-controller -o yaml
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别出BUG求求了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值