跳到主要内容

Kubernetes

2024年12月24日
柏拉文
越努力,越幸运

一、认识


Kubernetes 上部署 Prometheus,并确保其符合生产环境标准,包括持久化存储、容器重启、更新、以及重置销毁存储和配置信息、配置管理、网络策略等,涉及多个方面的配置。以下是一步一步的完整实现,确保 PrometheusKubernetes 环境中高效、稳定地运行。

二、操作


2.1 创建命名空间

首先,我们将创建一个专门的命名空间来管理 Prometheus 的所有资源。

kubectl create namespace monitoring

这将为 Prometheus 所有的资源(如 Pod, PVC, ConfigMap 等)创建一个 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

STATUSBound 时,说明 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

查看 PVCPod 绑定状态

kubectl get pvc -n monitoring
kubectl get pod -n monitoring

2.5 创建 Service

为了方便访问 Prometheus,我们将创建一个 Kubernetes 服务暴露 PrometheusWeb UI

apiVersion: v1
kind: Service
metadata:
name: prometheus
namespace: monitoring
spec:
ports:
- port: 9090
targetPort: 9090
selector:
app: prometheus
type: ClusterIP # 如果需要对外暴露,可以修改为 LoadBalancerNodePort

保存为 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 来查看 PrometheusWeb UI

三、查看


3.1 访问页面

访问 Prometheus Web 界面: 在浏览器中访问 Prometheus: 打开 http://<主机IP>:9090(例如,http://localhost:9090)。

3.2 查看状态

转到 Status -> Targets 页面,查看所有目标状态是否为 UP