能否用集群外的Prometheus&Grafana监控DigitalOcean上的K8s集群?
可行性确认
完全可以做到——不需要触碰K8s集群内部任何组件,就能在外部DigitalOcean Droplet上用Prometheus+Grafana实现集群监控。核心依赖两个前提:
- 你的Droplet能通过网络访问到K8s集群的API Server(不管是公网Endpoint还是VPC内网地址)
- 你有一个具备view集群角色权限的K8s ServiceAccount令牌(用来让Prometheus认证访问K8s API和metrics端点)
前置准备
先搞定这几件事再部署:
- 获取K8s API Server地址:如果有集群操作权限,执行以下命令获取:
无权限直接联系集群管理员索要。kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}' - 获取授权令牌:如果能操作集群,执行以下命令创建并导出令牌;不能操作则找管理员要一个权限足够的令牌:
# 创建外部监控用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 - 配置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。
部署启动步骤
- 完成目录和配置文件准备后,启动容器:
docker-compose up -d - 访问Grafana:打开浏览器访问
http://<你的Droplet公网IP>:3000,用配置的初始密码登录。 - 添加Prometheus数据源:在Grafana中添加数据源,地址填写
http://prometheus:9090,保存即可。 - 导入监控仪表盘:导入官方K8s监控仪表盘(比如ID为315的集群监控仪表盘),即可查看完整的集群监控数据。
内容的提问来源于stack exchange,提问作者Jackk-Doe
相关产品推荐
相关产品推荐

