Код-ревью Senior GitOps и ArgoCD обновлено
Код-ревью: Application для прода
Вопрос
Это Application для production-окружения. Найдите проблемы.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: payments-prod
namespace: argocd
spec:
project: default
source:
repoURL: https://git.example.ru/team/payments.git
targetRevision: HEAD
path: k8s
destination:
server: https://kubernetes.default.svc
namespace: payments
syncPolicy:
automated:
prune: true
selfHeal: false
Коротко
Здесь всё «работает», но прод не защищён: любой мерж сразу едет в продакшн, проект без ограничений, дрейф не исправляется, а случайное удаление файла снесёт данные. В нормальной схеме у prod свой каталог с явным тегом, AppProject с белым списком и продвижение через merge request.
Что должен найти ревьюер
- Безопасностьстрока 7Проект
defaultразрешает любые источники и кластеры. Для прода нужен отдельный AppProject с ограничением репозиториев, namespace и типов ресурсов. - Ошибкастрока 10
targetRevision: HEADдля прода: в прод уходит любой коммит в основную ветку без продвижения. Нужен отдельный каталог или ветка окружения либо фиксированная ревизия. - Ошибкастрока 11Один
path: k8sбез разделения окружений: stage и prod нельзя различить и продвигать отдельно. Нужны overlays или отдельные каталоги. - Ошибкастрока 18
selfHeal: falseпри автосинхронизации: ручные правки в проде останутся, видно будет только статус OutOfSync. Для прода стоит включить или явно мониторить дрейф. - Ошибкастрока 17
prune: trueбез защиты критичных ресурсов: удаление файла из git удалит, например, PVC с данными. Нужна аннотацияPrune=falseна таких ресурсах.
Разбор
Здесь всё «работает», но прод не защищён: любой мерж сразу едет в продакшн, проект без ограничений, дрейф не исправляется, а случайное удаление файла снесёт данные. В нормальной схеме у prod свой каталог с явным тегом, AppProject с белым списком и продвижение через merge request.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.