Kubernetes
一、认识
在 Kubernetes
上部署 Prometheus
,并确保其符合生产环境标准,包括持久化存储、容器重启、更新、以及重置销毁存储和配置信息、配置管理、网络策略等,涉及多个方面的配置。以下是一步一步的完整实现,确保 Prometheus
在 Kubernetes
环境中高效、稳定地运行。
二、操作
2.1 创建命名空间
首先,我们将创建一个专门的命名空间来管理 Prometheus
的所有资源。
kubectl create namespace monitoring
这将为 Prometheus
所有的资源(如 Pod
, PVC
, ConfigMa
p 等)创建一个 monitoring
命名空间,以便进行管理。
2.2 创建 StorageClass(可选)
如果你希望自定义存储方式,可以定义一个 StorageClass
。这里使用 Kubernetes
默认的 standard
存储类,但你也可以创建自定义存储类(例如使用 SSD
存储)。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
保存该文件为 prometheus-storageclass.yaml
,然后应用它:
kubectl apply -f prometheus-storageclass.yaml
查看当前集群中的所有存储类:
kubectl get storageclass
2.2 创建 PVC
为了确保 Prometheus
的数据在 Pod
重启时能够持久化,我们需要为 Prometheus
配置 PVC
。这个 PVC
将请求一个特定大小的存储(例如 50Gi
)。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: prometheus-pvc
namespace: monitoring
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi # 可以根据需求调整存储大小
storageClassName: standard # 如果需要使用自定义 StorageClass,请修改为 fast-ssd
保存为 prometheus-pvc.yaml
,然后应用它:
kubectl apply -f prometheus-pvc.yaml
检查 PVC
是否成功创建并绑定:
kubectl get pvc -n monitoring
查看 PVC
状态
kubectl get pvc prometheus-pvc -n monitoring
当 STATUS
为 Bound
时,说明 PVC
已成功绑定到一个 PV
。
2.3 创建 ConfigMap
Prometheus
的配置文件 prometheus.yml
是我们需要挂载到容器的配置文件。我们将使用 ConfigMap
来管理这些配置。创建 ConfigMap
,将 prometheus.yml
文件挂载到 Prometheus
容器中。保存为 prometheus-configmap.yaml
:
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-config
namespace: monitoring
data:
prometheus.yml: |
global:
scrape_interval: 15s # 设置默认抓取间隔时间
scrape_configs:
- job_name: 'prometheus' # 抓取 Prometheus 自身指标
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter' # 抓取 Node Exporter 指标
static_configs:
- targets: ['node_exporter:9100'] # 替换为实际的 Node Exporter 地址
- job_name: 'custom_service' # 自定义服务
static_configs:
- targets: ['127.0.0.1:4000'] # 替换为实际服务地址
应用 ConfigMap
配置
kubectl apply -f prometheus-configmap.yaml
查看 ConfigMap
是否成功创建
kubectl get configmap prometheus-config -n monitoring
2.4 创建 StatefulSet
为了让 Prometheus
支持持久化存储和稳定的网络标识,我们使用 StatefulSet
来部署 Prometheus
。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: prometheus
namespace: monitoring
spec:
serviceName: "prometheus"
replicas: 1 # 如果需要高可用,增加副本数
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus:latest
ports:
- containerPort: 9090
volumeMounts:
- name: prometheus-config
mountPath: /etc/prometheus
subPath: prometheus.yml
- name: prometheus-data
mountPath: /prometheus
resources:
requests:
memory: "2Gi"
cpu: "1"
limits:
memory: "4Gi"
cpu: "2"
volumeClaimTemplates:
- metadata:
name: prometheus-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 50Gi # 根据需求调整存储大小
storageClassName: standard # 如果需要自定义 StorageClass,请修改为 fast-ssd
保存为 prometheus-statefulset.yaml
。
应用 StatefulSet
配置
kubectl apply -f prometheus-statefulset.yaml
查看 StatefulSet
状态
kubectl get statefulset prometheus -n monitoring
查看 Pod
的状态
kubectl get pods -n monitoring
查看 PVC
和 Pod
绑定状态
kubectl get pvc -n monitoring
kubectl get pod -n monitoring
2.5 创建 Service
为了方便访问 Prometheus
,我们将创建一个 Kubernetes
服务暴露 Prometheus
的 Web UI
。
apiVersion: v1
kind: Service
metadata:
name: prometheus
namespace: monitoring
spec:
ports:
- port: 9090
targetPort: 9090
selector:
app: prometheus
type: ClusterIP # 如果需要对外暴露,可以修改为 LoadBalancer 或 NodePort
保存为 prometheus-service.yaml
,然后应用它:
kubectl apply -f prometheus-service.yaml
如果你将服务设置为 ClusterIP
,可以通过 kubectl port-forward
命令来访问 Prometheus Web UI
:
kubectl port-forward svc/prometheus 9090:9090 -n monitoring
然后,你可以在浏览器中访问 http://localhost:9090
来查看 Prometheus
的 Web UI
。
三、查看
3.1 访问页面
访问 Prometheus Web
界面: 在浏览器中访问 Prometheus
: 打开 http://<主机IP>:9090
(例如,http://localhost:9090
)。
3.2 查看状态
转到 Status -> Targets
页面,查看所有目标状态是否为 UP
。