Kubernetes API
API Kubernetes служит основой для декларативной схемы конфигурации системы. Инструмент командной строки kubectl можно использовать для создания, обновления, удаления и получения объектов API.
Kubernetes сохраняет свое сериализованное состояние (в настоящее время в etcd) с точки зрения ресурсов API.
Сам Kubernetes раскладывается на несколько компонентов, которые взаимодействуют через его API.
Изменения API
Любая успешная система должна расти и изменяться по мере появления новых вариантов использования или изменения существующих. Поэтому ожидается, что API Kubernetes будет постоянно меняться и расти. Однако будет сохраняться совместимость с существующими клиентами в течение длительного периода времени. В общем, можно ожидать, что новые ресурсы API и новые поля ресурсов будут добавляться часто. Для устранения ресурсов или полей потребуется следовать политике устаревания API.
Определения OpenAPI и Swagger
Полная информация об API документируется с использованием OpenAPI.
Начиная с Kubernetes 1.10, сервер API Kubernetes обслуживает спецификацию OpenAPI через конечную точку /openapi/v2. Запрашиваемый формат указывается установкой заголовков HTTP:
-
Заголовок Accept
Возможные значения: application/json, application/com.github.proto-openapi.spec.v2@v1.0+protobuf (тип содержимого по умолчанию - application/json для */* или без передачи этого заголовка)
-
Заголовок Accept-Encoding
Возможные значения: gzip (пропуск этого заголовка не допустим)
До версии 1.14 конечные точки, разделенные форматом (/swagger.json, /swagger-2.0.0.json, /swagger-2.0.0.pb-v1, /swagger-2.0.0.pb-v1.gz), обслуживают OpenAPI спецификацию в разных форматах. Эти конечные точки устарели и удалены в Kubernetes 1.14.
Примеры получения спецификации OpenAPI:
-
До версии Kubernetes 1.10 - GET /swagger.json
Начиная с Kubernetes 1.10 - GET /openapi/v2 Accept: application/json
-
До версии Kubernetes 1.10 - GET /swagger-2.0.0.pb-v1
Начиная с Kubernetes 1.10 - GET /openapi/v2 Accept: application/com.github.proto-openapi.spec.v2@v1.0+protobuf
-
До версии Kubernetes 1.10 - GET /swagger-2.0.0.pb-v1.gz
Начиная с Kubernetes 1.10 - GET /openapi/v2 Accept: application/com.github.proto-openapi.spec.v2@v1.0+protobuf Accept-Encoding: gzip
Kubernetes реализует альтернативный формат сериализации на основе Protobuf для API, который в первую очередь предназначен для внутрикластерной связи, документирован в предложении по разработке, и файлы IDL для каждой схемы находятся в пакетах Go, которые определяют объекты API.
До версии 1.14 apiserver Kubernetes также представлял API, который можно использовать для получения спецификации Swagger v1.2 Kubernetes API в /swaggerapi. Эта конечная точка устарела и будет удалена в Kubernetes 1.14.
Версии API
Чтобы упростить удаление полей или реструктуризацию представлений ресурсов, Kubernetes поддерживает несколько версий API, каждая из которых имеет свой путь API, например /api/v1 или /apis/extensions/v1beta1.
Были выбраны версии на уровне API, а не на уровне ресурсов или полей, чтобы гарантировать, что API предоставляет четкое, согласованное представление о системных ресурсах и поведении, а также обеспечить контроль доступа к API с истекшим сроком эксплуатации и/или экспериментальным API. Схемы сериализации JSON и Protobuf следуют тем же рекомендациям по изменению схемы - все описания ниже охватывают оба формата.
Обратите внимание, что управление версиями API и программного обеспечения связано только косвенно.
Различные версии API предполагают разные уровни стабильности и поддержки. Критерии для каждого уровня более подробно описаны в документации по изменениям API. Они суммированы здесь:
Альфа-уровень:
- Названия версий содержат alpha (например, v1alpha1).
- Может быть с ошибками. Включение этой функции может привести к ошибкам. По умолчанию отключено.
- Поддержка функции может быть прекращена в любое время без предварительного уведомления.
- API может измениться несовместимыми способами в последующих версиях программного обеспечения без предварительного уведомления.
- Рекомендуется для использования только в недолговечных кластерах тестирования из-за повышенного риска ошибок и отсутствия долгосрочной поддержки.
Бета-уровень:
- Названия версий содержат beta (например, v2beta3).
- Код хорошо протестирован. Включение этой функции считается безопасным. Включено по умолчанию.
- Поддержка всей функциональности не будет прекращена, хотя детали могут измениться.
- Схема и/или семантика объектов могут изменяться несовместимыми способами в последующей бета-версии или стабильной версии. Когда это произойдет, будут предоставлены инструкции по переходу на следующую версию. Это может потребовать удаления, редактирования и повторного создания объектов API. Процесс редактирования может потребовать некоторых размышлений. Это может потребовать простоя приложений, использующих этот функционал.
- Рекомендуется только для не критичного для бизнеса использования из-за возможных несовместимых изменений в последующих выпусках. Если у вас есть несколько кластеров, которые могут быть обновлены независимо, вы можете ослабить это ограничение.
Стабильный уровень:
- Имя версии vX, где X - целое число.
- Стабильные версии функций появятся в выпущенном программном обеспечении для многих последующих версий.
API групп
Чтобы упростить расширение API Kubernetes, были внедрены группы API (API groups). Группа API указывается в пути REST и в поле apiVersion сериализованного объекта.
В настоящее время используется несколько групп API:
Основная группа (core group), часто называемая устаревшей группой (legacy group), находится по пути REST /api/v1 и использует apiVersion: v1.
Названные группы (named groups) находятся по пути REST /apis/$GROUP_NAME/$VERSION и используют apiVersion: $GROUP_NAME/$VERSION (например, apiVersion: batch/v1). Полный список поддерживаемых групп API можно увидеть в справочнике по Kubernetes API.
Существует два поддерживаемых пути расширения API с помощью пользовательских ресурсов:
- CustomResourceDefinition для пользователей с основными потребностями CRUD.
- Пользователи, которым необходим полный набор семантики API Kubernetes, могут реализовать свой собственный сервер apiserver и использовать агрегатор (aggregator), чтобы сделать его понятным для клиентов.
Включение групп API
Некоторые ресурсы и группы API включены по умолчанию. Их можно включить или отключить, установив --runtime-config на apiserver. --runtime-config принимает значения через запятую. Например: чтобы отключить batch/v1, установите --runtime-config=batch/v1=false, чтобы включить batch/v2alpha1, установите --runtime-config=batch/v2alpha1. Флаг принимает разделенный запятыми набор пар ключ=значение, описывающий конфигурацию во время выполнения apiserver.
ВАЖНО: Включение или отключение групп или ресурсов требует перезапуска apiserver и controller-manager для получения изменений --runtime-config.
Включение ресурсов в группы
DaemonSets, Deployments, HorizontalPodAutoscalers, Ingresses, Jobs и ReplicaSets включены по умолчанию. Другие ресурсы расширений можно включить, установив --runtime-config на apiserver. --runtime-config принимает значения через запятую. Например: чтобы отключить deployments и ingress, установите --runtime-config=extensions/v1beta1/deployments=false,extensions/v1beta1/ingresses=false
Читайте также:
- Зачем нужен Kubernetes и что он может делать
- Kubernetes компоненты: мастер компоненты
- Kubernetes компоненты: узловые компоненты (Node Components), Addons (дополнения)
Комментарии
Отправить комментарий