Prometheus作用:

Prometheus监控(Prometheus Monitoring)是一种开源的系统监控和警报工具。它最初由SoundCloud开发并于2012年发布,并在2016年加入了云原生计算基金会(CNCF)。Prometheus监控旨在收集、存储和查询各种指标数据,以帮助用户监视其应用程序和系统的性能和运行状态。


部署流程:

本文采用Prometheus来监控k8s集群资源状态,并解决alertmanager 9093端口连接拒绝的问题

1.根据k8s集群版本下载对应矩阵的Prometheus版本

# 我的k8s集群版本为1.26.9,所以我下载0.13版本

wget https://mirror.ghproxy.com/https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.13.0.zip

# 下载完成后解压即可使用

unzip v0.13.0.zip



2.进入解压出来的目录,自定义配置告警规则和邮件推送(看需求)

cd kube-prometheus-0.13.0/manifests/

# 该文件配置告警规则

vim prometheus-prometheusRule.yaml

# 该文件配置告警推送

vim alertmanager-secret.yaml

3.部署Prometheus监控和删除

kubectl apply --server-side -f manifests/setup -f manifests

# 移除Prometheus

kubectl delete --ignore-not-found=true -f manifests/ -f manifests/setup

# 以下为部署完成后正常的资源状态

# 如果没有部署ingress则需要更改以下几个svc配置文件,将svc类型改为NodePort才能对外访问

kubectl -n monitoring edit svc alertmanager-main

kubectl -n monitoring edit svc prometheus-k8s

kubectl -n monitoring edit svc grafana

# 删除对应的网络策略,它默认限制了出口和入口流量,即便使用了 NodePort 类型的 svc 或者 ingress 也无法直接访问

kubectl -n monitoring delete networkpolicy --all



4.接下来说一下我之前遇到的问题

# 在我部署Prometheus监控服务的时候,我的alertmanager一直无法正常启动,查看状态发现了报错信息

kubectl -n monitoring describe pod alertmanager-main-1

# dial tcp 10.244.135.151:9093 connection refused



# 最开始在github官网查看issue时,发现有人遇到了相同的问题,并且也有人给出了解决办法,我试着按照他的方法解决,没成功。他要修改sts里的文件内容,你改了就会发现不管你怎么改,它都不会生效,并且你还删不掉它的sts,该sts是由(crd)自定义资源alertmanager main所控制的,你只有修改这个或者删除这个资源才能停掉sts

kubectl -n monitoring edit alertmanager main

kubectl -n monitoring delete alertmanager main
# 起初想着可能是探针超时时间太短了导致它一直无法通过检测,就修改了alertmanager main的文件,更改超时时间为300s,但还是有问题。后面把探针给它注释掉,不让它检测发现还是有问题。最后是直接把容器的端口给注释掉了,让它通过域名查找,发现了真正的问题

