首页 > 解决方案 > 将指标动态添加到 Fabric8 MetricSpecBuilder

问题描述

我想使用 Fabric8 API 创建 HPA。我想将指标动态添加到 MetricSpecBuider。像下面这样的东西,

        HorizontalPodAutoscaler horizontalPodAutoscaler = new HorizontalPodAutoscalerBuilder()
            .withNewMetadata().withName("${config.metadata_name}-hpa").endMetadata()
            .withNewSpec()
            .withNewScaleTargetRef()
            .withApiVersion("apps/v1")
            .withKind("Deployment")
            .withName("${config.metadata_name}")
            .endScaleTargetRef()
            .withMinReplicas(1)
            .withMaxReplicas(10)
            .addToMetrics(new io.fabric8.kubernetes.api.model.MetricSpecBuilder()
            for (metric in config.deploy_env.metrics) {
                .withType(metric.type)
                .withNewResource()
                .withName(metric.resource.name)
                .withNewTarget()
                .withType(metric.resource.target.type)
                .withAverageUtilization(metric.resource.target.averageUtilization)
                .endTarget()
                .endResource()
            }
            .build())
            .endSpec()
            .build()
        return horizontalPodAutoscaler

但是,这会导致错误。

81: unexpected token: for @ line 81, column 4.
11:19:14                for (metric in config.deploy_env.metrics) {
11:19:14        ^
11:19:14  
11:19:14  1 error
11:19:14  

有人可以让我知道如何实现吗?

谢谢 !

标签: jenkinskubernetesfabric8

解决方案


我来自 Fabric8 团队。我认为您应该能够使用addNewMetric()构建器中的方法动态创建新指标。我认为您需要这样做才能动态添加新指标。您还可以List<MetricSpec>动态创建一个并将其分配给带有withMetrics(metricsList).

此代码基于 Fabric8 Kubernetes Client v4.10.3:

HorizontalPodAutoscalerBuilder horizontalPodAutoscalerBuilder = new HorizontalPodAutoscalerBuilder()
        .withNewMetadata().withName("the-hpa").withNamespace("default").endMetadata()
        .withNewSpec()
        .withMetrics()
        .withNewScaleTargetRef()
        .withApiVersion("apps/v1")
        .withKind("Deployment")
        .withName("the-deployment")
        .endScaleTargetRef()
        .withMinReplicas(1)
        .withMaxReplicas(10)
        .withNewBehavior()
        .withNewScaleDown()
        .addNewPolicy()
        .withType("Pods")
        .withValue(4)
        .withPeriodSeconds(60)
        .endPolicy()
        .addNewPolicy()
        .withType("Percent")
        .withValue(10)
        .withPeriodSeconds(60)
        .endPolicy()
        .endScaleDown()
        .endBehavior()
        .endSpec();

for (int i = 0; i < metricInput.length; i++) {
    horizontalPodAutoscalerBuilder
            .editOrNewSpec()
            .addNewMetric()
            .withType(metricInput[i])
            // ...
            .endMetric()
            .endSpec();
}

return horizontalPodAutoscalerBuilder.build()

推荐阅读