仅基于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的核心组件:
- 创建监控命名空间:
kubectl create namespace monitoring
- 在
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角色名>
- 部署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:
- 在
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角色名>
- 部署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
- 访问Grafana后,配置数据源为Amazon Managed Prometheus:
- 选择Prometheus类型数据源
- 填写AMP的Query端点
- 在Auth部分开启SigV4认证,选择对应AWS区域
- 保存并测试数据源,确认连接成功
- 导入官方的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
相关产品推荐
相关产品推荐

