Почему Kubernetes REST API обязателен?

Обновлено: Как упоминалось в ответе Джонаса, Kubernetes REST API можно рассматривать как декларативный, а не императивный.

Kubernetes хорошо известен своей декларативной моделью. Контроллер наблюдает за объектами в ETCD, которые содержат желаемое состояние (декларативное). Он сравнивает его с текущим состоянием и генерирует императивные команды для императивного API Kubernetes.

По каким причинам проект Kubernetes не предоставляет декларативный HTTP API?

Таким образом, пусть контроллер/оператор выполняет согласование.

Примером декларативного REST API, который я нашел, является F5 AS3 . И я думаю, что их оператор Kubernetes, построенный поверх этого декларативного API, довольно прост.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
330
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

API Kubernetes можно использовать как декларативно, так и императивно. Для быстрой разработки императивный рабочий процесс может работать лучше, тогда как для прослеживаемости и рабочей нагрузки рекомендуется декларативный рабочий процесс.

Пример декларативного HTTP с использованием curl

Для этого сначала нужно запустить kubectl proxy.

curl -X POST -H 'Content-Type: application/yaml' --data '
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-example
spec:
  replicas: 3
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14
        ports:
        - containerPort: 80
' http://127.0.0.1:8001/apis/apps/v1/namespaces/default/deployments

API Kubernetes является декларативным в том смысле, что вы всегда указываете, что хотите, например. replicas: 2 вместо, например. create 2 replicas это будет иметь место в императивном API. Затем контроллеры «приводят» состояние к тому, «что» вы указали в цикле согласования.

Видеть:

Из вашей ссылки:

Расширение Application Services 3 использует декларативную модель, то есть вы отправляете файл объявления с помощью одного вызова Rest API.

Kubernetes API работает точно так же, когда вы применяете файлы yaml-manifest, используя, например, kubectl apply -f deployment.yaml

Я понимаю, что инструмент Kubectl допускает как декларативный, так и императивный подход, но почему HTTP API (вызываемый Kubectl или контроллерами) является обязательным. Могло ли оно быть декларативным? в чем причина? я что-то упускаю

scoulomb 09.12.2020 23:53

kubectl — это просто http-клиент. HTTP API является декларативным.

Jonas 09.12.2020 23:55

На самом деле я был удивлен, увидев, что это необходимо.

scoulomb 09.12.2020 23:56

Не уверен, что повторю этот запрос дважды $ curl -H 'content-type: application/json' -X POST http://localhost:8080/api/v1/namespaces/testapi/pods -d '{"kind":"Pod","apiVersion":"v1","metadata":{"name":"nginx-v‌​ia-api","labels":{"r‌​un":"nginx"}},"spec"‌​:{"containers":[{"na‌​me":"nginx","image":‌​"nginx"}],"restartPo‌​licy":"Never"}}' | jq .code => 409. Я получил 409. Если бы API был декларативным, он бы не возвращал 409 и не обновлял объект, если в каком-то поле было изменение, или ничего не делал, если тот же объект (идемпотентность)? wdyt

scoulomb 10.12.2020 00:13

для обновления вам нужно использовать PUT и вы можете запускать его много раз, это идемпотент. Вы можете создать ресурс с уникальным именем только один раз, это не является отказом сделать это дважды, но вы получите сообщение об этом.

Jonas 10.12.2020 00:24

также смотрите developer.mozilla.org/en-US/docs/Glossary/Idempotent

Jonas 10.12.2020 00:28

Очень ясно, поймите, почему Kubernetes API является декларативным!

scoulomb 10.12.2020 01:05

Другие вопросы по теме