Как создать Pod из REST API

Как я могу создать Pod, используя REST API?

Я проверил документацию Kubernetes API:
https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.10/

Они пишут, что нужно использовать запрос POST:
POST /api/v1/namespaces/{namespace}/pods

У меня есть этот YAML простого модуля nginx:

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

1 ответ

Решение

Нужно перевести файл YAML в файл JSON:

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

Используйте команду curl следующим образом:

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  

Конечно, используемый вами токен должен иметь права на создание модуля.

Если у кого-то есть способ сделать это без преобразования в JSON, пожалуйста, поделитесь.

Добавляем ответ по запросу автора.

Мы можем использовать файл Yaml напрямую следующим образом.

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"

Одна странная вещь заключается в том, что если я попытаюсь передать файл YAML в данных curl (@file.yaml), он выдаст ошибку. Кажется, тип содержимого YAML не принимает двоичные файлы, поэтому я использовалcatпередать содержимое. Так что следующее также будет работать.

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"

Ссылка:

  1. Справочник по Kubernetes API
  2. Пример развертывания Kubernetes curl - Пример 1 создан на основе этого.
Другие вопросы по тегам