配置共享存儲
Prometheus
需要配置持久化存儲,防止數據丟失
服務端
服務端安裝 NFS 服務
sudo apt install nfs-kernel-server
創建共享目錄,在服務器端創建 /nfs 目錄。
mkdir /nfs
chmod -R 777 /nfs # 設置文件權限
nfs目錄下只給了默認權限,不設置權限,會報錯
GF_PATHS_DATA='/var/lib/grafana' is not writable.
You may have issues with file permissions, more information here: http://docs.grafana.org/installation/docker/#migrate-to-v51-or-later
mkdir: can't create directory '/var/lib/grafana/plugins': Permission denied
編寫配置文件
vim /etc/exports
#[任意主機所有權限]
/nfs *(rw,sync,insecure,no_subtree_check,no_root_squash)
重啟 NFS 服務
sudo service nfs-kernel-server restart
常用命令工具
#在安裝 NFS 服務器時,已包含常用的命令行工具,無需額外安裝
#顯示已經 mount 到本機 NFS 目錄的客戶端機器
sudo showmount -e localhost
#將配置文件中的目錄全部重新 export 一次,無需重啟服務
sudo exportfs -rv
#查看 NFS 的運行狀態
sudo nfsstat
#查看 rpc 執行信息,可以用于檢測 rpc 運行情況
sudo rpcinfo
客戶端
需要連接服務端的節點,例如 node 節點
安裝客戶端工具
sudo apt install nfs-common
查看 NFS 服務器上的共享目錄
#顯示指定的 NFS 服務器(假設 IP 地址為 192.168.58.29)上 export 出來的目錄
sudo showmount -e 192.168.58.29
創建本地掛載目錄
sudo mkdir -p /nfs
掛載共享目錄
#假設 NFS 服務器 IP為 192.168.58.29,可以如下設置掛載
sudo mount -t nfs 192.168.58.29:/nfs /nfs
開始安裝 Prometheus
下載 Prometheus 壓縮包
在 releases
中,找到自己想安裝的版本:https://github.com/prometheus-community/helm-charts/releases/
wget https://github.com/prometheus-community/helm-charts/releases/download/kube-prometheus-stack-72.3.1/kube-prometheus-stack-72.3.1.tgz
配置持久化卷
創建 prometheus-storage-class.yaml
文件
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: prometheus-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
創建 prometheus-pv.yaml
文件
apiVersion: v1
kind: PersistentVolume
metadata:name: prometheus-pv
spec:capacity:storage: 40GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: prometheus-storagenfs:path: /nfs/prometheusserver: 192.168.58.29
---
apiVersion: v1
kind: PersistentVolume
metadata:name: alertmanager-pv
spec:capacity:storage: 2GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: prometheus-storagenfs:path: /nfs/alertmanagerserver: 192.168.58.29
---
apiVersion: v1
kind: PersistentVolume
metadata:name: grafana-pv
spec:capacity:storage: 8GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: prometheus-storagenfs:path: /nfs/grafanaserver: 192.168.58.29
執行安裝 StorageClass
、pv
kubectl apply -f prometheus-storage-class.yaml
kubectl apply -f prometheus-pv.yaml
驗證安裝
kubectl get StorageClass
kubectl get pv
配置 Prometheus 自定義配置
創建 values.yaml
文件,啟用持久化存儲并指定 StorageClass
:
prometheus:prometheusSpec:storageSpec:volumeClaimTemplate:spec:storageClassName: prometheus-storageaccessModes: ["ReadWriteOnce"]resources:requests:storage: 40Gi
alertmanager:alertmanagerSpec:storage:volumeClaimTemplate:spec:storageClassName: prometheus-storageaccessModes: ["ReadWriteOnce"]resources:requests:storage: 2Gi
grafana:persistence:enabled: truestorageClassName: prometheus-storageaccessModes: ["ReadWriteOnce"]size: 8Gi
創建共享存儲文件夾
mkdir -p /nfs/alertmanager /nfs/grafana /nfs/prometheuschmod -R 777 /nfs
helm 離線安裝
helm install prometheus ./kube-prometheus-stack-72.3.1.tgz \--namespace monitoring \--create-namespace \-f values.yaml
安裝完成,輸出日志:
NAME: prometheus
LAST DEPLOYED: Wed May 14 15:41:31 2025
NAMESPACE: monitoring
STATUS: deployed
REVISION: 1
NOTES:
kube-prometheus-stack has been installed. Check its status by running:kubectl --namespace monitoring get pods -l "release=prometheus"Get Grafana 'admin' user password by running:kubectl --namespace monitoring get secrets prometheus-grafana -o jsonpath="{.data.admin-password}" | base64 -d ; echoAccess Grafana local instance:export POD_NAME=$(kubectl --namespace monitoring get pod -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=prometheus" -oname)kubectl --namespace monitoring port-forward $POD_NAME 3000Visit https://github.com/prometheus-operator/kube-prometheus for instructions on how to create & configure Alertmanager and Prometheus instances using the Operator.
卸載 Prometheus
helm uninstall prometheus --namespace monitoring