对EKS(AWS云k8s)启用AMP(AWS云Prometheus)监控+AMG(AWS云 grafana)

问题

需要在针对已有的EKS k8s集群启用Prometheus指标监控。而且,这里使用AMP即AWS云的Prometheus托管服务。好像这个服务,只有AWS国际云才有,AWS中国云没得这个托管服务。下面,我们就来尝试在已有的EKS集群上面启用AMP监控。

步骤

下面使用页面方式创建的抓取程序有问题,创建抓取程序的安全组不能指定,如果想指定安全组,需要使用CLI工具进行抓取程序创建。

获取默认抓取程序配置命令,如下:

bash 复制代码
aws amp get-default-scraper-configuration --region us-east-1

这里会得到一个base64编码的抓取程序配置。

然后,使用下面的手动命令创建抓取程序,如下:

bash 复制代码
aws amp create-scraper --source eksConfiguration="{clusterArn='arn:aws:eks:us-east-1:xxxxxx:cluster/xxxxx', securityGroupIds=['sg-xxxxxx'],subnetIds=['subnet-xxxxxxx', 'subnet-xxxxxx', 'subnet-xxxxxxxx']}" --scrape-configuration configurationBlob="asdfaslkdgjoasdlnOQo=" --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-east-1:xxxxxx:workspace/ws-xxxx-xxxx-xxxx'}"

这里使用aws amp create-scraper命令行进行抓取程序创建,主要是为了设置安全组,这里的安全组,是EKS集群的安全组,类似如下:

bash 复制代码
eks-cluster-sg-xxxx-009384

是这样描述的:

EKS created security group applied to ENI that is attached to EKS Control Plane master nodes, as well as any managed workloads.

这个安全组基本上面没有端口和ip限制。

下面使用页面创建方式作废。

打开如下页面:

点击"添加抓取程序",接下来,使用创建AMP工作空间,如下图:

这里我们直接用默认的设置就好。等待一段时间,这里的等待时间可能有点久。

ClusterRole

创建aps-collector-user用户

创建一个集群角色和用户,内容如下:

yaml 复制代码
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: aps-collector-role
rules:
  - apiGroups: [""]
    resources: ["nodes", "nodes/proxy", "nodes/metrics", "services", "endpoints", "pods", "ingresses", "configmaps"]
    verbs: ["describe", "get", "list", "watch"]
  - apiGroups: ["extensions", "networking.k8s.io"]
    resources: ["ingresses/status", "ingresses"]
    verbs: ["describe", "get", "list", "watch"]
  - nonResourceURLs: ["/metrics"]
    verbs: ["get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: aps-collector-user-role-binding
subjects:
- kind: User
  name: aps-collector-user
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: aps-collector-role
  apiGroup: rbac.authorization.k8s.io

保存为clusterrole-binding.yml文件。应用上述文件:

bash 复制代码
kubectl apply -f clusterrole-binding.yml

创建的集群角色aps-collector-role和用户aps-collector-user成功后,我们找到之前一步创建抓取程序时得到的roleArn,具体页面如下:

记住这个抓取程序的IAM角色,然后,将这个IAM角色映射到之前在k8s中创建的aps-collector-user用户。映射命令如下:

bash 复制代码
eksctl create iamidentitymapping --cluster cluster-name --region region-id --arn roleArn --username aps-collector-user

注意:复制到的抓取程序roleArn,需要去掉aws-service-role/scraper.aps.amazonaws.com/这一段,才能用eksctl命令创建映射。

具体了例子如下:

bash 复制代码
eksctl create iamidentitymapping --cluster uat --region us-east-1 --arn arn:aws:iam::xxxxxxxxxxx:role/AWSServiceRoleForAmazonPrometheusScraper_xxxxxx --username aps-collector-user
2024-04-16 16:50:15 [ℹ]  checking arn arn:aws:iam::xxxxxxxxxxx:role/AWSServiceRoleForAmazonPrometheusScraper_xxxxxx against entries in the auth ConfigMap
2024-04-16 16:50:15 [ℹ]  adding identity "arn:aws:iam::xxxxxxxxxxx:role/AWSServiceRoleForAmazonPrometheusScraper_xxxxxx" to auth ConfigMap

查看ConfigMap映射,如下命令:

bash 复制代码
eksctl get iamidentitymapping --cluster uat --region=us-east-1

IAM Identity Center

因为我们使用IAM Identity Center中的用户,登录Grafana Web页面。所以,我们先要用管理账号登录aws,在IAM Identity Center中创建用户和用户组。如果用成员账号登录IAM Identity Center中创建用户和用户组,在后面的AMG(AWS云 grafana)中会看不到的,所以,我们需要使用管理账号在IAM Identity Center中创建用户和用户组。在下面界面,使用管理账号创建用户和用户组,下面是具体页面入口:

AMG(AWS云 grafana)

按上述方式创建完用户和用户组之后,我们开始创建grafana工作区。开始创建grafana工作区,如下图:

设置grafana工作区,如下图:

设置数据源,设置访问权限,如下图:

最后审计一片,如果没问题,就直接创建工作区,如下图:

等待一段时间,可能这里等待时间有点长。

配置IAM Identity Center用户组访问权限

最后,在grafana工作区配置IAM Identity Center用户组访问权限,具体如下图:

设置admin用户组为管理员权限,如下图:

效果如下:

打开grafana web页面

使用IAM Identity Center中admin用户组的成员登录,这个grafana页面。效果如下:

设置grafana的数据源

在grafana控制台直接点击"在Grafana中配置",如下图:

使用IAM Identity Center中admin用户组的成员登录,选择AMP所在云区,就可以看到之前,我们创建的AMP工作区,如下图:

添加完数据源之后,就是一些常规的prometheus操作了。

到这里就差不多完成了AMP+AMG对EKS的监控了。

然后,进入仪表盘倒入页面,如下图:

导入315仪表盘。如下图:

最终效果,如下图:

总结

AMP+AMG监控EKS这一套,在AWS云上面,在2024年4月这个时间点,感觉还是不很成熟,不过,比之前预览版本的prometheus好多了,之前预览版本的AMP,还得在EKS集群安装一个prometheus服务器。感觉有点画蛇添足。现在这个版本AMP,只需要在集群安装一个抓取程序就可以了。不过,页面新建的抓取程序在现在这个时间点,还不能设置安全组,有点小问题。得使用CLI建抓取程序才行。整体来说AWS云托管Prometheus,托管Grafana,来监控k8s集群,总比没有要好。

参考

相关推荐
九河云2 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
神一样的老师2 小时前
利用亚马逊AWS IoT核心和MQTT进行数据采集的综合指南
云计算·aws
昌sit!4 小时前
K8S node节点没有相应的pod镜像运行故障处理办法
云原生·容器·kubernetes
A ?Charis7 小时前
Gitlab-runner running on Kubernetes - hostAliases
容器·kubernetes·gitlab
北漂IT民工_程序员_ZG8 小时前
k8s集群安装(minikube)
云原生·容器·kubernetes
2301_8061313614 小时前
Kubernetes的基本构建块和最小可调度单元pod-0
云原生·容器·kubernetes
逻辑与&&15 小时前
[Prometheus学习笔记]从架构到案例,一站式教程
笔记·学习·prometheus
SilentCodeY15 小时前
containerd配置私有仓库registry
容器·kubernetes·containerd·镜像·crictl
danns88816 小时前
什么是 AWS PrivateLink
云计算·aws