LINUX.ORG.RU

argocd: как остановить раскатывание обновления при алерте мониторинга

 argocd,


0

2

Как с помощью argocd организовать плавное раскатывание софта с слежением за метриками работы системы, чтобы он откатил назад если всё пошло не так?

Ощущение, что это в стороне от ArgoCD. Как такое делают?

Как с помощью argocd организовать плавное раскатывание софта с слежением за метриками работы системы, чтобы он откатил назад если всё пошло не так?

Вы решаете проблему не там где надо,

Ощущение, что это в стороне от ArgoCD.

Да

Как такое делают?

Примерно так:

alice@laptop: ~/git/project-gitops$ git commit -m 'feat: new feature' .
alice@laptop: ~/git/project-gitops$ git push origin <branch>
alice@laptop: ~/git/project-gitops$ 
alice@laptop: ~/git/project-gitops$ for i in `seq 1 3`; do
argocd app sync project-gitops --assumeYes --timeout 2100 --async || :
argocd app wait project-gitops --health --timeout=300 && break
exit 0
done

Откатить:

alice@laptop: ~/git/project-gitops$ git revert HEAD
alice@laptop: ~/git/project-gitops$ git push origin <branch>
alice@laptop: ~/git/project-gitops$ argocd app sync project-gitops --assumeYes --timeout 2100
gagarin0
()
Ответ на: комментарий от max_lapshin

это довольно забавная вещь

Внезапно есть такая директория в argocd репозитории

https://github.com/argoproj/argo-cd/tree/master/resource_customizations

в которой написаны сотни файлов на прекрасном языке lua

их главная цель это выполнить присловутый health check

Я бы порекомендовал начать с того, что написать небольшой lua скриптец, который дергает нужные вам метрики из 3thrd party мониторинга и выставляет Health = false

На это уже реагирует ваш мониторинг и делает

argocd app rollback project-gitops 
gagarin0
()
Ответ на: комментарий от max_lapshin
data:
  resource.customizations.health.project.component: |
    local http = require("socket.http")
    local prometheus_url = "http://promo.monitoring:9090/api/v1/query?query=node_cpu_seconds_total"
    local response, status_code = http.request(prometheus_url)
    if status_code == 200 then
        print("Prometheus Metrics:\n" .. response)
    else
        print("Failed to fetch metrics. HTTP Status:", status_code)
    end
gagarin0
()
Ответ на: комментарий от max_lapshin

lua звучит как непреодолимая преграда.

в этом случае, вам нужно действовать так:

  1. argocd app sync project-gitops --assumeYes --timeout 2100
  2. argocd app wait project-gitops --health --timeout=300 || argocd app rollback project-gitops
  3. сторонний мониторинг понимает что что-то идет не так
  4. делает argocd app rollback project-gitops
gagarin0
()