Argo-rollouts#

Argo-rollouts - это Kubernetes-контроллер и набор CRD, предоставляющий продвинутые возможности для реализации постепенной доставки (progressive delivery) приложений в кластере. Он позволяет более гибко управлять процессом развертывания, обеспечивая безопасное и контролируемое обновление сервисов.

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

    Позволяет использовать такие методы как canary (канареечный), blue-green (сине-зеленое) развертывание, а также A/B тестирование и эксперименты с трафиком.

  • Канареечный анализ и автоматизация:

    Поддерживает автоматический анализ состояния новых версий приложений на основе метрик (например, из Prometheus), позволяя либо продолжить, либо откатить обновление в случае проблем.

  • Гибкая маршрутизация трафика:

    Интегрируется с Istio, Linkerd, Kong и другими service mesh или ingress-решениями для постепенного переключения трафика между версиями приложения.

  • Интеграция с GitOps-подходом:

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

  • Визуализация и мониторинг:

    Предоставляет удобный веб-интерфейс для отслеживания статуса rollout, анализа ошибок и выполнения.

Примечание

Argo-rollouts является инструментом по умолчанию компонента Devops и устанавливается с ним автоматически.

Конфигурация values#

Значения можно переопределить через редактирование инструмента с именем argo-rollouts и указанием нужных values в spec.values. Общее описание конфигурации values для инструментов описано в разделе «Конфигурации инструментов дополнительных компонентов».

installCRDs - управление установкой Custom Resource Definitions#

Параметр

Описание

Значение по умолчанию

installCRDs

Определяет, устанавливать ли CRD (Custom Resource Definitions) при установке или обновлении чарта

true

keepCRDs - сохранение CRD при удалении#

Параметр

Описание

Значение по умолчанию

keepCRDs

Сохраняет CRD при удалении Helm-релиза

true

clusterInstall - режим установки контроллера#

Параметр

Описание

Значение по умолчанию

clusterInstall

При значении false запускает контроллер в режиме namespace (не требует cluster RBAC)

true

createClusterAggregateRoles - создание агрегированных ролей#

Параметр

Описание

Значение по умолчанию

createClusterAggregateRoles

Флаг для создания агрегированных ролей кластера (требует cluster RBAC)

true

nameOverride - переопределение имени чарта#

Параметр

Описание

Значение по умолчанию

nameOverride

Частичное переопределение шаблонного имени ресурсов чарта

null

fullnameOverride - полное переопределение имени#

Параметр

Описание

Значение по умолчанию

fullnameOverride

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

null

namespaceOverride - переопределение пространства имен#

Параметр

Описание

Значение по умолчанию

namespaceOverride

Переопределение пространства имен развертывания ресурсов

""

apiVersionOverrides - переопределение версий API#

Параметр

Описание

Значение по умолчанию

apiVersionOverrides.ingress

Переопределение apiVersion для Ingress-ресурсов

""

kubeVersionOverride - переопределение версии Kubernetes#

Параметр

Описание

Значение по умолчанию

kubeVersionOverride

Переопределение версии Kubernetes, используемой при вычислении условных манифестов чарта

""

extraObjects - дополнительные манифесты#

Параметр

Описание

Значение по умолчанию

extraObjects

Дополнительные манифесты для развертывания в рамках чарта. Список объектов

[]

controller - настройки контроллера Argo Rollouts#

Параметр

Описание

Значение по умолчанию

controller.component

Значение метки app.kubernetes.io/component для контроллера

rollouts-controller

controller.deploymentAnnotations

Аннотации Deployment контроллера

{}

controller.deploymentLabels

Метки Deployment контроллера

{}

controller.podAnnotations

Аннотации pod контроллера

{}

controller.podLabels

Метки pod контроллера

{}

controller.nodeSelector

Селектор узлов для размещения pod контроллера

{}

controller.tolerations

Tolerations для размещения pod контроллера на tainted-узлах

[]

controller.affinity

Affinity-правила для Deployment контроллера

{}

controller.logging.level

Уровень логирования контроллера (допустимые значения: debug, info, warn, error)

info

controller.logging.kloglevel

Уровень klog-логирования для контроллера

0

controller.logging.format

Формат логов контроллера (допустимые значения: text, json)

text

controller.topologySpreadConstraints

Правила TopologySpreadConstraints для распределения pod контроллера по топологиям кластера

[]

controller.terminationGracePeriodSeconds

Время ожидания завершения контейнера перед принудительной остановкой

30

controller.lifecycle

Lifecycle hooks для контейнера контроллера

{}

controller.priorityClassName

Класс приоритета для pod контроллера

""

