Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Yandex Cloud Marketplace
    • Начало работы
      • Профиль партнера
      • Продукт
      • Версия
      • Тариф
      • Подписка
        • Создание образа продукта на базе Linux
        • Создание продукта для Managed Service for Kubernetes
      • Тарификация продуктов на основе метрик издателя
      • Пробный период
    • Управление доступом
    • Начало работы
    • Управление доступом
    • Аудитные логи Audit Trails

В этой статье:

  • Размещение и именование образов
  • Особенности сборки helm chart
  • Манифест
  • Пример манифеста и соответствующего файла переменных
  • Манифест
  • Файл переменных values.yaml
  1. Партнерам
  2. Концепции
  3. Требования к продуктам Marketplace
  4. Создание продукта для Managed Service for Kubernetes

Создание продукта для Managed Service for Kubernetes

Статья создана
Yandex Cloud
Улучшена
Alex K.
Обновлена 4 апреля 2025 г.
  • Размещение и именование образов
  • Особенности сборки helm chart
  • Манифест
  • Пример манифеста и соответствующего файла переменных
    • Манифест
    • Файл переменных values.yaml

Чтобы добавить программный продукт для Managed Service for Kubernetes в Marketplace, его пакеты необходимо загрузить в реестр Yandex Cloud. Этот раздел поможет подготовить продукт Marketplace для Yandex Managed Service for Kubernetes.

Как настроить доступ к продукту по подписке, см. в разделе Интеграция с License Manager API.

Вы также можете создать продукты для Yandex Compute Cloud на базе ОС Linux, воспользовавшись соответствующими рекомендациями.

Размещение и именование образовРазмещение и именование образов

  • Helm chart продукта и все docker-образы, входящие в него, должны быть размещены в реестре издателя, созданном в Yandex Container Registry. О том, как создать реестр и как загрузить образ, см. в соответствующих разделах документации.

  • Имя helm chart продукта должно иметь вид:

    cr.yandex/<registry-id>/<vendor-name>/<product-name>/<chart>
    

    Где:

    • <registry-id> — идентификатор реестра издателя;
    • <vendor-name> — наименования компании-издателя продукта;
    • <product-name> — наименования продукта;
    • <chart> — название helm chart.
  • Имена docker-образов продукта должны иметь вид:

    cr.yandex/<registry-id>/<vendor-name>/<product-name>/<component-name>:<tag>
    

    Где:

    • <registry-id> — идентификатор реестра издателя;
    • <vendor-name> — наименования компании-издателя продукта;
    • <product-name> — наименования продукта;
    • <component-name> — наименование компонента продукта, поставляемого в виде docker-образа;
    • <tag> — тег docker-образа. Не используйте тег latest.

Во время публикации все образы, входящие в продукт, из реестра издателя перемещаются в публично доступный реестр yc-marketplace. При этом вся иерархия продукта, определенная издателем, сохраняется.

Например, образ cr.yandex/b1gq90dgh25********/yandex-cloud/prometheus/pushgateway:1.0 будет опубликован под именем cr.yandex/yc-marketplace/yandex-cloud/prometheus/pushgateway:1.0.

Подробнее о работе с реестром см. в разделах Загрузить Helm-чарт в реестр и Загрузить Docker-образ в реестр.

Особенности сборки helm chartОсобенности сборки helm chart

Helm chart должен содержать файл values.yaml, в котором в виде параметров будут перечислены все используемые docker-образы. Имена docker-образов в файле values.yaml должны начинаться с префикса .Values и указывать на образы, размещенные в реестре издателя, чтобы публикация и дальнейшая установка продукта в кластере пользователя прошли без ошибок.

Спецификация пода без параметров в общем виде:

# pod spec
spec:
  containers:
  - image: cr.yandex/<registry-id>/<vendor-name>/<product-name>/<component-name>:<tag>

Спецификация пода, в котором имя образа заменено на переменную YAML path, описанную в файле values.yaml:

# pod spec
spec:
  containers:
  - image: {{ .Values.images.pushgateway }}
# values.yaml
images:
  pushgateway: cr.yandex/<registry-id>/<vendor-name>/<product-name>/<component-name>:<tag>

МанифестМанифест

Для публикации продукта необходим манифест — документ, в котором будут описаны параметры развертывания продукта. Подготовьте манифест и загрузите его в Yandex Object Storage.

