• Русский
  • Как настроить шаблоны развертывания

    Пользовательский процесс

    Процесс использования пользовательского шаблона выглядит следующим образом:

    1. Настройте шаблон: в соответствии с описанием в разделе Configure Template настройте содержимое шаблона по мере необходимости
    2. Зарегистрируйте и проверьте шаблон: в соответствии с описанием в разделе Register and Verify the Template зарегистрируйте шаблон в целевом кластере и проверьте содержимое шаблона

    Настройка шаблона

    Структура шаблона

    Шаблон развертывания инструмента определяется и управляется через ресурс ConfigMap. Каждый шаблон состоит из следующих трех основных частей:

    1. Базовая информация: содержит базовые сведения о конфигурации, такие как имя, описание и теги шаблона
    2. Динамическая UI-форма: определяет элементы формы, которые пользователь должен заполнить при развертывании инструмента
    3. Шаблон развертывания: содержит конкретные определения ресурсов, необходимые для развертывания инструмента
    apiVersion: v1
    kind: ConfigMap
    ## Часть 1: Основная информация
    metadata:
      labels:
        tools.cpaas.io/template: gitlabofficial
      name: gitlab-template-quickstart
      namespace: cpaas-system
      annotations:
        ui.cpaas.io/displayName.en: Gitlab Quickstart Template
        ui.cpaas.io/description.en: Deploy a lightweight Gitlab instance, suitable for development and testing scenarios, not recommended for production environments.
    ## Часть 2: Динамическая UI-форма
        ui.cpaas.io/descriptors: >-
          - path: storageClass
            x-descriptors:
              - urn:alm:descriptor:label:zh:Gitaly 存储类
              - urn:alm:descriptor:label:en:Gitaly Storage Class
              - 'urn:alm:descriptor:description:zh:选择存储类,用于存放代码仓库'
              - 'urn:alm:descriptor:description:en:Select a storage class for storing repositories'
              - urn:alm:descriptor:com.tectonic.ui:validation:required
              - urn:alm:descriptor:com.tectonic.ui:select:expression
              - urn:alm:descriptor:expression:props.options:api:/kubernetes/${context.cluster}/apis/storage.k8s.io/v1/storageclasses
              - urn:alm:descriptor:expression:props.options:label:path:metadata.name
              - urn:alm:descriptor:expression:props.options:value:path:metadata.name
            ...
    ## Часть 3: Шаблон развертывания
    data:
      template: >-
        helmValues:
          gitlab:
            gitaly:
              init:
                resources:
                  limits:
                    cpu: 1
                    memory: 1Gi
                  requests:
                    cpu: 100m
                    memory: 100Mi
              ...

    Основная информация

    Основная информация включает имя шаблона, описание, теги, комментарии, отображаемое имя и описание.

    ПолеОписание
    metadata.nameУникальный идентификатор ресурса шаблона, используемый для различения разных шаблонов в системе
    metadata.namespaceNamespace, в котором находится ресурс шаблона; в настоящее время UI отображает только шаблоны из namespace cpaas-system
    metadata.labels[tools.cpaas.io/template]Указывает тип инструмента, к которому применим шаблон; например, gitlabofficial означает, что этот шаблон используется для развертывания GitLab. Это значение обычно соответствует имени ресурса экземпляра инструмента
    metadata.labels[ui.cpaas.io/hidden]Управляет отображением шаблона в UI. Обратите внимание: если нужно скрыть встроенный шаблон продукта, необходимо использовать вместе с этим аннотацию skip-sync
    metadata.annotations[ui.cpaas.io/description.<language>]Подробное описание шаблона, помогающее пользователю понять назначение и сценарии применения шаблона. <language> — код языка, поддерживается настройка интернационализации
    metadata.annotations[ui.cpaas.io/configuration.<language>]Технические характеристики шаблона, включая ключевую информацию, такую как требования к ресурсам, конфигурация хранилища и способы сетевого доступа. <language> — код языка, поддерживается настройка интернационализации
    metadata.annotations[skip-sync]Управляет тем, будет ли operator управлять встроенным шаблоном. Если для шаблона задана эта аннотация, operator не будет обновлять содержимое шаблона при перезапуске или обновлении

    Пример:

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: gitlab-template-quickstart
      namespace: cpaas-system
      labels:
        tools.cpaas.io/template: gitlabofficial
      annotations:
        ui.cpaas.io/displayName.en: Quick Start Template
        ui.cpaas.io/configuration.en: >-
          Configuration: <br/>
          Compute Resources: CPU 3 cores, Memory 6Gi <br/>
          Storage Method: Use node local storage, need to configure storage node IP and path <br/>
          Network Access: Use NodePort mode, share node IP with storage, need to specify port <br/>
        ui.cpaas.io/description.en: This template is used to quickly create a lightweight GitLab instance, suitable for development and testing scenarios, not recommended for production environments.

    Динамическая UI-форма

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

    форма шаблона

    Информация о конфигурации динамической формы хранится в аннотации ui.cpaas.io/descriptors, ее конкретный формат выглядит следующим образом:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      annotations:
        ui.cpaas.io/descriptors: >-
          - path: storageClass
            x-descriptors:
              - urn:alm:descriptor:label:zh:Gitaly 存储类
              - urn:alm:descriptor:label:en:Gitaly Storage Class
              - 'urn:alm:descriptor:description:zh:选择存储类,用于存放代码仓库'
              - 'urn:alm:descriptor:description:en:Select a storage class for storing repositories'
              - urn:alm:descriptor:com.tectonic.ui:validation:required
              - urn:alm:descriptor:com.tectonic.ui:select:expression
              - urn:alm:descriptor:expression:props.options:api:/kubernetes/${context.cluster}/apis/storage.k8s.io/v1/storageclasses
              - urn:alm:descriptor:expression:props.options:label:path:metadata.name
              - urn:alm:descriptor:expression:props.options:value:path:metadata.name
          - path: storageSize
            x-descriptors:
              - urn:alm:descriptor:com.tectonic.ui:text
              - urn:alm:descriptor:com.tectonic.ui:validation:required
              - urn:alm:descriptor:label:en:Gitaly Storage Size
              - urn:alm:descriptor:label:zh:Gitaly 容量
              - urn:alm:descriptor:description:en:To declare the persistent storage capacity, a unit is required, such as 10Gi.
              - urn:alm:descriptor:description:zh:声明持久化存储容量,需要带单位,如 10Gi。
    ПолеОписание
    pathУникальный идентификатор поля формы, используемый для ссылки на значение, введенное пользователем, в шаблоне развертывания
    x-descriptorsОпределяет свойства элемента управления формы, включая имя метки, текст описания, тип элемента управления, правила валидации данных и т. д.

    Поддерживаемые типы элементов управления динамической формы см. в разделе Configure Dynamic Form.

    Шаблон развертывания

    Механизм шаблонов реализован на основе Helm Template и поддерживает все встроенные template functions Helm, такие как обработка строк, математические операции, управление потоком выполнения и т. д. С их помощью можно создавать гибкие шаблоны развертывания.

    Основная функция шаблона — подставлять входные параметры в заранее определенный шаблон. Входные параметры в основном поступают из двух источников:

    1. Значение, введенное пользователем в форме
    2. Информация конфигурации, полученная из ресурсов Kubernetes

    входные данные шаблона

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

    В шаблоне можно использовать синтаксис {{ .Values.<field name> }} для получения значения, введенного пользователем. Например, если в форме для ввода домена развертывания определено поле с именем domain, то в шаблоне можно использовать {{ .Values.domain }} для ссылки на это значение.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: gitlab-template
      ...
      annotations:
        ui.cpaas.io/descriptors: >-
          - path: domain
            x-descriptors:
              - urn:alm:descriptor:com.tectonic.ui:text
              - urn:alm:descriptor:label:zh:域名
              - urn:alm:descriptor:label:en:Domain
              - urn:alm:descriptor:com.tectonic.ui:validation:required
    spec:
      template: |
        ...
        global:
          hosts:
            domain: {{ .Values.domain }}
            gitlab:
              hostnameOverride: {{ .Values.domain }}
              https: false
              name: {{ .Values.domain }}
            ssh: {{ .Values.domain }}

    Получение параметров из ресурсов k8s

    В шаблоне можно использовать функцию lookup, предоставляемую Helm Template, чтобы получать информацию конфигурации из ресурсов Kubernetes. Например, чтобы получить информацию о подключении к Redis (например, Host, Port) из ресурса Secret gitlab-redis в namespace tools, можно использовать функцию lookup следующим образом:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: gitlab-template
      ...
    spec:
      template: |
        ...
        global:
          {{- $secret := (lookup "v1" "Secret" "tools" "gitlab-redis") }}
          redis:
            host: {{ $secret.data.host | b64dec | trim }}
            port: {{ $secret.data.port | b64dec | trim }}

    Имя Secret также может вводиться пользователем. Например, если определено поле redisSecret, можно использовать .Values.redisSecret для ссылки на имя Secret, введенное пользователем в шаблоне.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: gitlab-template
      ...
      annotations:
        ui.cpaas.io/descriptors: >-
          - path: redisSecret
            x-descriptors:
              - urn:alm:descriptor:label:zh:Redis 凭据
              - urn:alm:descriptor:label:en:Redis Secret
              - urn:alm:descriptor:com.tectonic.ui:validation:required
    spec:
      template: |
        ...
        global:
          {{- $secret := (lookup "v1" "Secret" "tools" .Values.redisSecret) }}
          redis:
            host: {{ .Values.redisSecret.host }}
            port: {{ .Values.redisSecret.port }}

    Настройка интернационализации

    Шаблон поддерживает настройку интернационализации. При отображении в UI соответствующие имя и описание будут показаны в зависимости от языка, выбранного пользователем.

    Поддерживаемые аннотации для настройки интернационализации включают:

    • ui.cpaas.io/displayName.<language>
    • ui.cpaas.io/description.<language>
    • ui.cpaas.io/configuration.<language>

    Чтобы настроить интернационализацию, достаточно добавить код языка в конец поля, например:

    • zh: отображение при выборе китайского языка
    • en: отображение при выборе английского языка

    Пример:

    kind: ConfigMap
    apiVersion: v1
    metadata:
      annotations:
        ui.cpaas.io/displayName.zh: 快速开始模板
        ui.cpaas.io/displayName.en: Quick Start Template

    Настройка динамической формы

    Типы элементов управления

    К распространенным типам элементов управления относятся: строка, число и выпадающий список.

    Тип элемента управленияОписание
    urn:alm:descriptor:com.tectonic.ui:textПоле ввода строкового типа
    urn:alm:descriptor:com.tectonic.ui:numberПоле ввода числового типа
    urn:alm:descriptor:com.tectonic.ui:select:expressionВыпадающий список

    Пример:

    - path: name
      x-descriptors:
        - urn:alm:descriptor:com.tectonic.ui:text
    - path: age
      x-descriptors:
        - urn:alm:descriptor:com.tectonic.ui:number
    - path: gender
      x-descriptors:
        - urn:alm:descriptor:com.tectonic.ui:select:expression

    Переменные динамической формы

    При описании динамической формы можно использовать следующие переменные:

    1. ${context.cluster}: имя текущего кластера
    2. ${context.namespace}: текущий namespace (namespace, в котором пользователь выбирает инструмент для развертывания)

    Пример:

    x-descriptors:
      - urn:alm:descriptor:com.tectonic.ui:select:expression
      - urn:alm:descriptor:expression:props.options:api:/kubernetes/${context.cluster}/api/v1/namespaces/${context.namespace}/secrets?fieldSelector=type!=kubernetes.io/tls
      ...

    Интернационализация элементов управления

    Шаблон развертывания инструмента поддерживает настройку международного отображаемого содержимого для имени, описания и placeholder элемента управления. Добавляя дескрипторы с кодами языков в x-descriptors, система может динамически отображать соответствующий текст в зависимости от языковых предпочтений пользователя.

    Поддерживаемые типы настройки интернационализации включают:

    • Имя элемента управления (label): urn:alm:descriptor:label:<language>:<name>
    • Описание элемента управления (description): urn:alm:descriptor:description:<language>:<description>
    • Placeholder элемента управления (placeholder): urn:alm:descriptor:placeholder:<language>:<placeholder>

    Где <language> — код языка, в настоящее время поддерживаются:

    • zh: китайский
    • en: английский

    Пример: настройка поля ввода домена с поддержкой китайского и английского языков:

    x-descriptors:
      - urn:alm:descriptor:label:zh:Domain
      - urn:alm:descriptor:label:en:Domain

    Информация об отображении элемента управления

    Элементы динамической формы поддерживают настройку международного отображаемого содержимого. При отображении в UI соответствующие имя и описание будут показаны в соответствии с языком, выбранным пользователем.

    Поле элемента управленияОписание
    urn:alm:descriptor:label:<language>:<name>Описывает имя элемента управления
    - <language> — код языка, например zh для китайского, en для английского
    - <name> — имя, отображаемое элементом управления
    urn:alm:descriptor:description:<language>:<description>Описывает описание элемента управления
    - <language> — код языка, например zh для китайского, en для английского
    - <description> — описание элемента управления
    urn:alm:descriptor:placeholder:<language>:<placeholder>Описывает placeholder элемента управления
    - <language> — код языка, например zh для китайского, en для английского
    - <placeholder> — placeholder элемента управления

    описание UI

    Валидация полей

    Динамическая форма поддерживает валидацию пользовательского ввода. Поддерживаемые правила валидации:

    Поле элемента управленияОписание
    urn:alm:descriptor:com.tectonic.ui:validation:minimum:<number>Ограничивает минимальное значение поля числового типа
    urn:alm:descriptor:com.tectonic.ui:validation:maximum:<number>Ограничивает максимальное значение поля числового типа
    urn:alm:descriptor:com.tectonic.ui:validation:requiredДелает поле обязательным
    urn:alm:descriptor:com.tectonic.ui:validation:pattern:<pattern>Ограничивает ввод заданным регулярным выражением
    urn:alm:descriptor:com.tectonic.ui:validation:maxLength:<number>Ограничивает максимальную длину вводимой строки
    urn:alm:descriptor:com.tectonic.ui:validation:minLength:<number>Ограничивает минимальную длину вводимой строки

    Пример 1: ограничить диапазон значений до: 30000 ~ 32767

    x-descriptors:
      - urn:alm:descriptor:com.tectonic.ui:number
      - urn:alm:descriptor:com.tectonic.ui:validation:minimum:30000
      - urn:alm:descriptor:com.tectonic.ui:validation:maximum:32767

    Пример 2: сделать строковое поле обязательным

    x-descriptors:
      - urn:alm:descriptor:com.tectonic.ui:text
      - urn:alm:descriptor:com.tectonic.ui:validation:required

    Пример 3: ограничить путь, вводимый пользователем, абсолютным путем

    x-descriptors:
      - urn:alm:descriptor:label:zh:Node Path
      - urn:alm:descriptor:com.tectonic.ui:text
      - urn:alm:descriptor:com.tectonic.ui:validation:pattern:^\/([\w+-]+\/)*([\w+-]+)$

    Пример 4: ограничить длину пользовательского ввода 2–32 символами

    x-descriptors:
      - urn:alm:descriptor:com.tectonic.ui:text
      - urn:alm:descriptor:com.tectonic.ui:validation:minLength:2
      - urn:alm:descriptor:com.tectonic.ui:validation:maxLength:32

    Динамический выбор

    Динамическая форма поддерживает динамическую загрузку списка вариантов через вызов API.

    Поле элемента управленияОписание
    urn:alm:descriptor:com.tectonic.ui:select:expressionОписывает элемент управления как выпадающий список
    urn:alm:descriptor:expression:props.options:api:<api>Определяет адрес api для получения данных вариантов
    urn:alm:descriptor:expression:props.options:label:path:metadata.nameОпределяет поле отображаемого имени варианта
    urn:alm:descriptor:expression:props.options:value:path:metadata.nameОпределяет поле значения варианта

    Пример: получить ресурс Secret из namespace devops тестового кластера и использовать metadata.name в качестве отображаемого имени и значения варианта.

    x-descriptors:
      - urn:alm:descriptor:com.tectonic.ui:select:expression
      - urn:alm:descriptor:expression:props.options:api:/kubernetes/test/api/v1/namespaces/devops/secrets?fieldSelector=type!=kubernetes.io/tls
      - urn:alm:descriptor:expression:props.options:label:path:metadata.name
      - urn:alm:descriptor:expression:props.options:value:path:metadata.name

    Регистрация и проверка шаблона

    • Зарегистрировать пользовательский шаблон:

      • Создайте ресурс шаблона (ConfigMap) в namespace cpaas-system целевого кластера, чтобы завершить регистрацию.
    • Проверить регистрацию шаблона:

      • Перейдите на страницу сведений об operator инструмента
      • Нажмите кнопку Create Resource, чтобы перейти на страницу выбора шаблона
      • Если вы видите вновь добавленный шаблон, значит регистрация выполнена успешно
    • Проверить содержимое шаблона:

      • Перейдите на страницу сведений об operator инструмента
      • Нажмите кнопку Create Resource, чтобы перейти на страницу выбора шаблона
      • Если вновь добавленный шаблон отображается, это означает, что регистрация выполнена успешно
    • Проверить содержимое шаблона:

      • Выберите пользовательский шаблон
      • Следуйте подсказкам интерфейса, чтобы создать экземпляр инструмента
      • Если экземпляр инструмента успешно разворачивается, это означает, что содержимое шаблона корректно

    Часто задаваемые вопросы

    Как получить доступ к содержимому встроенного шаблона?

    После развертывания operator инструмента он автоматически зарегистрирует встроенные шаблоны развертывания в namespace cpaas-system текущего кластера. Просмотреть содержимое шаблона можно по следующему пути:

    1. Перейдите в Management View платформы
    2. Выберите Cluster Management > Resource Management
    3. В качестве типа ресурса выберите ConfigMap
    4. Найдите соответствующий шаблон по ключевому слову template

    Как скрыть встроенный шаблон продукта?

    Если нужно скрыть встроенный шаблон продукта, можно добавить к ресурсу шаблона метку ui.cpaas.io/hidden и установить ее в значение true. Кроме того, необходимо добавить аннотацию skip-sync; иначе operator восстановит содержимое шаблона при перезапуске или обновлении.

    metadata:
      labels:
        ui.cpaas.io/hidden: "true"
      annotations:
        skip-sync: "true"