K8S学习之基础三十四:K8S之监控Prometheus部署pod版

使用 Kubernetes Pod 的方式部署 Prometheus 是一种常见的方法,尤其是在容器化和微服务架构中。以下是详细的步骤:

1. 创建命名空间(可选)

为了方便管理,可以为 Prometheus 创建一个单独的命名空间。

yaml

复制

复制代码
apiVersion: v1
kind: Namespace
metadata:
  name: monitoring

将上述内容保存为 namespace.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f namespace.yaml

2. 创建 ConfigMap

Prometheus 需要一个配置文件 prometheus.yml。我们可以使用 ConfigMap 来管理这个配置文件。

yaml

复制

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: monitoring
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s

    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']

将上述内容保存为 configmap.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f configmap.yaml

3. 创建 Deployment

接下来,创建一个 Deployment 来运行 Prometheus。

yaml

复制

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus
  template:
    metadata:
      labels:
        app: prometheus
    spec:
      containers:
      - name: prometheus
        image: prom/prometheus:latest
        args:
          - "--config.file=/etc/prometheus/prometheus.yml"
        ports:
        - containerPort: 9090
        volumeMounts:
        - name: config-volume
          mountPath: /etc/prometheus
      volumes:
      - name: config-volume
        configMap:
          name: prometheus-config

将上述内容保存为 deployment.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f deployment.yaml

4. 创建 Service

为了让 Prometheus 服务可以从集群外部访问,我们需要创建一个 Service。

yaml

复制

复制代码
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - port: 9090
    targetPort: 9090
    nodePort: 30090
  selector:
    app: prometheus

将上述内容保存为 service.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f service.yaml

5. 访问 Prometheus

现在,你可以通过 http://<NodeIP>:30090 访问 Prometheus 的 Web UI。

6. 配置监控目标

你可以通过更新 ConfigMap 来添加更多监控目标。例如,监控一个 Node Exporter:

yaml

复制

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: monitoring
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s

    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']
      - job_name: 'node'
        static_configs:
          - targets: ['node-exporter:9100']

更新 ConfigMap:

bash

复制

复制代码
kubectl apply -f configmap.yaml

然后重启 Prometheus Pod 以应用新的配置:

bash

复制

复制代码
kubectl delete pod -l app=prometheus -n monitoring

7. 配置 Alertmanager(可选)

如果需要告警功能,可以部署 Alertmanager。

创建 Alertmanager ConfigMap

yaml

复制

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: alertmanager-config
  namespace: monitoring
data:
  alertmanager.yml: |
    global:
      resolve_timeout: 5m
    route:
      receiver: 'email'
    receivers:
    - name: 'email'
      email_configs:
      - to: 'your-email@example.com'
        from: 'alertmanager@example.com'
        smarthost: 'smtp.example.com:587'
        auth_username: 'your-email@example.com'
        auth_password: 'your-password'

将上述内容保存为 alertmanager-configmap.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f alertmanager-configmap.yaml
创建 Alertmanager Deployment

yaml

复制

复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: alertmanager
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: alertmanager
  template:
    metadata:
      labels:
        app: alertmanager
    spec:
      containers:
      - name: alertmanager
        image: prom/alertmanager:latest
        args:
          - "--config.file=/etc/alertmanager/alertmanager.yml"
        ports:
        - containerPort: 9093
        volumeMounts:
        - name: config-volume
          mountPath: /etc/alertmanager
      volumes:
      - name: config-volume
        configMap:
          name: alertmanager-config

将上述内容保存为 alertmanager-deployment.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f alertmanager-deployment.yaml
创建 Alertmanager Service

yaml

复制

复制代码
apiVersion: v1
kind: Service
metadata:
  name: alertmanager
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - port: 9093
    targetPort: 9093
    nodePort: 30093
  selector:
    app: alertmanager

将上述内容保存为 alertmanager-service.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f alertmanager-service.yaml
配置 Prometheus 使用 Alertmanager

更新 Prometheus 的 ConfigMap,添加 Alertmanager 配置:

yaml

复制

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: monitoring
data:
  prometheus.yml: |
    global:
      scrape_interval: 15s

    scrape_configs:
      - job_name: 'prometheus'
        static_configs:
          - targets: ['localhost:9090']
      - job_name: 'node'
        static_configs:
          - targets: ['node-exporter:9100']

    alerting:
      alertmanagers:
      - static_configs:
        - targets: ['alertmanager:9093']

更新 ConfigMap:

bash

复制

复制代码
kubectl apply -f configmap.yaml

然后重启 Prometheus Pod 以应用新的配置:

bash

复制

复制代码
kubectl delete pod -l app=prometheus -n monitoring

8. 验证部署

确保 Prometheus 和 Alertmanager 正常运行,并通过 Web UI 检查监控数据和告警配置。

9. 安全配置(可选)

根据需要配置身份验证、TLS 加密等安全措施。

10. 监控和优化

定期检查 Prometheus 的性能和资源使用情况,并根据需要进行优化。

通过这些步骤,你应该能够成功在 Kubernetes 上以 Pod 的方式部署 Prometheus。

相关推荐
不太可爱的叶某人5 分钟前
【学习笔记】Java并发编程的艺术——第6章 Java并发容器和框架
java·笔记·学习
yi.Ist2 小时前
图论——Djikstra最短路
数据结构·学习·算法·图论·好难
诗书画唱4 小时前
学习笔记与效率提升指南:编程、记忆与面试备考
笔记·学习·面试
似乎很简单5 小时前
【opencv-Python学习笔记(5):几何变换】
笔记·opencv·学习
丁满与彭彭8 小时前
嵌入式学习笔记--MCU阶段--DAY12实时操作系统rt_thread1
笔记·学习
qq_232045579 小时前
非容器方式安装Prometheus和Grafana,以及nginx配置访问Grafana
nginx·grafana·prometheus
夜莺云原生监控9 小时前
Prometheus 监控 Kubernetes Cluster 最新极简教程
容器·kubernetes·prometheus
诗书画唱10 小时前
我的学习认知、高效方法与知识积累笔记
笔记·学习
小大力10 小时前
简单的 HTTPS 学习
网络协议·学习·https
为什么要内卷,摆烂不香吗11 小时前
kubernetes(4) 微服务
linux·运维·微服务·容器·kubernetes