controller.replicas

Количество pod контроллера

2

controller.image.registry

Реестр контейнерного образа контроллера

'{{ .Values.global.image.registry }}'

controller.image.repository

Репозиторий контейнерного образа контроллера

'{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-argo-rollouts/argo-rollouts'

controller.image.tag

Тег контейнерного образа контроллера

v1.8.4

controller.image.pullPolicy

Политика загрузки контейнерного образа контроллера

IfNotPresent

controller.extraArgs

Дополнительные аргументы командной строки для rollouts-controller

[]

controller.extraEnv

Дополнительные переменные окружения для rollouts-controller

[]

controller.extraContainers

Дополнительные контейнеры для Deployment контроллера

[]

controller.initContainers

Init-контейнеры для pod контроллера

[]

controller.resources

Лимиты и запросы ресурсов для pod контроллера

{}

controller.createClusterRole

Создание cluster role для контроллера

true

controller.containerPorts.metrics

Порт контейнера для экспорта метрик

8090

controller.containerPorts.healthz

Порт контейнера для healthz

8080

controller.metrics.enabled

Создание сервиса метрик для контроллера

true

controller.metrics.service.portName

Имя порта сервиса метрик

metrics

controller.metrics.service.port

Порт сервиса метрик

8090

controller.metrics.service.annotations

Аннотации сервиса метрик

{}

controller.metrics.serviceMonitor.enabled

Включает ServiceMonitor для Prometheus

false

controller.metrics.serviceMonitor.namespace

Пространство имен для ServiceMonitor

""

controller.metrics.serviceMonitor.additionalLabels

Дополнительные метки ServiceMonitor

{}

controller.metrics.serviceMonitor.additionalAnnotations

Дополнительные аннотации ServiceMonitor

{}

controller.metrics.serviceMonitor.relabelings

Правила перенастройки меток для метрик до их извлечения Prometheus

[]

controller.metrics.serviceMonitor.metricRelabelings

Правила перенастройки меток для метрик до их обработки

[]

controller.metrics.serviceMonitor.tlsConfig

TLS-конфигурация ServiceMonitor, при заполнении используется схема https

{}

controller.livenessProbe.httpGet.path

HTTP-путь для livenessProbe контроллера

/healthz

controller.livenessProbe.httpGet.port

Порт или имя порта для livenessProbe контроллера

healthz

controller.livenessProbe.initialDelaySeconds

Задержка перед первым выполнением livenessProbe

30

controller.livenessProbe.periodSeconds

Интервал выполнения livenessProbe

20

controller.livenessProbe.failureThreshold

Количество неуспешных проверок до признания контейнера недоступным

3

controller.livenessProbe.successThreshold

Количество успешных проверок после ошибки для восстановления статуса

1

controller.livenessProbe.timeoutSeconds

Время ожидания выполнения livenessProbe

10

controller.readinessProbe.httpGet.path

HTTP-путь для readinessProbe контроллера

/metrics

controller.readinessProbe.httpGet.port

Порт или имя порта для readinessProbe контроллера

metrics

controller.readinessProbe.initialDelaySeconds

Задержка перед первым выполнением readinessProbe

15

controller.readinessProbe.periodSeconds

Интервал выполнения readinessProbe

5

controller.readinessProbe.failureThreshold

Количество неуспешных readiness-проверок до признания pod неготовым

3

controller.readinessProbe.successThreshold

Количество успешных readiness-проверок после ошибки для восстановления статуса

1

controller.readinessProbe.timeoutSeconds

Время ожидания выполнения readinessProbe

4

controller.pdb.labels

Метки PodDisruptionBudget контроллера

{}

controller.pdb.annotations

Аннотации PodDisruptionBudget контроллера

{}

controller.pdb.enabled

Включает создание PodDisruptionBudget для контроллера

false

controller.pdb.minAvailable

Минимальное количество или процент pod, которые должны оставаться доступными

null

controller.pdb.maxUnavailable

Максимальное количество или процент pod, которые могут быть недоступны одновременно

null

controller.volumes

Дополнительные volumes для pod контроллера

[]

controller.volumeMounts

Дополнительные volumeMounts для контейнера контроллера

[]

controller.metricProviderPlugins

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

[]

controller.stepPlugins

Сторонние плагины, которые используются для настройки шагов в канареечных стратегиях развертывания

[]

controller.trafficRouterPlugins

Настройка плагинов маршрутизации стороннего трафика для контроллера

[]

controller.createConfigmap

Флаг, определяющий автоматическое создание ConfigMap argo-rollouts-config. Может быть отключен при запуске нескольких экземпляров контроллера в одном пространстве имен, чтобы избежать конфликтов владения между Helm-релизами

