后續再補一個k8s集群搭建的博客,從0開始搭建k8s集群。使用kube-prometheus非常方便,主要問題只在于拉取鏡像。除了拉取鏡像外其他時間5分鐘即可。耐心等待拉取鏡像。
一.kube-prometheus簡介
kube-prometheus 是一個專為 Kubernetes 設計的開源監控解決方案,基于 Prometheus 生態構建,旨在簡化集群監控組件的部署和管理。
倉庫地址:https://github.com/prometheus-operator/kube-prometheus/tree/main
組件與架構
- Prometheus Operator
- 自動化管理 Prometheus、Alertmanager 等資源的控制器,通過 Kubernetes 自定義資源(CRD)定義監控規則和服務發現邏輯,動態生成配置文件
- 支持高可用部署(如 StatefulSet)和數據持久化(Persistent Volume)
- Prometheus Server
- 核心時序數據庫,負責指標采集、存儲和告警規則評估
- 支持動態服務發現(如 Kubernetes 節點、ServiceMonitor)和靜態配置
- ?Alertmanager
- 集中處理告警信息,提供去重、分組、路由(郵件/Webhook)等功能
- Grafana
- 可視化平臺,內置預配置的 Kubernetes 監控儀表盤(如節點資源使用、Pod 狀態等)
- ServiceMonitor
- 自定義資源,定義 Prometheus 如何從 Kubernetes Service 抓取指標(如選擇器匹配標簽、端口配置)
- ?輔助組件
- ?Node Exporter:采集節點級指標(CPU/內存/磁盤)
- ?kube-state-metrics:轉換 Kubernetes 資源狀態為 Prometheus 可識別的指標(如 Deployment 副本數)
- ?Thanos Sidecar/Query:實現長期存儲和跨集群查詢(高可用場景)
二. 前置環境
1.操作系統配置
三臺centos7.9的服務器
2.k8s集群
搭建部分可以看另一個文章。
版本為1.20.9
只需要配置網絡插件即可,不用配ingress
三.拉取倉庫以及apply yaml文件
1.git拉取倉庫
外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳
查閱資料發現1.20的版本對應的是release-0.8的版本,直接加-b拉取對應版本即可
git clone https://github.com/prometheus-operator/kube-prometheus.git -b release-0.8
下完后有如下文件
2. apply配置文件
直接在github官網拿去配置命令即可,注意不同的release版本命令不太一樣。我的是0.8版本
第二行代碼要進入setup文件執行,再cd…出來運行第三行代碼
# Create the namespace and CRDs, and then wait for them to be available before creating the remaining resources
kubectl create -f manifests/setup
until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done
kubectl create -f manifests/
這里創建的東西都會在monitoring這個命名空間里,查詢容器時注意加命名空間,拉取時間比較長,耐心等待20分鐘。
其實執行完這兩個步驟如果能夠全部runing起來就很容易了,但是大部分情況下有部分容器會拉取不到。所以可以使用dockerhub來拉起鏡像
3.拉取不到鏡像的解決辦法
假設我這個pod拉取不下來,處于rollback狀態之類的狀態,我們可以直接進入menifests文件夾找到這個名字的deployment.yaml
vim進入該文件后找到image,把它改成一個可以使用的,原本是一個k8s.io的image,我找到的是圖片中的這個image地址,改完保存出來apply后下載起來就快了
apply -f kube-state-metrics-deployment.yaml
4.dockerhub上查詢images
如何找到上面的image網址呢?可以直接上瀏覽器打開dockerhub.com,最好使用梯子
search欄直接搜索你要的鏡像,比如我要的鏡像是kube-state-metrics的2.0.0版本
那就直接搜索kube-state-metrics即可
點進去點擊tag再查詢跟你一樣的版本即可,注意選擇版本號就行,不帶其他字符
四.修改部分服務TYPE使其對外部可見
需要將alertmanger-main,grafana和node-exporter的type修改為nodeport,才能夠在瀏覽器中訪問
1.修改alertmanger-service.yaml
在spec中加入type
執行
kubectl apply -f alertmanager-service.yaml
改完后再次查看svc,可以看到alertmanger-main的type已經變成了NodePort,并且其端口號映射到了32104
這時我們訪問主機的32104端口號就可以進入alertmanger的界面了
2.修改grafana-service.yaml
同上在spce中加入type字段
再執行
kubectl apply -f grafana-service.yaml
可以看到grafana也變成了nodeport,同時其端口也對外暴露了
在瀏覽器中打開32667端口,能夠正常進入界面
3.修改prometheus-service.yaml
同上在spce中加入type字段
再執行
kubectl apply -f prometheus-service.yaml
可以看到prometheus-k8s的type變為了nodeport,同時暴露其端口
在瀏覽器中打開31695端口,能夠正常進入界面