当前位置: 首页 > 知识库问答 >
问题:

Kubernetes AWS Cloudwatch适配器未获取EKS HPA自动伸缩的自定义度量值

颜哲彦
2023-03-14

我试图通过Kubernetes Cloudwatch适配器,基于自定义的Cloudwatch度量来启用AWS EKS自动伸缩。我已经将自定义指标推送到AWS Cloudwatch,并验证了它们会出现在Cloudwatch控制台中,并且可以使用boto3客户机get_metric_data进行检索。这是我用来将自定义度量发布到CloudWatch的代码:

import boto3
from datetime import datetime

client = boto3.client('cloudwatch')

cloudwatch_response = client.put_metric_data(
    Namespace='TestMetricNS',
    MetricData=[
        {
            'MetricName': 'TotalUnprocessed',
            'Timestamp': datetime.now(),
            'Value': 40,
            'Unit': 'Megabytes',
        }
    ]
)

我有以下yaml文件,用于在Kubernetes中建立外部度量和hpa自动缩放器:

extMetricCustom.yaml:

apiVersion: metrics.aws/v1alpha1
kind: ExternalMetric
metadata:
  name: test-custom-metric
spec:
  name: test-custom-metric
  resource:
    resource: "deployment"
  queries:
    - id: sqs_test
      metricStat:
        metric:
          namespace: "TestMetricNS"
          metricName: "TotalUnprocessed"
        period: 60
        stat: Average
        unit: Megabytes
      returnData: true
kind: HorizontalPodAutoscaler
apiVersion: autoscaling/v2beta1
metadata:
  name: test-scaler
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta1
    kind: Deployment
    name: sqs-consumer
  minReplicas: 1
  maxReplicas: 4
  metrics:
  - type: External
    external:
      metricName: test-custom-metric
      targetAverageValue: 2
NAME          REFERENCE                 TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
test-scaler   Deployment/sqs-consumer   0/2 (avg)   1         4         1          161m

共有1个答案

孙德宇
2023-03-14

与OP一起处理这个带外的问题,并在当天晚些时候打开了这个问题的标签,所以在这里为后代发布结果,供任何偶然发现它的人使用。

问题的根本原因是时区冲突。metrics monitor基于“current”metrics,但是metrics generator脚本中的下面一行生成了没有指定时区的时间戳,并且在本地时区中。

            'Timestamp': datetime.now(),

由于当前时区“没有数据”(由于A-X UTC偏移量,只有过去X小时的数据),系统没有启动缩放,因为实际上值为“0”/nil/null。相反,可以指定一个UTC时间字符串来确保生成的度量是及时的:

            'Timestamp': datetime.utcnow(),
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:GetMetricData"
            ],
            "Resource": "*"
        }
    ]
}
 类似资料:
  • 英文原文:http://emberjs.com/guides/models/customizing-adapters/ 在Ember Data中,处理与后台数据仓库通信的逻辑是通过Adapter来完成的。Ember Data适配器内置了一些关于REST API的假定。如果后台的实现与Ember Data假定的惯例不同,那么通过扩展缺省的适配器可能很容易的实现。 有时因为一些原因需要自定义适配器,例

  • Ember.js适配器指定如何在后端数据存储中保存数据,例如URL格式和REST API标头。 默认的Ember适配器包含一些REST API的内置假设。 这些假设有助于更轻松,更好地构建Web应用程序。 可以使用以下命令创建适配器 - ember generate adapter adapter-name 运行上面的命令时,它将显示以下行 - import DS from 'ember-dat

  • 我正在使用选项卡布局。我正在从live DB获取数据,以便在listview中显示信息。为此,我使用CustomAdapter。arraylist中正确获取的值。一旦将Arraylist数据传递给CustomAdapter,则上下文将出现null异常。如何将片段的上下文传递给自定义适配器。 自定义适配器构造函数 已编辑: 碎片 从片段中,我调用AsyncTask类从云获取数据。从postExecu

  • 主要内容:创建自定义适配器,注册自定义适配器,使用适配器Gson使用其内置适配器执行对象的序列化/反序列化。 它也支持自定义适配器。 让我们来讨论如何创建一个自定义适配器以及如何使用它。 创建自定义适配器 通过扩展类并传递目标类型的对象来创建自定义适配器。 重写读写方法分别执行自定义的反序列化和序列化。 注册自定义适配器 使用注册自定义适配器并使用创建一个Gson实例。参考以下实现代码 - 使用适配器 Gson现在将使用自定义适配器将Json文本转换为

  • 我已经激活了Spring执行器普罗米修斯endpont<代码>/执行器/普罗米修斯。通过增加对千分尺和执行器的依赖,并启用prometheus Endpont。我如何获得自定义度量?

  • 问题内容: 这是我遵循的使用自定义Listview适配器的教程。我遇到的问题是,当我尝试清除适配器时,应用程序崩溃并抛出 更新的代码: 问题答案: 环顾四周,似乎是使用数组初始化适配器。请参阅带有ArrayAdapter.remove的UnsupportedOperationException和无法在ListView中修改ArrayAdapter:UnsupportedOperationExcep