Манифест описывается в формате YAML и содержит следующие данные:

  1. helm_chart — обязательное поле. Содержит имя и тег helm chart продукта.

    helm_chart:
      name: cr.yandex/<registry-id>/<vendor-name>/<product-name>/<chart>
      tag: <tag>
    
  2. requirements — обязательное поле. Обязательные параметры кластера, в котором продукт будет разворачиваться. Раздел должен содержать параметр k8s_version, определяющий диапазон поддерживаемых версий Kubernetes.

    requirements:
      k8s_version: ">=1.18"
    
  3. images — обязательное поле. Содержит список метаданных образов, входящих в продукт. Значения переменных параметров метаданных образа — это ссылки в формате YAML Path на переменные из файла values.yaml. Записи могут быть оформлены в одном из форматов:

    • Имя образа, адрес реестра и тег описаны отдельными полями:

      images:
      - registry: images.app.image.registry
        name_without_registry: images.app.image.name
        tag: images.app.image.tag
      
      # values.yaml
      images:
        app:
          image:
            registry: "cr.yandex"
            name: "<registry-id>/<vendor-name>/<product-name>/<component-name>"
            tag: "<tag>"
      
    • Имя образа и адрес реестра описаны в одном поле, тег — в другом:

      images:
        - name_with_registry: images.app.config.image.name
          tag: images.app.config.image.tag
      
      # values.yaml
      images:
        app:
          config:
            image:
              name: "cr.yandex/<registry-id>/<vendor-name>/<product-name>/<component-name>"
              tag: "<tag>"
      
    • Описан полный путь до образа:

      images:
        - full: images.app.image.name
      
      # values.yaml
      images:
        app:
          image:
            name: "cr.yandex/<registry-id>/<vendor-name>/<product-name>/<component-name>:<tag>"
      
  4. user_values — необязательный параметр. Список переменных продукта, которые пользователь может переопределить во время установки или редактирования уже установленного продукта через консоль управления Yandex Cloud. Каждая переменная описывается обязательными полями:

    • name — YAML Path переменной из файла values.yaml;

    • title — краткое название переменной, может быть на русском и английском языке. Значение должно начинаться с заглавной буквы.

      user_values:
      - name: app.port
        title:
          en: <english_title>
          ru: <заголовок_на_русском>
      
    • description — описание переменной, может быть на русском и английском языке. Значение должно начинаться с заглавной буквы.

      user_values:
        - name: app.port
          title: <Заголовок>
          description:
            en: <English_description>
            ru: <Описание_на_русском>
      
    • required (опционально) — флаг Обязательно для заполнения. Может быть установлен в любом типе переменной, кроме boolean_value. Доступны значения true и false.

    • Тип переменной. Доступны значения:

      • simple_disabled. Может содержать значение по умолчанию и флаг включения.

        user_values:
          - name: <название>
            disabled: true
            title: <Заголовок>
            string_value:
              required: true
              default_value: "simple_string_value"
        
      • integer_value. Может содержать значение по умолчанию и диапазон допустимых значений.

        user_values:
          - name: <название>
            title: <Заголовок>
            description: <Описание>
            integer_value:
              default_value: <целое_число_по_умолчанию>
              required: true
              restrictions:
                min: <целое_число_1>
                max: <целое_число_2>
        
      • boolean_value. Может содержать значение по умолчанию.

        user_values:
          - name: <название>
            title: <Заголовок>
            description: <Описание>
            boolean_value:
              default_value: true
        
      • string_selector_value — строка из определенного списка. Может содержать значение по умолчанию и список допустимых значений.

        user_values:
          - name: <название>
            title: <Заголовок>
            description: <Описание>
            string_selector_value:
              default_value: <значение_1>
              required: true
              values:
                - <значение_1>
                - <значение_2>
                - <значение_3>
        
      • integer_selector_value — целочисленное значение из определенного списка. Может содержать значение по умолчанию и список допустимых значений.

        user_values:
          - name: <название>
            title: <Заголовок>
            description: <Описание>
            integer_selector_value:
              default_value: <целое_число_1>
              required: true
              values:
                - <целое_число_1>
                - <целое_число_2>
                - <целое_число_3>
        
      • string_value. Может содержать флаг и поле с секретом, а также ограничение на длину значения.

        user_values:
          - name: <название>
            title: <Заголовок>
            description: <Описание>
            string_value:
              required: true
              secret: true
              length_restrictions:
                min: <min_длина_строки>
                max: <max_длина_строки>
        
      • cloudiddisabled — идентификатор облака в Yandex Cloud. Если параметр был передан, соответствующее поле продукта в консоли управления будет недоступно для редактирования и автоматически предзаполнится.

        user_values:
          - name: <название>
            title: <Заголовок>
            cloud_id_value:
              required: true
        
      • cloudid — идентификатор облака в Yandex Cloud, который можно выбрать из консоли управления.

        user_values:
          - name: <название>
            title: <Заголовок>
            cloud_id_value:
              required: true
        
      • folderid — идентификатор каталога.

        user_values:
          - name: <название>
            title: <Заголовок>
            folder_id_value:
              required: true
        
      • clusterid — идентификатор кластера Kubernetes.

        user_values:
          - name: <название>
            title: <Заголовок>
            cluster_id_value:
              required: true
        
      • networkid — идентификатор сети Yandex Virtual Private Cloud.

        user_values:
          - name: <название>
            title: <Заголовок>
            network_id_value:
              required: true
        
      • subnetid — идентификатор подсети Virtual Private Cloud.

        user_values:
          - name: <название>
            title: <Заголовок>
            subnet_id_value:
              required: true
        
      • serviceaccountid — идентификатор сервисного аккаунта.

        user_values:
          - name: <название>
            title: <Заголовок>
            service_account_id_value:
              required: true
        
      • serviceaccountkey — авторизованный ключ сервисного аккаунта.

        user_values:
          - name: <название>
            title: <Заголовок>
            service_account_key_value:
              required: true
        
      • service_account_aws_key_value — статический ключ сервисного аккаунта для доступа к Object Storage. Передается в формате JSON.

        user_values:
          - name: <название>
            title: <Заголовок>
            description: <Описание>
            service_account_aws_key_value:
              required: true
        

        Чтобы использовать значение этого поля в helm chart или передавать его в файле при ручной установке, необходимо добавить в конец шаблона templates/_helpers.tpl следующий код:

        Важно

        После значения поля name из манифеста обязательно укажите _generated.

        {{- define "<название_чарта>.access_key_id" -}}
        {{- if .Values.saAccessKeyFile -}}
        {{- $key := .Values.saAccessKeyFile | fromJson -}}
        {{- $key.access_key.key_id -}}
        {{- else }}
        {{- .Values.<значение_поля_name_из_манифеста>_generated.accessKeyID -}}
        {{- end }}
        {{- end }}
        
        {{- define "<название_чарта>.access_key_secret" -}}
        {{- if .Values.saAccessKeyFile -}}
        {{- $key := .Values.saAccessKeyFile | fromJson -}}
        {{- $key.secret -}}
        {{- else }}
        {{- .Values.<значение_поля_name_из_манифеста>_generated.secretAccessKey -}}
        {{- end }}
        {{- end }}
        

        Пример использования значений в шаблоне объекта Secret:

        apiVersion: v1
        kind: Secret
        metadata:
          name: {{ include "mychart.fullname" . }}
          labels:
            {{- include "mychart.labels" . | nindent 4 }}
        type: Opaque
        data:
          ACCESS_KEY_ID: {{ include "mychart.access_key_id" . | b64enc | quote }}
          SECRET_ACCESS_KEY: {{ include "mychart.access_key_secret" . | b64enc | quote }}
        
      • ciliumvaluedisabled — использование провайдера сетевых политик Cilium. Если параметр был передан, соответствующее поле продукта в консоли управления будет недоступно для редактирования и автоматически предзаполнится.

        user_values:
          - name: <название>
            title: <Заголовок>
          cilium_value: {}
        
      • ciliumvalue — использование провайдера сетевых политик Cilium.

        user_values:
          - name: <название>
            title: <Заголовок>
          cilium_value: {}
        
      • kubednsclusteripvaluedisabled — IP-адрес кластера Kubernetes. Если параметр был передан, соответствующее поле продукта в консоли управления будет недоступно для редактирования и автоматически предзаполнится.

        user_values:
          - name: <название>
            title: <Заголовок>
          kube_dns_cluster_ip_value:
            required: true
        
      • kubednsclusteripvalue — IP-адрес кластера Kubernetes.

        user_values:
          - name: <название>
            title: <Заголовок>
          kube_dns_cluster_ip_value:
            required: true
        
      • loggroupidvalue — идентификатор лог-группы Yandex Cloud Logging.

        user_values:
          - name: <название>
            title: <Заголовок>
          log_group_id_value:
            required: true
        
      • kmskeyidvalue — содержимое ключа Yandex Key Management Service.

        user_values:
          - name: <название>
            title: <Заголовок>
          kms_key_id_value:
            required: true
        
      • domainvalue — домен, в котором будет расположен кластер Kubernetes.

        user_values:
          - name: <название>
            title: <Заголовок>
          domain_value:
            required: true
        
      • iamapikeyvalue — значение API-ключа сервисного аккаунта. Передается в формате JSON.

        user_values:
          - name: <название>
            title: <Заголовок>
          iam_api_key_value:
            required: true
        
      • storagebucketvalue — бакет Object Storage.

        user_values:
          - name: <название>
            title: <Заголовок>
          storage_bucket_value:
            required: true
        
      • prometheusworkspaceidvalue — название рабочего пространства Prometheus.

        user_values:
          - name: <название>
            title: <Заголовок>
          prometheus_workspace_id_value:
            required: false
        
      • licenseidvalue — идентификатор подписки из License Manager API.

        user_values:
          - name: <название>
            title: <Заголовок>
          license_id_value:
            required: false
        

