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。

相关推荐
我不会起名字3221 小时前
Pod 一直 Pending:调度器 5 类失败原因与 kubectl describe 的正确读法
云原生·kubernetes·调度·排查
xxwl5853 小时前
区域赛算法模版第八章---贪心(Greedy)
c++·笔记·学习·算法
qq_284274054 小时前
S7-1200 PLC硬件与启保停实训:CPU选型与DC/DC/DC、循环扫描五阶段、博途组态及电动机启停自锁梯形图(含考点)
笔记·学习·自动化·制造
我不会起名字3224 小时前
K8s 服务 DNS 解析偶发 5 秒超时:conntrack 与 ndots 的 3 个坑
kubernetes·k8s·dns·conntrack·coredns
dear_bi_MyOnly4 小时前
栈和队列:从原理到应用全解析
c语言·开发语言·c++·学习·分类
risc1234564 小时前
万变不离其宗
人工智能·低代码·云原生
遇印记5 小时前
应用层,网络管理
运维·网络·windows·学习·安全
乌暮6 小时前
从 `println` 到生产级日志:Spring Boot 日志体系完全指南
java·开发语言·jvm·spring boot·后端·学习·面试
xian_wwq7 小时前
【学习笔记】Milvus 是什么?为什么 RAG 系统经常使用它?-14
笔记·学习·milvus
自信150413057597 小时前
重生之从0开始学习c++之string(下)
c++·学习·stl