Обзор прототипов
Прототип — описание одного объекта ADCM. В одном бандле может быть описано несколько прототипов, относящихся к соответствующему типу бандла.
Каждый прототип содержит следующие обязательные свойства:
-
name— внутреннее имя прототипа, которое используется в том числе в inventory-файле продуктового или инфраструктурного бандла. -
type— тип прототипа или объекта. Возможные значения:-
для продуктового бандла:
-
cluster -
service
-
-
для инфраструктурного бандла:
-
provider -
host
-
-
-
version— версия прототипа (кластера, сервиса или хостпровайдера). Не применяется к компонентам и хостам. -
display_name— имя объекта, отображаемое в веб-интерфейсе (например,Hadoop). Отличие данного свойства от свойстваnameзаключается в том, чтоnameиспользуется для интеграции с ADCM, обновления объектов и так далее. -
description— развернутое описание прототипа.
Таким образом, простой прототип будет выглядеть следующим образом:
---
- type: cluster
name: control
version: 1
display_name: "Controlling Software"
description: |
This software is intended to monitor and control
you cluster and does it by ...
Также в зависимости от типа объекта прототип может содержать опциональные свойства, описанные ниже.
Общие свойства
Каждый прототип кластера, сервиса, компонента, хостпровайдера или хоста может включать следующие свойства:
-
actionsиconfig -
flag_autogeneration -
venv
config
Свойство config представляет собой описание конфигурационных параметров объекта. Описание свойства, а также доступные типы параметров конфигурации приведены в статье config.
flag_autogeneration
|
ПРИМЕЧАНИЕ
До выпуска релиза 2.2.0 часть функциональности этого свойства была представлена с помощью свойства allow_flags. Свойство allow_flags больше не поддерживается.
|
Свойство предназначено для управления (включения и выключения) автоматической генерацией встроенных флагов. Пример использования свойства для описания прототипа кластера приведен ниже.
Если свойство flag_autogeneration задано для родительского и дочернего объекта, то состояние свойства дочернего объекта будет иметь более высокий приоритет.
Свойство может быть включено и выключено в прототипе любого объекта. Это значит, что flag_autogeneration может быть выключен в конкретном сервисе несмотря на то, что свойство включено в кластере (соответственно все сервисы кластера наследуют состояние свойства).
В текущей реализации поддерживается один встроенный флаг adcm_outdated_config. Этот флаг возникает автоматически, когда изменяется конфигурация объекта. Чтобы включить автоматическое создание этого встроенного флага при изменении конфигурации объекта, укажите для свойства enable_outdated_config значение True.
---
- type: cluster
name: adpg
flag_autogeneration:
enable_outdated_config: True
venv
Свойство venv определяет версию Ansible, которая будет использоваться при запуске действий (action) соответствующего прототипа.
Доступные значения:
-
default(при версии контракта1.0) — использовать версию Ansible 2.8 при запуске действия (action); -
2.9— использовать версию Ansible 2.9 при запуске действия (action); -
2.16— использовать версию Ansible 2.16 при запуске действия (action) (начиная с версии ADCM 2.8.0).
Значением по умолчанию является default.
|
ПРИМЕЧАНИЕ
С выходом версии ADCM 2.8.0 версия Ansible 2.8 считается устаревшей и перестанет поддерживаться в третьем квартале 2026.
|
---
- type: cluster # service component hostprovider host
name: control
version: 1
venv: "2.9"
Прототип кластера
Кластер представляет собой набор сервисов, логически объединенных в один продукт.
Особенности работы с кластером:
-
У кластера определена процедура обновления, с помощью которой можно определить переход кластера от одной версии к другой.
-
Для кластера доступно определение конфигурации.
-
Механизм импорта предназначен для передачи между кластерами (сервисами) метаданных — особым образом помеченной конфигурации. Такой подход позволяет описывать кластеры (сервисы) с целью их повторного использования в разных кластерах (сервисах).
ВАЖНОИмпорт сервисов и кластеров не предполагает их физического переноса.
Прототип кластера может быть описан в бандле в единственном экземпляре.
Помимо обязательных и общих свойств, каждый прототип кластера также может включать следующие опциональные свойства:
adcm_min_version
Свойство adcm_min_version определяет минимальную версию ADCM, которая необходима для корректной работы бандла. Если установленная версия ADCM меньше, чем указанная в бандле версия adcm_min_version, то загрузка этого бандла приведет к ошибке.
allow_maintenance_mode
Свойство allow_maintenance_mode обеспечивает поддержку режима обслуживания для всех прототипов бандла. Значение по умолчанию — false.
Обратите внимание, что данное свойство поддерживает механизм наследования. Это означает, что при его определении на уровне прототипа кластера соответствующее значение автоматически применяется к сервисам и компонентам, входящим в состав бандла. При этом для конкретного дочернего объекта (сервиса или компонента) значение свойства может быть переопределено — в таком случае значение, заданное на уровне дочернего объекта, имеет более высокий приоритет, чем значение, унаследованное от кластера.
Также следует учитывать, что при нахождении сервиса, компонента или хоста в режиме обслуживания доступные для пользователя действия с этим объектом ограничены, поэтому данное свойство рекомендуется рассматривать совместно со свойством allow_in_maintenance_mode.
---
- type: cluster
name: control
version: 1
adcm_min_version: 2019.05.01.00
allow_maintenance_mode: true
config_group_customization
Свойство config_group_customization позволяет добавить поддержку конфигурационных параметров на уровне конфиг-группы. По умолчанию эта функциональность отключена. Значение по умолчанию — false.
|
ПРИМЕЧАНИЕ
Свойство может быть определено для прототипа кластера, сервисов, компонентов и хостпровайдеров. Данное свойство не применяется к прототипам хостов.
|
Свойство config_group_customization позволяет добавить поддержку функциональности конфиг-группы для всех конфигурационных параметров прототипа.
Свойство поддерживает механизм наследования: если оно задано на уровне кластера, соответствующее значение автоматически применяется к сервисам и компонентам данного бандла. Для конкретного сервиса или компонента значение свойства может быть переопределено — в этом случае значение, заданное на уровне дочернего объекта, имеет более высокий приоритет.
---
- type: cluster # service component
name: control
version: 1
config_group_customization: true
Если вы хотите изменить поведение конкретного параметра, воспользуйтесь опцией group_customization соответствующего конфигурационного параметра.
contract_version
Свойство contract_version определяет версию контракта бандла. Под контрактом понимается версионируемый конфиг-файл config.y(a)ml, который фиксирует доступные функции, особенности поведения и гарантии совместимости, необходимые для корректной работы бандла.
---
- type: cluster
name: ado
display_name: ADO
description: Arenadata Orchestrator
version: "{{ cluster_version }}"
contract_version: 2.0
edition: community
license: EULA.txt
adcm_min_version: 2.5.0
env: 2.9
allow_maintenance_mode: true
|
ПРИМЕЧАНИЕ
Если свойство contract_version не указано в config.y(a)ml, автоматически применяется значение 1.0.
|
Версия контракта применяется для обеспечения совместимости бандлов с ADCM и служит для следующих целей:
-
проверка установленных и загруженных бандлов до и во время обновления ADCM;
-
предотвращение обновлений ADCM, которые могут нарушить работу уже установленных бандлов;
-
предварительное уведомление пользователей о бандлах, переходящих в статус устаревших.
Версия контракта следует политике семантического версионирования (semantic versioning):
-
мажорная версия — содержит несовместимые изменения (например, удаление устаревших возможностей или механизмов выполнения);
-
минорная версия — содержит изменения поведения загрузки бандла с сохранением обратной совместимости (например, добавление наследования свойства от кластера к его сервисам).
Каждый релиз ADCM определяет:
-
список поддерживаемых версий контракта;
-
список устаревших версий контракта.
Проверка совместимости бандлов по версии контракта выполняется при запуске и обновлении ADCM. При обнаружении несовместимых бандлов операция прерывается.
edition
Свойство, соответствующее типу бандла, определяет издание объекта. Значение по умолчанию — community. С помощью свойства edition также можно определить правила, определяющие доступность операций обновления (upgrade) для кластеров и хостпровайдеров.
---
- type: cluster
name: adh
display_name: Arenadata Hadoop
version: 1
edition: enterprise
export
Экспорт — это способ указать настройки, которые кластер или сервис может передавать другим кластерам.
Если пользователь связывает кластер с другим кластером или сервисом, используя веб-интерфейс, то они появятся в inventory-файле, а значит вы сможете использовать экспортированные конфигурационные параметры в Ansible playbook следующим образом:
---
- type: service
name: Hadoop
version: 2.1
config:
core-site:
param1:
type: string
param2:
type: integer
quorum:
type: integer
default: 3
export:
- core-site
- quorum
import
Импорт — это способ указать настройки и версии сервисов для кластера или сервиса, чтобы он имел возможность получать их от других кластеров.
Чтобы импортировать части config, экспортированных из другого кластера, используйте свойство import. Вы можете указать название и допустимые версии экспортированного кластера (или сервиса в кластере):
---
-
type: cluster
name: Hive
version: 4
import:
Hadoop:
versions:
min: 1.8
max: 2.5
Если пользователь связывает кластер с другим кластером или сервисом, используя веб-интерфейс, вы можете использовать экспортированные конфигурационные параметры в Ansible playbook следующим образом:
{{ cluster.import.Hadoop.core-site.param2 }}
{{ cluster.import.Hadoop.quorum }}
Следует учитывать, что пользователь может не выполнять импорт требуемого кластера или сервиса, поэтому вам необходимо обрабатывать сценарии отсутствия импортируемых параметров в inventory-файле. В качестве альтернативного решения можно воспользоваться свойством импорта default либо сделать импорт обязательным, применив соответствующие настройки, приведенные в таблице ниже.
| Свойство | Значение по умолчанию | Описание |
|---|---|---|
required |
false |
Если свойство принимает значение |
default |
— |
Массив названий из конфиг-группы кластера или сервиса. Если кластер или сервис не связан с секцией |
multibind |
false |
Если свойство принимает значение |
license
Свойство license указывается в тех случаях, когда требуется отображение пользовательского соглашения при использовании кластера, хостпровайдера или сервиса. В качестве значения указывается путь к файлу лицензии относительно корневой директории бандла.
Ниже приведены два примера использования:
-
для прототипа кластера:
--- - type: cluster name: adh display_name: Arenadata Hadoop version: 1 license: misc/license.txt -
для прототипа сервиса:
--- - type: service name: hdfs display_name: HDFS version: 1 license: misc/license.txt
Если прототип кластера или сервиса содержит свойство license, то после загрузки бандла или перед добавлением сервиса пользователю будет предложено принять лицензионное соглашение. До принятия лицензионного соглашения все дальнейшие действия с бандлом или сервисом будут заблокированы.
---
- type: cluster
name: adh
display_name: Arenadata Hadoop
version: 1
license: misc/license.txt
|
ПРИМЕЧАНИЕ
Вы можете использовать точку, чтобы указать путь к файлу лицензии. В этом случае поиск файла лицензии будет осуществляться в директории, которая содержит файл config.yaml:
|
upgrade
Свойство upgrade позволяет инициировать обновление кластера или хостпровайдера, в ходе которого актуализируется метаинформация объекта и выполняется перевод объекта в новое состояние. Описание свойства приведено в статье upgrade.
Прототип сервиса
Сервис представляет собой набор компонентов, которые определены в бандле продукта и не способны функционировать изолированно.
Помимо обязательных и общих свойств, каждый прототип сервиса также может включать следующие опциональные свойства:
-
components
-
export
-
import
-
license
-
monitoring
-
required
-
requires
Описание свойств allow_maintenance_mode, config_group_customization, export, import и license приведено в разделе Прототип кластера.
components
Сервисный прототип может содержать компоненты. Так как компонент сам считается прототипом, его описание тоже может содержать такие секции, как config и action.
components — это способ поместить сервисные компоненты на хосты в кластере.
---
- type: service
name: server
version: 1
components:
master:
display_name: "Master Node"
description: "This node control all data nodes (see below)"
constraint: [1,2]
node:
display_name: "Data Node"
constraint: [+]
client:
monitoring: passive
constraint
Каждый компонент может содержать опциональное свойство constraint. Это свойство описывает, сколько экземпляров (instance) этого компонента должно быть установлено в одном кластере:
-
[1]— должен быть установлен ровно один компонент. -
[0,1]— должно быть установлено один или ноль компонентов. -
[1,2]— должно быть установлено один или два компонента. -
[0,+]— должно быть установлено ноль или больше компонентов (значение по умолчанию). -
[1,odd]— должно быть установлено один или больше компонентов, общее количество должно быть нечетным. -
[0,odd]— должно быть установлено ноль или больше компонентов; если число компонентов больше ноля, то общее количество должно быть нечетным. -
[odd]— то же, что[1,odd]. -
[1,+]— должно быть установлено один или больше компонентов. -
[+]— компонент должен быть установлен на все хосты кластера.
|
ПРИМЕЧАНИЕ
Использование ограничения [+] может привести к некорректной работе кластера при добавлении нового хоста в уже установленный кластер, так как компонент с данным ограничением должен быть установлен на всех хостах кластера.
|
monitoring
Каждый сервис или компонент может содержать опциональное свойство monitoring. Это свойство определяет, следует ли учитывать heartbeat сервиса или компонента при расчете агрегированного статуса. Значение по умолчанию — active. Чтобы исключить сервис или компонент из расчета статуса, установите значение passive.
---
- type: service
name: server
version: 1
components:
client:
monitoring: passive
requires
Компоненты могут содержать опциональное свойство requires. Свойство определяет взаимозависимости компонентов: какие компоненты нуждаются в том, чтобы одновременно с ними были установлены другие компоненты или сервисы.
Каждый компонент может требовать один или несколько компонентов того же или другого сервиса в кластере. Также компонент может зависеть от одного или нескольких сервисов. Если ваш компонент зависит от другого компонента, который отсутствует в host-component map, то вы не сможете добавить и ваш компонент в host-component mapping. В некоторых случаях все требующиеся компоненты должны устанавливаться одновременно. Зависимости, определенные на уровне компонентов, влияют на валидацию host-component map.
Зависимости нужно рассматривать в качестве еще одного типа ограничений (constraint) или метаограничений для компонента.
В примере ниже рассмотрен сервис Hive с тремя компонентами: HiveServer, Metastore и TezUI. Компонент HiveServer зависит от сервиса HDFS, при этом информация о компонентах сервиса HDFS не требуется. Компонент TezUI требует наличия компонента TimeLineServer сервиса YARN.
---
- type: service
name: Hive
version: 1.0
components:
HiveServer:
requires:
- service: HDFS
Metastore:
constraint: [0,1]
TezUI:
requires:
- service: YARN
component: TimeLineServer
constraint: [0,1]
bound_to
|
ВАЖНО
Свойство bound_to не поддерживается начиная с версии 2.0.0.
|
monitoring
Каждый прототип сервиса или компонента может содержать опциональное свойство monitoring. Это свойство определяет, следует ли учитывать heartbeat сервиса или компонента при расчете агрегированного статуса. Значение по умолчанию — active. Чтобы исключить сервис или компонент из расчета статуса, установите значение passive.
required
Свойство required предназначено для указания обязательности сервиса для корректной работы кластера. Значение по умолчанию — false. Если функционирование кластера невозможно без данного сервиса, установите значение true. В этом случае отсутствие сервиса в составе кластера приведет к ошибке.
requires
Свойство requires предназначено для определения обязательных зависимостей сервиса — оно указывает, какие другие сервисы или компоненты должны быть установлены совместно с данным сервисом для его корректной работы.
По умолчанию сервис считается независимым и не требует наличия других сервисов или компонентов. Если же в requires указан сервис, от которого зависит текущий сервис, то при попытке добавить его в ADCM без необходимого зависимого сервиса будет создан issue. Таким образом, зависимости между сервисами валидируются на этапе добавления сервиса.
Зависимости сервиса от компонентов проверяются отдельно — на этапе сохранения маппинга хостов и компонентов (host-component mapping).
---
- type: service
name: Hive
version: 1.0
requires:
- service: HDFS
- service: YARN
component: TimeLineServer
Прототип хостпровайдера
Помимо обязательных и общих свойств, каждый прототип хостпровайдера может включать следующие опциональные свойства:
Описание свойств приведено в разделе Прототип кластера.