You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用集群外的Prometheus&Grafana监控DigitalOcean上的K8s集群?

可行性确认

完全可以做到——不需要触碰K8s集群内部任何组件,就能在外部DigitalOcean Droplet上用Prometheus+Grafana实现集群监控。核心依赖两个前提:

  • 你的Droplet能通过网络访问到K8s集群的API Server(不管是公网Endpoint还是VPC内网地址)
  • 你有一个具备view集群角色权限的K8s ServiceAccount令牌(用来让Prometheus认证访问K8s API和metrics端点)
前置准备

先搞定这几件事再部署:

  1. 获取K8s API Server地址:如果有集群操作权限,执行以下命令获取:
    kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}'
    
    无权限直接联系集群管理员索要。
  2. 获取授权令牌:如果能操作集群,执行以下命令创建并导出令牌;不能操作则找管理员要一个权限足够的令牌:
    # 创建外部监控用ServiceAccount
    kubectl create sa prometheus-external -n default
    # 绑定view集群角色(足够获取集群监控数据)
    kubectl create clusterrolebinding prometheus-external --clusterrole=view --serviceaccount=default:prometheus-external
    # 导出令牌到本地文件
    kubectl get secret $(kubectl get sa prometheus-external -n default -o jsonpath='{.secrets[0].name}') -n default -o jsonpath='{.data.token}' | base64 -d > prometheus-token.txt
    
  3. 配置Droplet防火墙:确保允许访问K8s API Server的默认端口(6443)。
Docker Compose配置

以下是完整的docker-compose.yml文件,包含Prometheus和Grafana服务:

version: '3.8'

services:
  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus/config:/etc/prometheus
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.enable-lifecycle'  # 支持热加载配置,无需重启容器
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin123  # 记得修改为自定义初始密码
    restart: unless-stopped

volumes:
  prometheus_data:
  grafana_data:
Prometheus核心配置

在Droplet上创建./prometheus/config目录,放入prometheus.yml配置文件,用于抓取K8s集群数据:

global:
  scrape_interval: 15s  # 每15秒抓取一次监控数据
  evaluation_interval: 15s

scrape_configs:
  # 监控Prometheus自身运行状态
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  # 抓取K8s API Server的metrics数据
  - job_name: 'kubernetes-apiserver'
    kubernetes_sd_configs:
    - role: endpoints
    scheme: https
    tls_config:
      ca_file: /etc/prometheus/ca.crt  # 集群CA证书文件路径
    bearer_token_file: /etc/prometheus/token  # 之前导出的令牌文件路径
    relabel_configs:
    - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
      action: keep
      regex: default;kubernetes;https

  # 可选:如果集群已部署kube-state-metrics并暴露外部端点,添加此job抓取更丰富的集群状态数据
  - job_name: 'kube-state-metrics'
    static_configs:
      - targets: ['<替换为kube-state-metrics端点>:8080']

注意:将集群CA证书(可从~/.kube/config的certificate-authority-data字段解码获取)保存到./prometheus/config/ca.crt,把之前生成的令牌内容复制到./prometheus/config/token。

部署启动步骤
  1. 完成目录和配置文件准备后,启动容器:
    docker-compose up -d
    
  2. 访问Grafana:打开浏览器访问http://<你的Droplet公网IP>:3000,用配置的初始密码登录。
  3. 添加Prometheus数据源:在Grafana中添加数据源,地址填写http://prometheus:9090,保存即可。
  4. 导入监控仪表盘:导入官方K8s监控仪表盘(比如ID为315的集群监控仪表盘),即可查看完整的集群监控数据。

内容的提问来源于stack exchange,提问作者Jackk-Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 19:05:14