6

How can I create a Pod using REST API ?

I checked the Kubernetes API documentation:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/#-strong-write-operations-strong--54

They are writing that need to use POST request:
POST /api/v1/namespaces/{namespace}/pods

I have this YAML of simple nginx pod:

cat > nginx-pod.yaml <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: nginx1
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
EOF
E235
  • 11,560
  • 24
  • 91
  • 141

2 Answers2

11

Need to translate the YAML file to JSON file:

cat > nginx-pod.json <<EOF
{
    "apiVersion": "v1",
    "kind": "Pod",
    "metadata": {
        "name": "nginx1"
    },
    "spec": {
        "containers": [
            {
                "name": "nginx",
                "image": "nginx:1.7.9",
                "ports": [
                    {
                        "containerPort": 80
                    }
                ]
            }
        ]
    }
}
EOF

Use the curl command like that:

curl -k -v -X POST -H "Authorization: Bearer <JWT_TOKEN>" -H "Content-Type: application/json" https://127.0.0.1:6443/api/v1/namespaces/default/pods -d@nginx-pod.json  

Of course, the token you are using should have permissions to create pod.

If someone has a way to do it without converting to JSON, please share.

E235
  • 11,560
  • 24
  • 91
  • 141
5

Adding an answer as per the author's request.

We can use the Yaml file directly as follows.

curl -k -X POST -H 'Content-Type: application/yaml' \
-H "Authorization: Bearer <JWT_TOKEN>" --data '
apiVersion: v1
kind: Pod
metadata:
  name: nginx1
spec:
  containers:
  - name: nginx
    image: nginx:1.7.9
    ports:
    - containerPort: 80
' "https://127.0.0.1:6443/api/v1/namespaces/default/pods"

One weird thing is that If I try to pass YAML file in curl's data(@file.yaml) It throws an error. Seems YAML content type doesn't accept binary hence I used cat to pass the contents. So the following will also work.

curl -k -X POST -H 'Content-Type: application/yaml' -H "Authorization: Bearer <JWT_TOKEN>"\
 --data "$(cat nginx-pod.yaml)" "https://127.0.0.1:6443/api/v1/namespaces/default/pods"

Reference:

  1. Kubernetes API reference
  2. Kubernetes Deployment curl example - Example 1 is created based on this.
Mani
  • 5,401
  • 1
  • 30
  • 51