首页 > 其他分享 >部署Prometheus Operator完整流程及踩坑解决思路

部署Prometheus Operator完整流程及踩坑解决思路

时间:2024-05-13 11:41:41浏览次数:15  
标签:kubectl ingress networkPolicy 流程 prometheus Prometheus https Operator com

环境信息

软件 版本号
Linux Centos7.9
k8s v1.26.9
Docker 25.0.4
kube-prometheus v0.13.0
nginx-ingress-controller v1.10.1

K8S集群信息(提前安装好自己的集群,本文不再讲解集群的安装)

主机名 IP
k8s-master 192.168.2.11
k8s-node01 192.168.2.12
k8s-node02 192.168.2.13

一、安装Prometheus Operator

版本选择-复制下载地址下载到本地
wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.13.0.tar.gz

github下载比较慢,可以用代理的加速地址,我这边用的 wget https://mirror.ghproxy.com/https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.13.0.tar.gz

可自行选择版本,版本对照如图:https://github.com/prometheus-operator/kube-prometheus/releases

image

1.解压进入目录:

tar -zxvf v0.13.0.tar.gz && cd kube-prometheus-0.13.0/manifests

第一个坑:国内无法访问registry.k8s.io,需替换资源清单内带使用仓库镜像的地址。

image

网上有说用bitnami仓库也有用registry.aliyuncs.com/google_containers的,从这两个仓库我都pull失败了,最用docker search找到了说是从官方sync的镜像,测试环境也就不管了直接使用

image

2.替换镜像地址

替换镜像地址
sed -i 's#registry.k8s.io/kube-state-metrics#jerrymei#' kubeStateMetrics-deployment.yaml
sed -i 's#registry.k8s.io/prometheus-adapter#jerrymei#' prometheusAdapter-deployment.yaml

3.部署prometheeus

部署prometheeus
kubectl apply --server-side -f ./setup
kubectl create -f ./

也可以先下载下来重打tag,那样需要把镜像的下载模式imagePullPolicy从Always改成IfNotPresent(默认好像是用的Always,我没看到配置文件中存在imagePullPolicy的配置信息,可以在部署后使用命令修改 kubectl -n monitoring get deploy 找到相应deploy在使用kubectl -n monitoring edit deploy <YOUR DEPLOY NAME>)

4.使用ingress提供外部访问

k8s需要安装ingress controller,我这里选择的是ingress-nginx controller
已安全装,或者选择其他ingress controller可跳过或参考官方文档:https://v1-26.docs.kubernetes.io/zh-cn/docs/concepts/services-networking/ingress-controllers/
image

1.安装ingress-nginx controller,也可通过helm部署具体可参考官方文档

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.10.1/deploy/static/provider/cloud/deploy.yaml

###ingress控制器pod可能出现image下载失败,可先下载该yaml文件,修改image为 registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.10.1 版本可根据实际情况更换

image

2.部署一个ingerss

kubectl apply -f ingress-prometheus.yaml

ingress-prometheus.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: monitoring
  name: ingress-monitoring
spec:
  ingressClassName: nginx
  rules:
  - host: "www.prometheus.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: prometheus-k8s
            port:
              number: 9090
  - host: "www.grafana.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: grafana
            port:
              number: 3000
  - host: "www.alertmanager.com"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: alertmanager-main
            port:
              number: 9093

二.本机测试访问(防火墙和selinux处于关闭状态)

kubectl get ingress -n monitoring

image

内网测试域名,需要将host修改为服务实际配置的host

curl -H "host: www.prometheus.com" 10.99.98.214
curl -H "host: www.grafana.com" 10.99.98.214
curl -H "host: www.alertmanager.com" 10.99.98.214

image
全部提示:504 Gateway Time-out

第二个坑,直接curl ingres的ClusterIP报504,以下为排查思路

kubectl get pods -n monitoring -owide
kubectl get svc -n monitoring

image

1.排查ipvs负载规则,svc到pod规则正常
ipvsadm -L -n | egrep "3000\s"

image

2.进入pod,curl服务正常,任意pod中互相访问正常,prometheus、grafana、altermanerge服务正常

kubectl -n monitoring exec -it grafana-79f47474f7-hxjh9 /bin/bash

image

2.直接访问svc和后端服务pod的ClusterIP,都无响应无响应

3.通过port-forward将本地端口分别转发到svc和pod,均访问正常

kubectl port-forward --address=0.0.0.0 svc/grafana 3000 -nmonitoring

kubectl port-forward --address=0.0.0.0 pod/grafana-79f47474f7-hxjh9 3000 -nmonitoring

image