Значения переменных, указанные пользователем при установке продукта в кластер Kubernetes, будут переопределять значения из файла values.yaml.

Пример манифеста и соответствующего файла переменныхПример манифеста и соответствующего файла переменных

МанифестМанифест

# Link to helm chart in publisher registry.
helm_chart:
  name: cr.yandex/b1gq90dgh25********/Vendor/Product/chart
  tag: 1.0-0

# Required parameters.
requirements:
  k8s_version: ">=1.18"

images:
  - registry: app1.image.registry
    name_without_registry: app1.image.name
    tag: app1.image.tag
  - name_with_registry: app2.config.image.name
    tag: app2.config.image.tag
  - full: another-whatever-key.subkey.name

# Configurable parameters that might be changed by end user during installation of product. Should be presented in values.yaml
# Supported types: integer, boolean, string, string selector, integer selector.
user_values:
  - name: app.port
    title:
      en: Application port
      ru: Порт приложения
    description:
      en: Port that application will listen to
      ru: Порт, на котором приложение принимает входящие запросы
    integer_value:
      default_value: 8080
      required: true
      restrictions:
        min: 8000
        max: 9000
  - name: app.tls.use
    title:
      en: TLS
      ru: TLS
    description:
      en: Use TLS
      ru: Использовать TLS
    boolean_value:
      default_value: true
  - name: app.admin.password
    title:
      en: Admin password
      ru: Пароль администратора
    description:
      en: Password of administrator, should be at least 8 symbols
      ru: Пароль администратора, должен быть длиной не менее 8 символов
    string_value:
      required: true
      secret: true
      length_restrictions:
        min: 8
        max: 20
  - name: app.selector.string
    title:
      en: Custom string selector
      ru: Строковая опция
    description:
      en: One value string selector
      ru: Выбор одного строкового значения
    string_selector_value:
      default_value: opt1
      required: true
      values:
        - opt1
        - opt2
        - opt3
  - name: app.selector.integer
    title:
      en: Custom integer selector
      ru: Числовая опция
    description:
      en: One value integer selector
      ru: Выбор одного integer значения
    integer_selector_value:
      default_value: 1
      required: true
      values:
        - 1
        - 2
        - 3

Файл переменных values.yamlФайл переменных values.yaml

# An example of values.yaml related to publisher manifest above.
replicaCount: 1
podAnnotations: {}
podSecurityContext: {}
...
app1:
  image:
    registry: cr.yandex/b1gq90dgh25********/
    name: service-images/application-1
    tag: 1.0
app2:
  name: application-name
  config:
    # image can be declared on any level
    image:
      name: cr.yandex/b1gq90dgh25********/service-images/application-2
      tag: 2.0
    pullPolicy: IfNotPresent
another-whatever-key: # key name is not fixed
  subkey:
    name: cr.yandex/b1gq90dgh25********/service-images/application-3:3.0
...

# values
app:
  port: 80
  tls:
    use: true
  admin:
    password: ""
  selector:
    string: "opt1"
    integer: 1

Была ли статья полезна?

Предыдущая
Создание образа продукта на базе Linux
Следующая
Тарификация продуктов на основе метрик издателя
Проект Яндекса
© 2025 ООО «Яндекс.Облако»