How can I set a node to unschedulable status via the Kubernetes api?

3/8/2016

I am attempting to emulate the behavior of kubectl patch. I'm sending an HTTP PATCH with a json payload of the following:

{
    "apiVersion": "v1",
    "kind": "Node",
    "metadata": {
        "name": "my-node-hostname"
    },
    "spec": {
        "unschedulable": true
    }
}

However, no matter how I seem to tweak this JSON, I keep getting a 415 and the following JSON status back:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "the server responded with the status code 415 but did not return more information",
  "details": {},
  "code": 415
}

Even with debug on kube-apiserver set to 1000, I get no feedback about why the payload is wrong!

Is there a particular format that one should use in the JSON payload sent via PATCH to enable this to work?

-- Peter Grace
kubernetes

1 Answer

3/8/2016

After a helpful member of the Kubernetes Slack channel mentioned I could get the payload from kubectl patch via the --verbose flag, it turns out that Kubernetes expects to get "Content-Type: application/strategic-merge-patch+json" when you are sending the PATCH payload.

-- Peter Grace
Source: StackOverflow