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

Строка для частичного переопределения шаблона "argo-rollouts.fullname"

""

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

Параметр

Описание

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

fullnameOverride

Строка для полного переопределения шаблона "argo-rollouts.fullname"

""

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

Параметр

Описание

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

apiVersionOverrides.ingress

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

""

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

Параметр

Описание

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

kubeVersionOverride

Переопределение версии Kubernetes для оценки определенных манифестов

""

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

Параметр

Описание

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

extraObjects

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

[]

global - глобальные настройки#

Параметр

Описание

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

global.deploymentAnnotations

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

{}

global.deploymentLabels

Метки для всех развернутых Deployment

{}

global.revisionHistoryLimit

Количество старых ReplicaSet для сохранения

10

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

Параметр

Описание

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

controller.component

Значение метки app.kubernetes.io/component

rollouts-controller

controller.deploymentAnnotations

Аннотации для deployment контроллера

{}

controller.deploymentLabels

Метки для deployment контроллера

{}

controller.podAnnotations

Аннотации для pods контроллера

{}

controller.podLabels

Метки для pods контроллера

{}

controller.nodeSelector

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

{}

controller.tolerations

Tolerations для работы с taint узлов

[]

controller.affinity

Правила affinity для deployment контроллера

{}

controller.topologySpreadConstraints

Правила TopologySpreadConstraints для контроллера

[]

controller.terminationGracePeriodSeconds

Время ожидания завершения контейнера для lifecycle hook

30

controller.lifecycle

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

{}

controller.priorityClassName

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

""

controller.replicas

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

2

controller.createClusterRole

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

true

controller.extraArgs

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

[]

controller.extraEnv

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

[]

controller.extraContainers

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

[]

controller.initContainers

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

[]

controller.resources

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

{}

controller.volumes

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

[]

controller.volumeMounts

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

[]

controller.metricProviderPlugins

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

[]

controller.trafficRouterPlugins

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

[]

controller.logging - настройки логирования контроллера#

Параметр

Описание

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

controller.logging.level

Уровень логирования (debug, info, warn, error)

info

controller.logging.kloglevel

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

"0"

controller.logging.format

Формат логирования (text, json)

"text"

controller.image - настройки образа контроллера#

Параметр

Описание

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

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.7.2"

controller.image.pullPolicy

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

IfNotPresent

controller.containerPorts - порты контейнера контроллера#

Параметр

Описание

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

controller.containerPorts.metrics

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

8090

controller.containerPorts.healthz

Порт контейнера для проверки здоровья

8080

controller.metrics - настройки метрик контроллера#

Параметр

Описание

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

controller.metrics.enabled

Развертывание сервиса метрик

false

controller.metrics.service.portName

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

metrics

controller.metrics.service.port

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

8090

controller.metrics.service.annotations

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

{}

controller.metrics.serviceMonitor - настройки ServiceMonitor для Prometheus#

Параметр

Описание

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

controller.metrics.serviceMonitor.enabled

Включение ServiceMonitor для Prometheus

false

controller.metrics.serviceMonitor.namespace

Namespace для ServiceMonitor

""

controller.metrics.serviceMonitor.additionalLabels

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

{}

controller.metrics.serviceMonitor.additionalAnnotations

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

{}

controller.metrics.serviceMonitor.relabelings

RelabelConfigs для применения к образцам перед scraping

[]

controller.metrics.serviceMonitor.metricRelabelings

MetricRelabelConfigs для применения к образцам перед ingestion

[]

controller.livenessProbe - проверка жизнеспособности контроллера#

Параметр

Описание

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

controller.livenessProbe.httpGet.path

Путь для HTTP-проверки

/healthz

controller.livenessProbe.httpGet.port

Порт для HTTP-проверки

healthz

controller.livenessProbe.initialDelaySeconds

Начальная задержка перед первой проверкой

30

controller.livenessProbe.periodSeconds

Период между проверками

20

controller.livenessProbe.failureThreshold

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

3

controller.livenessProbe.successThreshold

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

1

controller.livenessProbe.timeoutSeconds

Время ожидания проверки

10

controller.readinessProbe - проверка готовности контроллера#

Параметр

Описание

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

controller.readinessProbe.httpGet.path

Путь для HTTP-проверки

/metrics

controller.readinessProbe.httpGet.port

Порт для HTTP-проверки

metrics

controller.readinessProbe.initialDelaySeconds

Начальная задержка перед первой проверкой

15

controller.readinessProbe.periodSeconds

Период между проверками

5

controller.readinessProbe.failureThreshold

Количество неудачных проверок перед not ready

3

controller.readinessProbe.successThreshold

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

1

controller.readinessProbe.timeoutSeconds

Время ожидания проверки

4

controller.pdb - Pod Disruption Budget для контроллера#

Параметр

Описание

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

controller.pdb.labels

Метки для Pod Disruption Budget контроллера

{}

controller.pdb.annotations

Аннотации для Pod Disruption Budget контроллера

{}

controller.pdb.enabled

Развертывание Pod Disruption Budget

false

controller.pdb.minAvailable

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

-

controller.pdb.maxUnavailable

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

-

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

Параметр

Описание

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

serviceAccount.create

Создавать ли сервисный аккаунт

true

serviceAccount.annotations

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

{}

serviceAccount.name

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