true

serviceAccount - настройки сервисного аккаунта#

Параметр

Описание

Значение по умолчанию

serviceAccount.create

Указывает, должен ли быть создан сервисный аккаунт

true

serviceAccount.annotations

Аннотации сервисного аккаунта

{}

serviceAccount.name

Имя сервисного аккаунта. Если имя не задано и create=true, используется сгенерированное имя

""

crdAnnotations - аннотации для CRD#

Параметр

Описание

Значение по умолчанию

crdAnnotations

Аннотации, добавляемые ко всем CRD

{}

podAnnotations - аннотации для pod#

Параметр

Описание

Значение по умолчанию

podAnnotations

Аннотации для всех развертываемых pod

{}

podSecurityContext - контекст безопасности pod#

Параметр

Описание

Значение по умолчанию

podSecurityContext.runAsNonRoot

Запуск pod от имени непривилегированного пользователя

true

containerSecurityContext - контекст безопасности контейнера#

Параметр

Описание

Значение по умолчанию

containerSecurityContext.allowPrivilegeEscalation

Запрет повышения привилегий в контейнере

false

containerSecurityContext.capabilities.drop

Список Linux capabilities, которые будут удалены из контейнера

- ALL

containerSecurityContext.readOnlyRootFilesystem

Включение режима read-only для корневой файловой системы контейнера

true

containerSecurityContext.seccompProfile.type

Тип seccomp-профиля для контейнера

RuntimeDefault

serviceAnnotations - аннотации сервиса Rollout#

Параметр

Описание

Значение по умолчанию

serviceAnnotations

Аннотации сервиса Rollout

{}

podLabels - метки pod#

Параметр

Описание

Значение по умолчанию

podLabels

Метки для Rollout pod

{}

imagePullSecrets - секреты для загрузки образов#

Параметр

Описание

Значение по умолчанию

imagePullSecrets

Список секретов с учетными данными для загрузки образов из приватного реестра

[]

providerRBAC - RBAC-правила для провайдеров#

Параметр

Описание

Значение по умолчанию

providerRBAC.enabled

Включение добавления специфических RBAC-правил для провайдера в Role и ClusterRole контроллера

true

providerRBAC.providers.istio

Добавляет RBAC-правила для провайдера Istio

true

providerRBAC.providers.smi

Добавляет RBAC-правила для провайдера SMI

true

providerRBAC.providers.ambassador

Добавляет RBAC-правила для провайдера Ambassador

true

providerRBAC.providers.awsLoadBalancerController

Добавляет RBAC-правила для AWS Load Balancer Controller

true

providerRBAC.providers.awsAppMesh

Добавляет RBAC-правила для AWS App Mesh

true

providerRBAC.providers.traefik

Добавляет RBAC-правила для провайдера Traefik

true

providerRBAC.providers.apisix

Добавляет RBAC-правила для провайдера Apisix

true

providerRBAC.providers.contour

Добавляет RBAC-правила для провайдера Contour

true

providerRBAC.providers.glooPlatform

Добавляет RBAC-правила для провайдера Gloo Platform

true

providerRBAC.providers.gatewayAPI

Добавляет RBAC-правила для провайдера Gateway API

true

providerRBAC.additionalRules

Дополнительные RBAC-правила для прочих провайдеров

[]

dashboard - настройки dashboard сервера Argo Rollouts#

Параметр

Описание

Значение по умолчанию

dashboard.enabled

Включение развертывания dashboard сервера

false

dashboard.readonly

Перевод dashboard в режим только для чтения

false

dashboard.component

Значение метки app.kubernetes.io/component для dashboard

rollouts-dashboard

dashboard.deploymentAnnotations

Аннотации Deployment dashboard

{}

dashboard.deploymentLabels

Метки Deployment dashboard

{}

dashboard.podAnnotations

Аннотации pod dashboard

{}

dashboard.podLabels

Метки pod dashboard

{}

dashboard.nodeSelector

Селектор узлов для размещения pod dashboard

{}

dashboard.tolerations

Tolerations для размещения pod dashboard на tainted-узлах

[]

dashboard.affinity

Affinity-правила для Deployment dashboard

{}

dashboard.logging.level

Уровень логирования dashboard (допустимые значения: debug, info, warn, error)

info

dashboard.logging.kloglevel

Уровень klog-логирования для dashboard

0

dashboard.topologySpreadConstraints

Правила TopologySpreadConstraints для pod dashboard

[]

dashboard.priorityClassName

Класс приоритета для pod dashboard

""

dashboard.createClusterRole

Включение создания cluster role для dashboard