kubectl -n monitoring get alertmanager main -o yaml >
dump-modify.yaml vim dump-modify.yaml apiVersion: monitoring.coreos.com/v1
kind: Alertmanager
metadata:
creationTimestamp: "2024-08-19T08:12:24Z"
generation: 1
labels:
app.kubernetes.io/component: alert-router
app.kubernetes.io/instance: main
app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 0.26.0
name: main
namespace: monitoring
resourceVersion: "510527"
uid: ee407f56-bffa-4191-baa7-e458e7a1b9ff
spec:
image: quay.io/prometheus/alertmanager:v0.26.0
nodeSelector:
kubernetes.io/os: linux
podMetadata:
labels:
app.kubernetes.io/component: alert-router
app.kubernetes.io/instance: main
app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 0.26.0
portName: web
replicas: 3
logLevel: debug
resources:
limits:
cpu: 100m
memory: 100Mi
requests:
cpu: 4m
memory: 100Mi
retention: 120h
securityContext:
fsGroup: 2000
runAsNonRoot: true
runAsUser: 1000
serviceAccountName: alertmanager-main
version: 0.26.0
containers:
- args:
- --config.file=/etc/alertmanager/config_out/alertmanager.env.yaml
- --storage.path=/alertmanager
- --data.retention=120h
- --cluster.listen-address=[$(POD_IP)]:9094
- --web.listen-address=:9093
- --web.route-prefix=/
- --cluster.peer=alertmanager-main-0.alertmanager-operated:9094
- --cluster.peer=alertmanager-main-1.alertmanager-operated:9094
- --cluster.peer=alertmanager-main-2.alertmanager-operated:9094
- --cluster.reconnect-timeout=5m
- --web.config.file=/etc/alertmanager/web_config/web-config.yaml
env:
- name: POD_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
image: quay.io/prometheus/alertmanager:v0.26.0
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 10
httpGet:
path: /
port: 443
scheme: HTTPS
host: example.com
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 3
name: alertmanager
# ports:
# - containerPort: 9093
# name: web
# protocol: TCP
# - containerPort: 9094
# name: mesh-tcp
# protocol: TCP
# - containerPort: 9094
# name: mesh-udp
# protocol: UDP
readinessProbe:
failureThreshold: 10
httpGet:
path: /
port: 443
scheme: HTTPS
host: example.com
initialDelaySeconds: 3
periodSeconds: 5
successThreshold: 1
timeoutSeconds: 3
resources:
limits:
cpu: 100m
memory: 100Mi
requests:
cpu: 4m
memory: 100Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: FallbackToLogsOnError
volumeMounts:
- mountPath: /etc/alertmanager/config
name: config-volume
- mountPath: /etc/alertmanager/config_out
name: config-out
readOnly: true
- mountPath: /etc/alertmanager/certs
name: tls-assets
readOnly: true
- mountPath: /alertmanager
name: alertmanager-main-db
- mountPath: /etc/alertmanager/web_config/web-config.yaml
name: web-config
readOnly: true
subPath: web-config.yaml
# status:
# availableReplicas: 0
# conditions:
# - lastTransitionTime: "2024-08-19T08:12:28Z"
# message: |-
# pod alertmanager-main-1: containers with incomplete status: [init-config-reloader]
# pod alertmanager-main-2: containers with incomplete status: [init-config-reloader]
# observedGeneration: 1
# reason: NoPodReady
# status: "False"
# type: Available
# - lastTransitionTime: "2024-08-19T08:12:28Z"
# observedGeneration: 1
# status: "True"
# type: Reconciled
# paused: false
# replicas: 3
# unavailableReplicas: 3
# updatedReplicas: 3 # 删除已有的main资源 kubectl -n monitoring delete alertmanager main # 重新创建main资源 kubectl -n monitoring apply -f dump-modify.yaml
# 查看sts的日志发现报错信息提示说dns解析有问题,于是就去查看k8s组件coredns的信息,发现了问题所在,我的k8s集群采用的高可用部署方案,网络插件为calico,集群地址为10.10.40.100-105,service网段为10.96.0.0/16,pod网段为10.244.0.0/16,而这个coredns网段却是10.88.0.0/16网段的

kubectl -n monitoring logs sts alertmanager 

kubectl get pod -A -o wide



# 于是查看cni网络组件信息,看到所有节点都有这个cni0的网卡,这个网卡是安装了flannel网络组件才会提供的,问题就出在这里,calico网络组件提供的网卡是calic741a2df36d@if2的网卡名称,所以将原本的coredns删除掉后,网络就恢复正常了

# 此时再将整个Prometheus服务删除重新部署就恢复正常了

ls -l /etc/cni/net.d/

# 两个都要删

kubectl -n kube-system delete pod coredns-5bbd96d687-gtl9r

kubectl -n kube-system get pod -o wide



总结

# 不管部署一套什么服务,pod能跑起来,跨节点pod和pod之间能互相访问就不是网络问题,像这种个别pod有问题的,就查看报错,只要发现是端口拒绝之类的优先检查k8s组件coredns的问题,有奇效,当然还是得根据实际情况而论。

# 如果部署集群有问题的时候,给它改成单节点测试也是很好的排错方式。

