我使用的是k8s Go客户端,我想在Deployment
上应用HorizontalPodAutoscalers
,我尝试了多次,但总是返回
{
"error": "the server could not find the requested resource"
}
这是我的代码:
func (k *KubeClient) createAutoScaler(deploymentName string) (*v22.HorizontalPodAutoscaler, error) {
autoscaler := &v22.HorizontalPodAutoscaler{
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,
// },
// },
// },
//},
},
}
apply, err := k.client.AutoscalingV2().HorizontalPodAutoscalers("mlu-showroom-test").
Create(context.Background(), autoscaler, apimetav1.CreateOptions{
TypeMeta: apimetav1.TypeMeta{
Kind: "Pod",
APIVersion: "apps/v1",
},
FieldValidation: "Ignore",
})
if err != nil {
return nil, err
}
return apply, nil
}
我已经检查了kubectl get
,部署确实存在。
我试过使用kubectl autoscale
创建自动定标器,它工作正常,我认为问题在于代码,但我不确定哪里出错了。
我找不到任何关于如何使用go-client创建水平自动分频器的文档,上面的代码是通过引用本文档中yaml
的字段创建的:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
如果您以前在k8s go-client中应用过HorizontalAutoScaler,请分享您的知识。
1条答案
按热度按时间jogvjijk1#
再次检查K8S版本后,我了解到有两个问题:
kubernetes v1.23
实现。经过一些修改后,工作代码如下所示