Управление Kubernetes, глава 4 (раздел «Альтернативные кодировки») говорит, что сервер API поддерживает три формата данных для спецификаций ресурсов:
- JSON
- YAML
- Буферы протокола (protobuf)
Я протестировал создание ресурсов в этих форматах, используя curl
, и это работает, как показано ниже.
Подготовка
Чтобы легко общаться с сервером API, запустите обратный прокси-сервер к серверу API с помощью kubectl:
kubectl proxy
Теперь сервер API доступен на http://127.0.0.1:8001.
.Спецификация API Kubernetes доступна для http://127.0.0.1:8001/openapi/v2.
Форматы тела запроса
Вы должны указать формат тела HTTP-запроса POST (то есть спецификацию ресурса) в заголовке Content-Type
.
Поддерживаются следующие форматы данных:
application/json
application/yaml
application/vnd.kubernetes.protobuf
Ниже приведены конкретные примеры запросов.
Создание ресурса с помощью JSON
Определите спецификацию ресурса в JSON и сохраните ее в файле.
Например, pod.json
:
{
"apiVersion":"v1",
"kind":"Pod",
"metadata":{
"name":"test-pod"
},
"spec":{
"containers":[
{
"image":"nginx",
"name":"nginx-container"
}
]
}
}
Вызовите API-сервер для создания ресурса:
curl -H "Content-Type: application/json" -d "$(cat pod.json)" -X POST http://127.0.0.1:8001/api/v1/namespaces/default/pods
Создание ресурса с YAML
Определение спецификации ресурса в YAML и сохранение ее в файле.
Например, pod.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- image: nginx
name: nginx-container
Вызовите сервер API для создания ресурса:
curl -H "Content-Type: application/yaml" -d "$(cat pod.yaml)" -X POST http://127.0.0.1:8001/api/v1/namespaces/default/pods
Создайте ресурс с protobuf
Я не тестировал это, потому что формат проводника Kubernetes protobuf использует пользовательскую оболочку вокругprotobuf сериализация ресурса (см. здесь и здесь ).Но, в принципе, это должно работать.
Форматы тела ответа
При создании ресурса, как показано выше, сервер API возвращает полную спецификацию того же ресурса в ответе HTTP (то есть- предоставленная вами спецификация, инициализированная всеми значениями по умолчанию, полем status
и т. д.).
Вы можете выбрать формат этих данных ответа с заголовком Accept
в запросе.
Принятые форматы для заголовка Accept
такие же, как и для заголовка Content-Type
:
application/json
(по умолчанию) application/yaml
application/vnd.kubernetes.protobuf
Например:
curl -H "Content-Type: application/json" -H "Accept: application/yaml" -d "$(cat pod.json)" -X POST http://127.0.0.1:8001/api/v1/namespaces/default/pods
Возможны все комбинации форматов в заголовках Content-Type
и Accept
.