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

news/2024/9/24 23:29:19

环境信息

软件 版本号
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: monitoringname: ingress-monitoring
spec:ingressClassName: nginxrules:- host: "www.prometheus.com"http:paths:- pathType: Prefixpath: "/"backend:service:name: prometheus-k8sport:number: 9090- host: "www.grafana.com"http:paths:- pathType: Prefixpath: "/"backend:service:name: grafanaport:number: 3000- host: "www.alertmanager.com"http:paths:- pathType: Prefixpath: "/"backend:service:name: alertmanager-mainport: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/30898.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

R语言中如何将科学计数法转换为数值型

001、测试a <- c("1.23e-2", "7.56207e-05", "6.86470e-05") as.numeric(a) ## 直接转换为数值类型, 然而并不起作用 02、增加参数options(scipen = 100) ## 小数点后100位不适用科学计数法 b <- c("1.23e-2", &q…

JavaSE之java基础语法

关键字和保留字 关键字定义和特点 定义:被java语言赋予了特殊含义,用作专门用途的字符串。 特点:关键字中所有字母都为小写。关键字不能用作变量名,方法名,类名,包名和参数。用于定义数字类型的关键字 class interface enum byte short int long float double char bo…

搭建基于vsftpd的本地yum源服务器

注意防火墙和安全机制selinux 挂载光盘镜像至FTP服务端(/var/ftp/自定义目录如centos7)手写yum源 # ip记得换成自己的ip vi /etc/yum.repos.d/ftp.repo [ftp] name=ftp baseurl=ftp://192.168.1.10/centos7 gpgcheck=0验证结果 yum clean all yum repolist

Open Feign

1.Open Feign介绍 Spring Cloud OpenFeign是一种基于Spring Cloud的声明式REST客户端,它简化了与HTTP服务交互的过程。它将REST客户端的定义转化为Java接口,并且可以通过注解的方式来声明请求参数、请求方式、请求头等信息,从而使得客户端的使用更加方便和简洁。同时,它还提…

论文阅读:基于无监督集成聚类的开放关系抽取方法

谢斌红,李玉,赵红燕. 基于无监督集成聚类的开放关系抽取方法. 中文信息学报. 2022, 36(5): 49-58 相关工作关系抽取(RE)旨在从纯文本中抽取两个实体之间的关系,并以三元组形式进行描述。 传统的关系抽取方法主要是有监督的分类模型,需要一组预定义的关系标签和大量的标注数据…

2024广东大学生攻防大赛WP

Misc 猜一猜题目描述: 你们想要的flag就在压缩包里面。压缩包文件名 解密解压密码为a1478520 然后修改flag.png文件头得到扫描二维码之后 ❀❁❀❇❀✼❀❂✿❆✿✽❁❀✿✾❂❅✿❄❂❉❀✿❂❆❀❃❀✿❂❆✿❀❁✾✻✿❁❁❀❁❂❊✻❂✿❈=花朵解密 https://www.qqxiuzi.c…

struts实验

Java EE架构程序设计实验作业 实验名称:利用JSP+Struts2+JDBC+Mysql校园宿舍管理系统 一、实验项目功能 增加了学生登录系统的评价和建议功能,学生可以书写对学校宿舍或者管理员的评价和建议。可以进行修改和删除。 管理员登录系统可以查看所有的评鉴和建议,可以按照宿舍楼号…

C#实现图片转Base64字符串.并支持markdown文件打开展示

引用1.0.3版本或以上的Wesky.Net.OpenTools 包 1.0.3 版本提供图片转Base64字符串方案,并提供根据后缀名自动识别Mime类型,合成标准URI 开源项目地址: Gitee:https://gitee.com/dreamer_j/open-tools.git Github:https://github.com/LittleLittleRobot/OpenTools.git 为了简…