Какие форматы данных поддерживает сервер Kubernetes API? - PullRequest
0 голосов
/ 20 февраля 2019

При обращении к серверу API напрямую (т.е. не с kubectl, а с прямыми HTTP-запросами), какие форматы для спецификаций ресурсов поддерживает сервер API?

Во всех приведенных мною примерахспецификации ресурсов представлены в формате JSON (например, здесь ).Но я не смог найти никакой общей информации об этом.

Принимает ли сервер API спецификации ресурсов в других форматах, таких как YAML или protobuf?

Аналогично, когда сервер API возвращает ресурсыв ответ на запрос GET всегда ли ресурсы возвращаются в формате JSON или поддерживаются другие форматы?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Управление 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.

0 голосов
/ 20 февраля 2019

В Kubernetes поддерживаются форматы json и YAML.Я предполагаю, что вы создаете и обновляете ресурсы, используя kubectl.kubectl принимает оба этих формата.

если вы передадите формат YAML, внутренне kubectl преобразует его в json и отправит на сервер API.

...