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

仅基于AWS Fargate的Amazon EKS集群监控部署咨询(使用Amazon Managed Prometheus)

没问题,我来给你梳理一套纯Fargate EKS集群搭配Amazon Managed Prometheus(AMP)的监控部署方案,完全不用额外节点组,一步步解决你的指标获取问题:

在纯Fargate EKS集群中基于Amazon Managed Prometheus搭建监控

核心思路

不用依赖传统的自建Prometheus节点,我们用AWS Distro for OpenTelemetry (ADOT) Collector部署在Fargate上采集集群指标,推送到AMP存储,再用Fargate上的Grafana连接AMP查询展示指标。


1. 先搞定前提准备

  • 确保你的EKS集群是纯Fargate模式,并且已经创建了包含monitoring命名空间的Fargate Profile(这样监控组件会被调度到Fargate节点)
  • 提前创建好Amazon Managed Prometheus工作区,记下工作区的Remote Write端点和Query端点
  • 配置EKS集群的OIDC提供商(用来实现IAM Roles for Service Accounts,IRSA,这是Fargate Pod获取AWS权限的关键)

2. 配置IRSA权限(重中之重)

Fargate上的ADOT Collector和Grafana需要权限访问AMP,用IRSA给它们绑定IAM角色:

  • 新建IAM策略,允许对目标AMP工作区执行aps:RemoteWrite(给ADOT)和aps:Query*(给Grafana)动作,策略示例:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "aps:RemoteWrite",
        "aps:QuerySeries",
        "aps:QueryLabelValues",
        "aps:QueryMetadata"
      ],
      "Resource": "arn:aws:aps:<你的区域>:<账号ID>:workspace/<工作区ID>"
    }
  ]
}
  • 分别为ADOT Collector和Grafana的Service Account创建IAM角色,绑定上面的策略,并建立和EKS OIDC提供商的信任关系(确保角色信任策略里包含你的EKS集群OIDC issuer和目标命名空间、ServiceAccount)

3. 部署ADOT Collector到Fargate

ADOT是负责采集集群指标并推送到AMP的核心组件:

  1. 创建监控命名空间:
kubectl create namespace monitoring
  1. 在monitoring命名空间下创建ServiceAccount,关联刚才为ADOT准备的IAM角色:
apiVersion: v1
kind: ServiceAccount
metadata:
  name: adot-collector
  namespace: monitoring
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::<账号ID>:role/<ADOT的IAM角色名>
  1. 部署ADOT Collector的Deployment,配置采集规则和远程写入AMP的配置,示例Manifest片段:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: adot-collector
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      name: adot-collector
  template:
    metadata:
      labels:
        name: adot-collector
    spec:
      serviceAccountName: adot-collector
      containers:
      - name: adot-collector
        image: public.ecr.aws/aws-observability/aws-otel-collector:latest
        args:
          - --config=/etc/otel-collector-config.yaml
        volumeMounts:
          - name: config-volume
            mountPath: /etc
      volumes:
        - name: config-volume
          configMap:
            name: adot-collector-config
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: adot-collector-config
  namespace: monitoring
data:
  otel-collector-config.yaml: |
    receivers:
      prometheus:
        config:
          scrape_configs:
            # 采集Kubernetes节点指标
            - job_name: 'kubernetes-nodes'
              kubernetes_sd_configs:
                - role: node
              relabel_configs:
                - action: labelmap
                  regex: __meta_kubernetes_node_label_(.+)
            # 采集Pod指标
            - job_name: 'kubernetes-pods'
              kubernetes_sd_configs:
                - role: pod
              relabel_configs:
                - action: labelmap
                  regex: __meta_kubernetes_pod_label_(.+)
            # 采集kubelet和cAdvisor指标
            - job_name: 'kubelet'
              kubernetes_sd_configs:
                - role: node
              scheme: https
              tls_config:
                ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
                insecure_skip_verify: true
              bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
              metrics_path: /metrics/cadvisor

    exporters:
      prometheusremotewrite:
        endpoint: "<你的AMP Remote Write端点>"
        auth:
          authenticator: sigv4
        sigv4:
          region: "<你的AWS区域>"

    service:
      pipelines:
        metrics:
          receivers: [prometheus]
          exporters: [prometheusremotewrite]

执行部署:kubectl apply -f adot-collector.yaml

4. 部署Grafana到Fargate

现在部署Grafana并连接AMP:

  1. 在monitoring命名空间创建Grafana的ServiceAccount,关联对应的IAM角色:
apiVersion: v1
kind: ServiceAccount
metadata:
  name: grafana
  namespace: monitoring
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::<账号ID>:role/<Grafana的IAM角色名>
  1. 部署Grafana的Deployment和Service(可以用NodePort或LoadBalancer暴露访问),示例片段:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  namespace: monitoring
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      serviceAccountName: grafana
      containers:
      - name: grafana
        image: grafana/grafana:latest
        ports:
        - containerPort: 3000
        volumeMounts:
        - name: grafana-storage
          mountPath: /var/lib/grafana
      volumes:
      - name: grafana-storage
        emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: monitoring
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 3000
  selector:
    app: grafana

执行部署:kubectl apply -f grafana.yaml

  1. 访问Grafana后,配置数据源为Amazon Managed Prometheus:
  • 选择Prometheus类型数据源
  • 填写AMP的Query端点
  • 在Auth部分开启SigV4认证,选择对应AWS区域
  • 保存并测试数据源,确认连接成功
  1. 导入官方的Kubernetes监控仪表盘(比如ID为1860的仪表盘),就能看到集群的各项指标了。

5. 常见问题排查

如果还是看不到指标,按下面步骤排查:

  • 查看ADOT Collector的Pod日志:kubectl logs -n monitoring <adot-collector-pod-name>,检查是否有scrape成功或写入AMP的日志,有没有权限报错
  • 确认Fargate Profile包含了monitoring命名空间,否则监控Pod不会被调度
  • 检查IRSA角色的信任策略和权限策略是否正确,Pod是否能获取到IAM凭证(可以在Pod里执行curl http://169.254.170.2/v2/credentials/<角色ID>验证)
  • 确认AMP工作区的端点和区域是否正确,有没有网络访问限制(Fargate Pod默认能访问同区域的AWS服务)

内容的提问来源于stack exchange,提问作者Vamsi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:12:39