Prometheus部署以及问题解决的更多相关文章

  1. k8s全方位监控-prometheus部署

    1.k8s 监控资源对象 2. prometheus简单介绍. https://github.com/prometheus •多维数据模型:由度量名称和键值对标识的时间序列数据•PromSQL:一种灵 ...

  2. Win10手记-IIS部署网站问题解决

    最近在自己的Win10电脑上尝试部署ASP.NET网站时出现了问题,经过多方查找定位到IIS为问题来源. 开始之前 先描述下技术环境: 1.Windows 10 PC 2.Windows 自带的IIS ...

  3. Prometheus部署各服务的Node监控

    1.部署监控主机 部署主机监控,需要安装node_exporter 1.1 下载node exporter wget https://github.com/prometheus/node_export ...

  4. prometheus部署安装

    1. 下载&部署 # 下载 [root@prometheus src]# cd /usr/local/src/ [root@prometheus src]# wget https://gith ...

  5. Kubernetes实战总结 - Prometheus部署

    什么是普罗米修斯? Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 . 自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员 ...

  6. Prometheus部署监控容器

    Prometheus架构描述 Prometheus 是一个非常优秀的监控工具.准确的说,应该是监控方案.Prometheus 提供了监控数据搜集.存储.处理.可视化和告警一套完整的解决方案 Prome ...

  7. linux下jmeter持续集成Jenkins部署时问题解决

    之前成linux下安装了Jenkins,并做了一些简单的工作,这次正好将jmeter也集成进去,在实际操作时发现好多坑,写下做记录 怎么安装这里就不介绍了,网上很多资料,这里只记录问题,以供大家参数 ...

  8. Prometheus学习笔记(2)Prometheus部署

    目录 Prometheus的安装配置启动 Prometheus的安装配置启动 1.Prometheus二进制安装 Prometheus下载链接:https://prometheus.io/downlo ...

  9. docker 在 centos7.* 上的部署及问题解决

    最近尝试搭建docker 环境,其实个人是比较喜欢“菜鸟学习系列”的知识的,怎奈它的讲解是以Ubuntu为主的,最后找到一个搭建学习系列,感觉写的很好,主要是页面风格清晰明了,遂决定按照此教程学习搭建 ...

  10. prometheus部署

    1.prometheus安装 软件下载: wget https://dl.grafana.com/oss/release/grafana-6.4.2-1.x86_64.rpm https://gith ...

随机推荐

  1. 一款利用人工智能将自然语言查询转换为 SQL 代码的互译工具 - SQL Translator

    前言 对于后端程序员来说,编写SQL代码是日常工作中不可或缺的一部分.然而,随着数据复杂性的增加,如何高效.准确地编写SQL查询成为了新的挑战.幸运的是,SQL Translator的出现为后端程序员 ...

  2. Kubernetes 存储资源 PV、PVC 和StorageClass详解

    一.存储机制介绍 在 Kubernetes 中,存储资源和计算资源(CPU.Memory)同样重要,Kubernetes 为了能让管理员方便管理集群中的存储资源,同时也为了让使用者使用存储更加方便,所 ...

  3. 复习 - es6语法

    这几天电脑有点问题,一直在弄,而且论文也逼近了也在时间弄那个 ,前面node有一个大项目,已经做完了,我现在是准备把上次复习断下的继续复习一直到这个项目,然后就开始vue了. 1. 首先是函数的一个进 ...

  4. ubuntu20 配置nginx静态文件访问

    前言 在ubuntu上配置nginx,通过网页可以直接访问ubuntu本地文件,留作参考. 配置 我的nginx配置文件路径在/etc/nginx/目录下. 查看/etc/nginx/nginx.co ...

  5. node.js (原生模板引擎模板)

    app01 // 引入http模块 const http = require('http'); //连接数据库 require('./model/connects'); // 创建网站服务器 cons ...

  6. LSTM实现文本情感分类demo

    import torch import torch.optim as optim import torch.nn as nn import numpy as np import torch.nn.fu ...

  7. 实用!一键生成数据库文档的神器,支持MySQL/SqlServer/Oracle多种数据库

    Screw(螺丝钉)是一款简洁好用的数据库表结构文档生成工具,它的特点是:简洁.轻量.设计良好.多数据库支持.多种格式文档.灵活扩展以及支持自定义模板,对于有经常要进行数据库设计.评审.文档整理等需求 ...

  8. 常用IDE(开发工具)

    一.开发工具 Visual Studio Microsoft Visual Studio(简称VS)是微软公司提供的IDE,可以在VS上编写C.C++.C#等多种语言的项目,所写的代码适用于微软支持的 ...

  9. jQuery中hide()和display的区别在于它们实现元素隐藏的方式不同。

    1. hide()方法是jQuery提供的一个函数,用于隐藏元素.当使用hide()方法时,元素会被设置为display:none,即不显示在页面上,但仍然占据着原来的空间.隐藏后的元素可以通过调用s ...

  10. TIER 1: Appointment

    TIER 1: Appointment SQL Structured Query Language 是一种用于管理关系型数据库的编程语言.它是一种标准化的语言,用于定义.操作和管理数据库中的数据. 经 ...