kuberneteskubectlkube-apiserver

Patch through Kuberentes rest API


I am trying to patch horizontal pod autoscaler by setting minimum replica through kubernetes api

Here is the curl which I am using

curl -k  \
    --request PATCH \
            --header "Authorization: Bearer $KUBE_TOKEN" \
            --header "Content-Type: application/strategic-merge-patch+json" \
            --data '{
                "apiVersion": "autoscaling/v1",
                "kind": "HorizontalPodAutoscaler",
                "metadata": {
                    "labels": {
                        "app.kubernetes.io/instance": "test"
                    },
                    "name": "test",
                    "namespace": "default"
                },
                "spec": {
                    "maxReplicas": 2,
                    "minReplicas": 1,
                    "scaleTargetRef": {
                        "apiVersion": "apps/v1",
                        "kind": "Deployment",
                        "name": "test"
                    },
                    "targetCPUUtilizationPercentage": 60
                }
            
            }' \
            https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_PORT_443_TCP_PORT/apis/autoscaling/v1/namespaces/default/horizontalpodautoscalers

I receive following response

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {
    
  },
  "status": "Failure",
  "message": "the server does not allow this method on the requested resource",
  "reason": "MethodNotAllowed",
  "details": {
    
  },
  "code": 405
}

Can anyone know where am I missing?

Thanks


Solution

  • The URL path must contain the name:

    /apis/autoscaling/v1/namespaces/{namespace}/horizontalpodautoscalers/{name}
    

    Its documented on this page https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#horizontalpodautoscaler-v1-autoscaling