""

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

Параметр

Описание

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

crdAnnotations

Аннотации для всех CRD

{}

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

Параметр

Описание

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

podAnnotations

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

{}

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

Параметр

Описание

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

podSecurityContext.runAsNonRoot

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

true

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

Параметр

Описание

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

containerSecurityContext.allowPrivilegeEscalation

Разрешение escalation-привилегий

false

containerSecurityContext.capabilities.drop

Список capabilities для удаления

- ALL

containerSecurityContext.readOnlyRootFilesystem

Только чтение корневой файловой системы

true

containerSecurityContext.seccompProfile.type

Тип профиля seccomp

RuntimeDefault

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

Параметр

Описание

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

serviceAnnotations

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

{}

podLabels - метки pods#

Параметр

Описание

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

podLabels

Метки для pods Rollout

{}

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

Установка cluster role в режим только для чтения

false

dashboard.component

Значение метки app.kubernetes.io/component

rollouts-dashboard

dashboard.deploymentAnnotations

Аннотации для deployment dashboard

{}

dashboard.deploymentLabels

Метки для deployment dashboard

{}

dashboard.podAnnotations

Аннотации для pods dashboard

{}

dashboard.podLabels

Метки для pods dashboard

{}

dashboard.nodeSelector

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

{}

dashboard.tolerations

Tolerations для работы с taint узлов

[]

dashboard.affinity

Правила affinity для deployment dashboard

{}

dashboard.topologySpreadConstraints

Правила TopologySpreadConstraints для dashboard сервера

[]

dashboard.priorityClassName

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

""

dashboard.createClusterRole

Флаг создания cluster role для dashboard (требует cluster RBAC)

true

dashboard.replicas

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

1

dashboard.extraArgs

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

[]

dashboard.extraEnv

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

[]

dashboard.resources

Лимиты и запросы ресурсов для pods dashboard

{}

dashboard.volumes

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

[]

dashboard.volumeMounts

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

[]

dashboard.logging - настройки логирования dashboard#

Параметр

Описание

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

dashboard.logging.level

Уровень логирования (debug, info, warn, error)

info

dashboard.logging.kloglevel

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

"0"

dashboard.image - настройки образа dashboard#

Параметр

Описание

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

dashboard.image.registry

Реестр для использования

[quay.io](http://quay.io/)

dashboard.image.repository

Репозиторий для использования

argoproj/kubectl-argo-rollouts

dashboard.image.tag

Переопределение тега образа

""

dashboard.image.pullPolicy

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

IfNotPresent

dashboard.podSecurityContext - контекст безопасности пода dashboard#

Параметр

Описание

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

dashboard.podSecurityContext.runAsNonRoot

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

true

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

Параметр

Описание

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

dashboard.containerSecurityContext

Контекст безопасности на уровне контейнера

{}

dashboard.service - настройки сервиса dashboard#

Параметр

Описание

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

dashboard.service.type

Тип сервиса

ClusterIP

dashboard.service.loadBalancerClass

Класс loadBalancer implementation

""

dashboard.service.loadBalancerIP

IP-адрес для loadBalancer

""

dashboard.service.loadBalancerSourceRanges

Диапазоны IP для доступа к сервису

[]

dashboard.service.externalIPs

Внешние IP-адреса сервиса dashboard

[]

dashboard.service.annotations

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

{}

dashboard.service.labels

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

{}

dashboard.service.portName

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

dashboard

dashboard.service.port

Порт сервиса

3100

dashboard.service.targetPort

Целевой порт сервиса

3100

dashboard.service.nodePort

NodePort сервиса

-

dashboard.serviceAccount - сервисный аккаунт dashboard#

Параметр

Описание

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

dashboard.serviceAccount.create

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

true

dashboard.serviceAccount.annotations

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

{}

dashboard.serviceAccount.name

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

""

dashboard.pdb - Pod Disruption Budget для dashboard#

Параметр

Описание

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

dashboard.pdb.labels

Метки для Pod Disruption Budget dashboard

{}

dashboard.pdb.annotations

Аннотации для Pod Disruption Budget dashboard

{}

dashboard.pdb.enabled

Развертывание Pod Disruption Budget для dashboard

false

dashboard.pdb.minAvailable

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

-

dashboard.pdb.maxUnavailable

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

-

dashboard.ingress - настройки Ingress для dashboard#

Параметр

Описание

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

dashboard.ingress.enabled

Включение поддержки Ingress для dashboard

true

dashboard.ingress.annotations

Аннотации Ingress для dashboard

{}

dashboard.ingress.labels

Метки Ingress для dashboard

{}

dashboard.ingress.ingressClassName

Класс Ingress для dashboard

"nginx"

dashboard.ingress.hosts

Хосты Ingress для dashboard

'argorollouts.{{ .Values.global.publicDomain | default "dapp.test" }}'

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.{{ .Values.global.publicDomain | default "dapp.test" }}'

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

Параметр

Описание

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

notifications.configmap.create

Создавать ли configmap для уведомлений

true

notifications.secret.create

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

false

notifications.secret.items

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

{}

notifications.secret.annotations

Аннотации для secret-уведомлений

{}

notifications.notifiers

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

{}

notifications.templates

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

{}

notifications.triggers

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

{}

notifications.subscriptions

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

[]