1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-OAM-spec

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
3.component_model.md 8.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 26.11.2024 07:33 76d68d8

3. Модель компонента

В этом разделе описывается модель компонента.

Компоненты описывают функциональные единицы, которые могут быть созданы как часть более крупного распределённого приложения. В разделе 7. Приложение будет описано, как компоненты группируются вместе и как затем настраиваются экземпляры этих компонентов, в то время как этот раздел будет посвящён самой модели компонента.

Определение компонента

Роль сущности ComponentDefinition заключается в том, чтобы позволить поставщикам компонентов объявлять в инфраструктурно-нейтральном формате характеристики выполнения такой единицы исполнения.

Например, каждый микросервис в приложении описывается как компонент. Обратите внимание, что сам ComponentDefinition НЕ является экземпляром этого микросервиса, а представляет собой объявление настраиваемых атрибутов этого микросервиса. Эти настраиваемые атрибуты должны быть представлены в виде списка параметров, которые позволяют команде приложения устанавливать и создавать экземпляр этого компонента позже во время развёртывания.

На практике в качестве компонента можно смоделировать простую контейнерную рабочую нагрузку, диаграмму Helm или облачную базу данных.

Атрибуты верхнего уровня

Здесь приведены атрибуты, предоставляющие информацию верхнего уровня о определении компонента.

Атрибут Тип Требуется Значение по умолчанию Описание
apiVersion string Да Строка, которая идентифицирует версию схемы, которую должен иметь объект. Основные типы используют core.oam.dev/v1beta1 в этой версии модели
kind string Да Должно быть ComponentDefinition
metadata Metadata Да Метаданные объекта.
spec Spec Да Спецификация для определения компонента.

Спецификация

Атрибут Тип Требуется Значение по умолчанию Описание
workload WorkloadTypeDescriptor Да Идентификатор типа рабочей нагрузки этого компонента.
schematic Schematic Да Схематическая информация для этого компонента.

WorkloadTypeDescriptor

Атрибут Тип Требуется Значение по умолчанию Описание
type string Да Ссылка на WorkloadDefinition через имя.
definition WorkloadGVK Да Взаимоисключающий с type, ссылка на WorkloadDefinition через группу, версию и вид.
WorkloadGVK
Атрибут Тип Требуется Значение по умолчанию Описание
apiVersion string Да Версия API типа рабочей нагрузки.
kind string Да Вид API типа рабочей нагрузки.

Schematic

Этот раздел объявляет схематическое представление компонента, который может быть создан как часть приложения в последующем рабочем процессе развёртывания. Обратите внимание, что OAM сам по себе не обеспечивает соблюдение того, как реализовать схематическое изображение, при условии, что оно может:

  1. моделировать развёртываемую единицу;
  2. предоставлять схему JSON или эквивалентный список параметров.

В настоящее время в KubeVela поддерживаются следующие реализации схем (cue, helm, kube).

Пример

Ниже приведён полный пример определения компонента CUE с именем webserver:

```yaml apiVersion: core.oam.dev/v1beta1 kind: ComponentDefinition metadata: name: webserver annotations: definition.oam.dev/description: "webserver is a combo of Deployment + Service" spec: workload: definition: apiVersion: apps/v1 kind: Deployment schematic: cue: template: | output: { apiVersion: "apps/v1" kind: "Deployment" spec: { selector: matchLabels: { "app.oam.dev/component": context.name } template: { metadata: labels: { "app.oam.dev/component": context.name } spec: { **Контейнеры:**

[| { name: context.name image: parameter.image

if parameter["cmd"] != _|_ {
    command: parameter.cmd
}

if parameter["env"] != _|_ {
    env: parameter.env
}

if context["config"] != _|_ {
    env: context.config
}

ports: [{
    containerPort: parameter.port
}]

if parameter["cpu"] != _|_ {
    resources: {
        limits:
            cpu: parameter.cpu
        requests:
            cpu: parameter.cpu
    }
}

}|]

// дополнительный шаблон

outputs: service: { apiVersion: "v1" kind: "Service" spec: { selector: { "app.oam.dev/component": context.name } ports: [ { port: parameter.port targetPort: parameter.port }, ] } }

parameter: { image: string cmd?: [...string] port: *80 | int env?: [...{ name: string value?: string valueFrom?: { secretKeyRef: { name: string key: string } } }] cpu?: string }

После установки веб-сервера на платформе пользователь сможет развернуть этот компонент в приложении следующим образом:

apiVersion: core.oam.dev/v1beta1
kind: Application
metadata:
  name: webserver-demo
spec:
  components:
    - name: hello-world
      type: webserver               # заявка на развертывание определения компонента веб-сервера
      properties:                   # установка значений параметров
        image: crccheck/hello-world
        port: 8000                  # этот порт будет автоматически открыт для общественности
        env:
        - name: "foo"
          value: "bar"
        cpu: "100m"

Примеры других схемных форматов:

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-OAM-spec.git
git@api.gitlife.ru:oschina-mirror/mirrors-OAM-spec.git
oschina-mirror
mirrors-OAM-spec
mirrors-OAM-spec
master