亚马逊AWS官方博客
与 Prometheus 搭配使用 Amazon EKS 控制平面指标
您可以利用 Kubernetes 核心组件中提供的一系列丰富指标来观察控制平面中正在发生的情况。您可以了解的信息包括:API 服务器的每个资源中 watchers
的数量、审核跟踪事件的数量、向 API 服务器所发送请求的延迟,以及更多信息。这些指标来自于 Kubernetes API 服务器、Kubelet、Cloud Controller Manager 和 Scheduler。这些组件会在 /metrics
处显示内容类型为 text/plain
的“指标”终端节点(通过 HTTP 响应)。这篇博文将详细向您介绍如何基于 Amazon Elastic Container Service for Kubernetes (EKS) 集群获取 API 服务器指标。
先决条件
首先,您必须设置一个 Amazon EKS 集群。在此博文中,我们将在集群配置文件机制中使用 eksctl
。首先,必须下载以下工具:
安装所有必需的工具后,即可开始启动 EKS 集群。在本例中,我们会将集群部署在 us-east-2(即 AWS 俄亥俄区域)中,您可将 AWS_REGION
替换为支持 Amazon EKS 的任何区域。
部署集群
export AWS_REGION=us-east-2
在导出区域后,按照如下所示创建 ClusterConfig
:
cat >cluster.yaml <<EOF
apiVersion: eksctl.io/v1alpha4
kind: ClusterConfig
metadata:
name: control-plane-metrics
region: us-east-2
nodeGroups:
- name: ng-1
desiredCapacity: 2
EOF
在创建该文件后,使用 eksctl create cluster
命令创建集群:
eksctl create cluster -f cluster.yaml
完成此操作大约需要 10 – 15 分钟时间,之后,便可获得可供使用的 Amazon EKS 集群。
原始指标
在直观呈现指标、监视指标以及接收与指标相关的提醒之前,您可以先看一看这些指标终端节点的输出是怎样的。
kubectl get --raw /metrics
这些指标的输出采用 Prometheus 格式。Prometheus 是云原生计算基金会 (CNCF) 的一个成熟项目。它可以扫描与抓取您的集群内的指标终端节点,甚至还能扫描其自身的终端节点。Prometheus 指标的语法为:
metric_name {[ "tag" = "value" ]*} value
您可以设置 metric_name
、为指标定义 tags
(可用于查询),以及设置 value
。以下是使用 apiserver_request_count
的一个指标示例:
apiserver_request_count{client="kube-apiserver/v1.11.8 (linux/amd64) kubernetes/7c34c0d",code="200",contentType="application/vnd.kubernetes.protobuf",resource="pods",scope="cluster",subresource="",verb="LIST"} 7
这行代码的意思是,我们有 7
个发送给 pods
资源的 LIST
请求。
接下来,我们要使用 helm
设置 Prometheus。
配置 Helm
创建集群后,您可以在本地设置 helm
,以免在集群中运行 tiller
。按照博文 Using Helm with Amazon EKS 中的步骤操作。
在完成这些步骤之后,您便可以部署 Prometheus。
部署 Prometheus
首先,创建一个 Kubernetes 命名空间,并使用 helm
来部署 stable/prometheus
软件包:
kubectl create namespace prometheus
helm install stable/prometheus \
--name prometheus \
--namespace prometheus \
--set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2",server.service.type=LoadBalancer
安装完毕后,您可以把服务列出来,以获取负载均衡器的地址:
kubectl get svc -o wide —namespace prometheus
您可以在浏览器中输入此负载均衡器的地址来导航到此负载均衡器,系统会加载 Prometheus UI。您可以在这个地方前往状态 → 目标 – 此页面会向您显示控制平面节点:
如果能够看到自己的节点,您就可以继续检查某些指标。导航到图表,在下拉列表 – 插入光标处的指标 – 中选择任意以 apiserver_
开头的指标并单击执行。系统随即会从 API 服务器加载最新同步的数据。
您现在可以在控制台视图中查看指标,并且可以切换到图表并直观呈现此数据:
清除
如果您专为运行此测试部署了一个集群,并且希望在测试完后清除此集群的话,您可以先删除 prometheus
命名空间,然后删除集群:
kubectl delete namespace prometheus
eksctl delete cluster -f cluster.yaml
您可以利用 Prometheus 查看 Kubernetes API 服务器中正在发生的情况,并且能够以图表形式呈现这些指标在一段时间内的变化。您还可以使用 Prometheus 来设置提醒规则(这会填充提醒选项卡)。另外,您可以利用此 helm
图表来部署 Alertmanager,从而根据自己定义的提醒规则来配置提醒。尝试一下修改 prometheus-server
configmap 来自己设置一些规则:
kubectl get configmap -n prometheus prometheus-server -o yaml
如果您想了解如何像在 Kubernetes API 中这样,在自己的应用程序中使用指标,请查看 Nicholas Turner 和 Nic Cope 的演讲北美 2018 KubeCon CloudNativeCon – 监控全世界:适用于容器化应用程序和集群的有意义指标