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: '[email protected]'
        from: '[email protected]'
        smarthost: 'smtp.example.com:587'
        auth_username: '[email protected]'
        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。

相关推荐
X Y O23 分钟前
opencv初步学习——图像处理3
图像处理·opencv·学习
球求了38 分钟前
Linux 入门:权限的认识和学习
linux·运维·服务器·开发语言·学习
宫瑾1 小时前
逻辑派G1 6层高速板学习
学习·fpga开发
risc1234561 小时前
【k8s】containerd兼容docker镜像
docker·云原生·容器·kubernetes
charlie1145141911 小时前
IMX6ULL学习整理篇——Linux驱动开发的基础3:向新框架迁移
linux·驱动开发·嵌入式硬件·学习·教程
LCY1331 小时前
k8s基础资源管理指令
云原生·容器·kubernetes
Java版蜡笔小新1 小时前
数字与静态
java·开发语言·学习
小何学计算机2 小时前
云原生高级实验
运维·云原生
哦豁灬2 小时前
基于香橙派 KunpengPro学习CANN(2)——Ascend Extension for PyTorch 配置与安装
人工智能·pytorch·学习·ascend
不会编程的懒洋洋2 小时前
软考笔记——计算机系统知识
笔记·学习·软考·计算机系统