true

dashboard.replicas

Количество pod dashboard

1

dashboard.image.registry

Реестр контейнерного образа dashboard

quay.io

dashboard.image.repository

Репозиторий контейнерного образа dashboard

argoproj/kubectl-argo-rollouts

dashboard.image.tag

Тег контейнерного образа dashboard. Если параметр не задан, то используется чарт appVersion

""

dashboard.image.pullPolicy

Политика загрузки контейнерного образа dashboard

IfNotPresent

dashboard.extraArgs

Дополнительные аргументы командной строки для rollouts-dashboard

[]

dashboard.extraEnv

Дополнительные переменные окружения для rollouts-dashboard

[]

dashboard.resources

Ограничения и запросы ресурсов для pod dashboard

{}

dashboard.podSecurityContext.runAsNonRoot

Запуск pod dashboard от имени непривилегированного пользователя

true

dashboard.containerSecurityContext

Параметры безопасности контейнера, которые определяют права, разрешения и настройки безопасности для dashboard

{}

dashboard.service.type

Тип сервиса для dashboard

ClusterIP

dashboard.service.loadBalancerClass

Класс реализации LoadBalancer для сервиса dashboard

""

dashboard.service.loadBalancerIP

Статический IP-адрес для сервиса типа LoadBalancer

""

dashboard.service.loadBalancerSourceRanges

Список CIDR-диапазонов, которым разрешен доступ к сервису

[]

dashboard.service.externalIPs

Список внешних IP-адресов сервиса dashboard

[]

dashboard.service.annotations

Аннотации сервиса dashboard

{}

dashboard.service.labels

Метки сервиса dashboard

{}

dashboard.service.portName

Имя порта сервиса dashboard

dashboard

dashboard.service.port

Порт сервиса dashboard

3100

dashboard.service.targetPort

Целевой порт контейнера для сервиса dashboard

3100

dashboard.service.nodePort

Фиксированный номер порта на узле кластера, используемый для внешнего доступа к сервису dashboard

null

dashboard.serviceAccount.create

Создание сервисного аккаунта для dashboard

true

dashboard.serviceAccount.annotations

Аннотации сервисного аккаунта dashboard

{}

dashboard.serviceAccount.name

Имя сервисного аккаунта dashboard. Если имя не задано и create=true, используется сгенерированное имя

""

dashboard.pdb.labels

Метки PodDisruptionBudget dashboard

{}

dashboard.pdb.annotations

Аннотации PodDisruptionBudget dashboard

{}

dashboard.pdb.enabled

Создание PodDisruptionBudget для dashboard

false

dashboard.pdb.minAvailable

Минимальное количество или процент pod dashboard, которые должны оставаться доступными

null

dashboard.pdb.maxUnavailable

Максимальное количество или процент pod dashboard, которые могут быть недоступны одновременно

null

dashboard.ingress.enabled

Включает создание Ingress для dashboard

true

dashboard.ingress.annotations

Аннотации Ingress dashboard

{}

dashboard.ingress.labels

Метки Ingress dashboard

{}

dashboard.ingress.ingressClassName

Имя ingressClass для ingress dashboard

nginx

dashboard.ingress.hosts

Список хостов Ingress dashboard

- 'argorollouts.{{ include "ingress.domain" . }}'

dashboard.ingress.paths

Список путей Ingress dashboard

- /

dashboard.ingress.pathType

Тип путей в Ingress dashboard

Prefix

dashboard.ingress.extraPaths

Дополнительные пути для Ingress dashboard

[]

dashboard.ingress.tls

TLS-конфигурация Ingress dashboard

- secretName: ingress-tls
hosts:
- 'argorollouts.{{ include "ingress.domain" . }}'

dashboard.volumes

Дополнительные volumes для pod dashboard

[]

dashboard.volumeMounts

Дополнительные volumeMounts для контейнера dashboard

[]

notifications - настройки уведомлений Argo Rollouts#

Параметр

Описание

Значение по умолчанию

notifications.configmap.create

Создание ConfigMap для уведомлений

true

notifications.secret.create

Создание секрета для уведомления. При ручном создании необходимо добавить корректную метку app.kubernetes.io/component

false

notifications.secret.items

Пары «ключ-значение» для вставки в секрет уведомлений

{}

notifications.secret.annotations

Аннотации для секрета уведомлений

{}

notifications.notifiers

Настройка служб уведомлений

{}

notifications.templates

Шаблоны уведомлений

{}

notifications.triggers

Триггеры, определяющие условия отправки уведомлений

{}

notifications.subscriptions

Подписки на триггеры общим способом для всех rollouts

[]