K8S V1.26安装kube-prometheus安装
一、介绍
github项目地址:https://github.com/prometheus-operator/kube-prometheus/
Kube Prometheus是一个开源项目,它将Prometheus、Grafana、Alertmanager和一系列Exporter等组件集成在一起,为Kubernetes集群提供全方位的监控和告警功能。Prometheus负责数据采集和存储,Grafana提供可视化的监控界面,Alertmanager则负责根据预设规则发送告警信息。
目前支持的版本和对应关系如下:
kube-prometheus stack | Kubernetes 1.23 | Kubernetes 1.24 | Kubernetes 1.25 | Kubernetes 1.26 | Kubernetes 1.27 | Kubernetes 1.28 | Kubernetes 1.29 | Kubernetes 1.30 | Kubernetes 1.31 |
---|---|---|---|---|---|---|---|---|---|
release-0.11 | ✔ | ✔ | ✗ | x | x | x | x | x | x |
release-0.12 | ✗ | ✔ | ✔ | x | x | x | x | x | x |
release-0.13 | ✗ | ✗ | x | ✔ | ✔ | ✔ | x | x | x |
release-0.14 | ✗ | ✗ | x | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
main | ✗ | ✗ | x | x | ✔ | ✔ | ✔ | ✔ | ✔ |
由于基于Kubernetes 1.26安装,Kubernetes 1.28验证也能支持。
kube-prometheus版本使用release-0.13
二、包下载
#从github下载包,如果有网络现在,请离线下载
wget https://github.com/prometheus-operator/kube-prometheus/archive/refs/tags/v0.13.0.tar.gz
#导入包
tar -xf kube-prometheus-0.13.0.tar.gz
三、修改镜像地址(可选)
如果镜像地址国内访问不到,则需要修改地址,以我内部的harbor地址为例:https://192.168.1.10,前提是需要把镜像先下载到私有镜像仓库
#进入配置文件路径
cd kube-prometheus-0.13.0/manifests
#使用国内镜像代理源
find ./ -type f |xargs sed -ri 's+registry.k8s.io/+k8s.mirror.nju.edu.cn/+g'
find ./ -type f |xargs sed -ri 's+quay.io/+k8s.mirror.nju.edu.cn/+g'
# 使用内网harbor仓库
find ./ -type f |xargs sed -ri 's+registry.k8s.io/+192.168.1.10/+g'
find ./ -type f |xargs sed -ri 's+quay.io/+192.168.1.10/+g'
四、修改service端口为Nodeport
如果使用ingress访问,则跳过此步骤,自行增加ingress配置。注意Nodeport是没有被占用的。
3.1 prometheus-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: prometheus
app.kubernetes.io/instance: k8s
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 2.46.0
name: prometheus-k8s
namespace: monitoring
spec:
type: NodePort #新增类型
ports:
- name: web
port: 9090
targetPort: web
nodePort: 30000 #新增端口
- name: reloader-web
port: 8080
targetPort: reloader-web
selector:
app.kubernetes.io/component: prometheus
app.kubernetes.io/instance: k8s
app.kubernetes.io/name: prometheus
app.kubernetes.io/part-of: kube-prometheus
sessionAffinity: ClientIP
3.2 grafana-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: 9.5.3
name: grafana
namespace: monitoring
spec:
type: NodePort #新增类型
ports:
- name: http
port: 3000
targetPort: http
nodePort: 30001 #新增端口
selector:
app.kubernetes.io/component: grafana
app.kubernetes.io/name: grafana
app.kubernetes.io/part-of: kube-prometheus
3.3 alertmanager-service.yaml
apiVersion: v1
kind: Service
metadata:
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: alertmanager-main
namespace: monitoring
spec:
type: NodePort #新增
ports:
- name: web
port: 9093
targetPort: web
nodePort: 30002 #新增
- name: reloader-web
port: 8080
targetPort: reloader-web
selector:
app.kubernetes.io/component: alert-router
app.kubernetes.io/instance: main
app.kubernetes.io/name: alertmanager
app.kubernetes.io/part-of: kube-prometheus
sessionAffinity: ClientIP
五、安装
#初始化一些信息
kubectl apply --server-side -f manifests/setup
kubectl wait \
--for condition=Established \
--all CustomResourceDefinition \
--namespace=monitoring
#执行安装
kubectl apply -f manifests/
六、数据持久化(可选)
这里使用NFS进行数据持久化,需要提前安装nfs-csi-provisioner,并创建好存储类。
6.1 安装 nfs-csi-provisioner(如果环境已安装则跳过)
#本地安装
git clone https://github.com/kubernetes-csi/csi-driver-nfs.git
cd csi-driver-nfs
./deploy/install-driver.sh v4.7.0 local
#查看pod状态
kubectl -n kube-system get pod -o wide -l app=csi-nfs-controller
kubectl -n kube-system get pod -o wide -l app=csi-nfs-node
安装过程中需要拉取镜像,可能拉取不到,请自己修改镜像地址,主要涉及以下几个文件:
csi-driver-nfs/deploy目录下这两个文件:
csi-nfs-controller.yaml
csi-nfs-node.yaml
也可以从以下地址下载压缩包,然后导入至k8s集群中:
6.2 创建存储类
创建存储类配置文件并且执行vi prometheus-data-db-sc.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: prometheus-data-db
provisioner: nfs.csi.k8s.io
parameters:
server: 192.168.3.119 #nfs服务地址
share: /app/nfsdata/prometheus/ #nfs目录,最好提前创建好
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- nfsvers=4.1
#执行配置文件
kubectl apply -f prometheus-data-db-sc.yaml
6.3 Prometheus持久化
执行prometheus-prometheus.yaml
在文件末尾增加以下内容:
#在文件末尾添加以下内容:
retention: 30d #数据保存天数
storage: #存储配置
volumeClaimTemplate:
spec:
storageClassName: prometheus-data-db
resources:
requests:
storage: 50Gi
#执行更新
kubectl apply -f prometheus-prometheus.yaml
6.4 grafana持久化
6.4.1 创建存储类
执行vim grafana-pvc.yaml
,复制以下内容:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: grafana-pvc
namespace: monitoring #指定namespace为monitoring
spec:
storageClassName: grafana-sc #指定StorageClass,没有可以不填写这一行。自己手动创建pv
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
vim grafana-sc.yaml
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: grafana-sc
provisioner: nfs.csi.k8s.io
parameters:
server: 192.168.3.119 #nfs服务地址
share: /app/nfsdata/grafana/ #nfs目录,最好提前创建好
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- nfsvers=4.1
6.4.2 创建存储类声明
执行vim grafana-sc.yaml
,复制以下内容:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: grafana-sc
provisioner: nfs.csi.k8s.io
parameters:
server: 192.168.3.119 #nfs服务地址
share: /app/nfsdata/grafana/ #nfs目录,最好提前创建好
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- nfsvers=4.1
6.4.3 修改grafana配置
执行vim grafana-sc.yaml
,修改以下内容:
**注意:**下面是两种方式,请自行选择
#找到以下位置
volumes:
#注释以下两行
#- emptyDir: {}
# name: grafana-storage
#添加以下内容,这个直接用nfs卷,如需使用pvc方式,请先创建存储类
- name: grafana-storage
nfs:
server: 192.168.3.119
path: /app/nfsdata/grafana
#PVC方式
- name: grafana-storage
persistentVolumeClaim:
claimName: grafana-pvc
七、访问页面
#prometheus
http://IP:30000
#grafana 默认账号密码:admin/admin
http://IP:30001
#alertmanager
http://IP:30002
7.1 将"ClusterIP" 改为 "NodePort" 类型,浏览器使用nodeip+端口方式访问不了
这个坑在安装的时候困扰了许久,几度以为是安装失败,通过以下方案解决
解决方案:执行下面的命令,删除网络策略,让集群重新加载k8s网络。
kubectl delete networkpolicy --all -n monitoring