4,最后还是通过一个帖子(https://zhuanlan.zhihu.com/p/624478715) 发现问题:

解决方法:Prometheus Operator 默认设置了 NetworkPolicy,需要手动删除后才能访问
kubectl delete -f manifests/prometheus-networkPolicy.yaml
kubectl delete -f manifests/grafana-networkPolicy.yaml
kubectl delete -f manifests/alertmanager-networkPolicy.yaml

思考:如果是因为networkPolicy的ingress规则导致的无法访问,很好奇通过port-forward转发到svc可以访问,通过svc的ClusterIP却无法访问,这里对k8s的网络理解的还不够啊。

既然是networkPolicy的规则导致的,这里查看了三个服务的networkPolicy文件,如果不打算卸载networkPolicy,应该也也可以在ingress-nginx contronaller的yaml文件中添加networkPolicy允许通过的lable(未进行测试)

image

或者也可以通过修改三个服务的networkPolicy规则,为其添加ingerss-contronller已存在的labels(已测试成功)
app.kubernetes.io/name: ingress-nginx

根据推测尝试修改grafana的networkPolicy

kubectl get networkPolicy -n monitoring
kubectl edit networkPolicy -n monitoring grafana

image

curl -H "host: www.grafana.com" 10.99.98.214

image

参考文档:

kubernetes官网ingress:
https://v1-26.docs.kubernetes.io/zh-cn/docs/concepts/services-networking/ingress/
kube-prometheus github地址:
https://github.com/prometheus-operator/kube-prometheus
ingress-nginx 官方地址:
https://kubernetes.github.io/ingress-nginx/deploy/

其他:
https://zhuanlan.zhihu.com/p/624478715
https://cloud.tencent.com/developer/article/2327634

标签:kubectl,ingress,networkPolicy,流程,prometheus,Prometheus,https,Operator,com
From: https://www.cnblogs.com/wxwbblog/p/18185045

相关文章

  • 运算符:operator
    运算符:operator注意:1.多个操作数中,操作数最高为Long,那么运算结果类型也为Long,如果是byte,int,short,那么结果都为Int。如果最高有float,结果是float类型;如果最高有double,结果是double类型;2.关系运算符返回的结果:正确,错误布尔值3.a++,先等于,a再自增,++a,先a自增,再等于4.+=......
  • PHP-FPM(FastCGI Process Manager)处理请求的流程
    PHP-FPM(FastCGIProcessManager)处理请求的流程大致遵循以下步骤,其中您提到的几个关键函数和阶段是PHP-FPM生命周期中的重要组成部分。下面是对您提到步骤的解释及它们如何在PHP-FPM中执行的概述:1.**php_module_startup**:-这个阶段发生在PHP-FPM服务启动时,而非每次请求处理......
  • Spring MVC执行流程
    视图执行流程用户发送出请求到前端控制器DispatcherServlet。DispatcherServlet收到请求调用HandlerMapping(处理器映射器)。HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。DispatcherServlet调用HandlerAdapter(处理......
  • BIOS 与 UEFI 引导流程
    引用:https://www.cnblogs.com/larry1024/p/17645208.html,非常详细,不过图片我没拷贝过来,可以直接到源站阅读BIOS与UEFI引导流程前言现代计算机的整个启动过程可以概括为:计算机通电;CPU读取保存在主板上ROM芯片里的BIOS或UEFI程序(BootLoader);该程序加载指......
  • 如何设计与构建 FinOps 流程、团队、体系与目标
    作者:景祁前言近几年随着云计算的迅猛发展,企业IT数字化转型也已经进入“深水区”,对于用好云的关注度逐渐提升。《Flexera2023年云计算现状报告》显示,云成本管理优化跃居云管理团队下年度待办清单的榜首。FinOps(财务运营)作为一种新的操作模型逐渐进入云管理团队的视野。FinO......
  • prometheus+grafana 监控mysql数据库
    一:安装插件1.1下载mysqld_exportermysqld_exporter是一个用于监控MySQL服务器的开源工具,它是由Prometheus社区维护的一个官方Exporter。该工具通过连接到MySQL服务器并执行各种查询来收集关于MySQL服务器性能和状态的指标,并将这些指标暴露给Prometheus监控系统。在ht......
  • Prometheus 监控平台组件深度讲解
    Prometheus的重要性和流行度已经无需多言。直入主题,本文对Prometheus监控平台的各个组件做深度讲解,希望能帮助读者更好地理解Prometheus。监控系统的核心逻辑对于一套监控系统而言,核心就是采集数据并存储,然后做告警判定、数据展示分析,这个 专栏文章 详细讲解了这个数据流......
  • HBase读写流程以及为什么面对百亿数据依旧可以很快
    HBase是什么:HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,用于存储海量的结构化、非结构化、半结构化的数据(底层存储的只有字节数组类型的数据)HBase写流程客户端向zookeeper建立连接并发送请求获取meta表的元数据的位置信息,和被哪个regionserver所管理,连接这个......
  • 工作流程组二开
    一、流程核心表1、流程路径、流程表单、表单字段、节点、节点操作者、出口相关表。workflow_type:流程类型表,存放流程类型的基本信息;workflow_base:工作流基本信息表,中isbill字段(0,是表单,1单据或自定义表单,fromid小于0是自定义表单,大于0是单据),id=workflowidworkflow_bill :用户自......
  • OpenVoiceV2本地部署教程,苹果MacOs部署流程,声音响度统一,文字转语音,TTS
    最近OpenVoice项目更新了V2版本,新的模型对于中文推理更加友好,音色也得到了一定的提升,本次分享一下如何在苹果的MacOs系统中本地部署OpenVoice的V2版本。首先下载OpenVoiceV2的压缩包:OpenVoiceV2-for-mac代码和模型https://pan.quark.cn/s/33dc06b46699该版本针对MacOs系统做......