You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用K8s Go客户端创建HorizontalPodAutoscaler遇资源未找到错误求助

问题分析与解决方案

你遇到的the server could not find the requested resource错误,核心原因是HPA对象缺少必要元数据,且CreateOptions配置错误。以下是具体修复点:

错误点1:HPA对象缺少TypeMeta和ObjectMeta

Kubernetes所有API对象必须包含TypeMeta(指定资源类型和API版本)和ObjectMeta(指定名称、命名空间等元数据),你只定义了Spec部分,导致API服务器无法识别这是一个HPA资源。

错误点2:CreateOptions中的TypeMeta配置错误

你在CreateOptions里错误设置了Kind: "Pod"和APIVersion: "apps/v1",这完全不符合HPA的资源类型,而且CreateOptions根本不需要手动设置TypeMeta,客户端会自动处理。


修正后的完整代码

func (k *KubeClient) createAutoScaler(deploymentName string) (*v22.HorizontalPodAutoscaler, error) {
    // 定义HPA的元数据,名称建议和Deployment对应,命名空间要和Deployment一致
    hpaName := deploymentName + "-hpa"
    namespace := "mlu-showroom-test"

    autoscaler := &v22.HorizontalPodAutoscaler{
        // 必须设置TypeMeta,指定HPA的资源类型和API版本
        TypeMeta: apimetav1.TypeMeta{
            Kind:       "HorizontalPodAutoscaler",
            APIVersion: "autoscaling/v2",
        },
        // 必须设置ObjectMeta,指定名称和命名空间
        ObjectMeta: apimetav1.ObjectMeta{
            Name:      hpaName,
            Namespace: namespace,
        },
        Spec: v22.HorizontalPodAutoscalerSpec{
            ScaleTargetRef: v22.CrossVersionObjectReference{
                Kind:       "Deployment",
                Name:       deploymentName,
                APIVersion: "apps/v1",
            },
            MinReplicas: pointer.Int32(2),
            MaxReplicas: 5,
            Metrics: []v22.MetricSpec{
                {
                    Type: v22.ResourceMetricSourceType,
                    Resource: &v22.ResourceMetricSource{
                        Name: "cpu",
                        Target: v22.MetricTarget{
                            Type:               "Utilization",
                            AverageUtilization: pointer.Int32(70),
                        },
                    },
                },
                // 可以取消注释启用内存指标
                //{
                //  Type: v22.ResourceMetricSourceType,
                //  Resource: &v22.ResourceMetricSource{
                //      Name: "memory",
                //      Target: v22.MetricTarget{
                //          Type:               "Utilization",
                //          AverageUtilization: pointer.Int32(70),
                //      },
                //  },
                //},
            },
            // 可以取消注释启用自定义缩容行为
            //Behavior: &v22.HorizontalPodAutoscalerBehavior{
            //  ScaleDown: &v22.HPAScalingRules{
            //      StabilizationWindowSeconds: pointer.Int32(120),
            //      Policies: []v22.HPAScalingPolicy{
            //          {
            //              Type:          v22.PodsScalingPolicy,
            //              Value:         1,
            //              PeriodSeconds: 60,
            //          },
            //      },
            //  },
            //},
        },
    }

    // 移除CreateOptions中错误的TypeMeta配置,使用默认的CreateOptions即可
    apply, err := k.client.AutoscalingV2().HorizontalPodAutoscalers(namespace).
        Create(context.Background(), autoscaler, apimetav1.CreateOptions{
            FieldValidation: "Ignore",
        })

    if err != nil {
        return nil, err
    }

    return apply, nil
}

关键修复说明

  1. 添加TypeMeta:明确指定Kind: "HorizontalPodAutoscaler"和APIVersion: "autoscaling/v2",和你使用的v22(对应autoscaling/v2)版本匹配。
  2. 添加ObjectMeta:设置HPA的名称和命名空间,确保命名空间和目标Deployment一致。
  3. 修正CreateOptions:删除错误的TypeMeta配置,客户端会根据你调用的AutoscalingV2().HorizontalPodAutoscalers()自动识别资源类型。

验证时可以用kubectl get hpa -n mlu-showroom-test查看是否创建成功,和kubectl autoscale创建的HPA对比元数据和Spec是否一致。

内容的提问来源于stack exchange,提问作者Loc Truong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:36:59