ArgoCD Image Updater — это компонент, который автоматически обновляет образы в Git-репозитории при появлении новых тегов в container registry. Он не требует использования latest
и может работать с семантическим версионированием (v1.2.3
), хешами коммитов (main-abc1234
) или любыми другими тегами. Для специфичной обработки тегов требуется прописать regex.
Из основных возможностей хотелось бы отметить :
Также важно сказать об ограничениях :
Позволяет организовать полную автоматизацию процесса развертывания:
По умолчанию используется стратегия версионирования semver, но можно сделать и другую используя аннотацию :argocd-image-updater.argoproj.io/<image_name>.update-strategy: <strategy>
Стратегия | Описание |
semver | Обновление до версии согласно политике (regex) |
latest | обновление до наиболее последней версии |
name | Обновление до наиболее последней версии, отсортированной по имени в алфавитном порядке |
ArgoCD Image Updater поставляется как отдельный компонент. Официальная документация по развертыванию - тут.
Применение установочного манифеста:
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/manifests/install.yaml
ArgoCD Image Updater официально работает с:
docker.io
)quay.io
and on-premise)jfrog.io
and on-premise)ghcr.io
)docker.pkg.github.com
)registry.gitlab.com
)gcr.io
)Для начала нужно создать сам секрет (создать нужно в ns argocd):
kubectl create secret docker-registry ghcr-secret \
--namespace argocd \
--docker-server=ghcr.io \
--docker-username=<your-github-username> \
--docker-password=<your-personal-access-token> \
--docker-email=your-email@example.com
Потом отредактировать ConfigMap и указать там этот секрет:
kubectl edit cm argocd-image-updater-config -n argocd
В него нужно ввести:
data:
registries.conf: |
registries:
- name: GitHub
prefix: ghcr.io
api_url: https://ghcr.io/v2/
credentials: pullsecret:argocd/ghcr-secret
Если вы сначала установили сервис, а затем добавили Secret, то нужно перезапустить Image Updater:
kubectl rollout restart deploy argocd-image-updater -n argocd
После этого он будет работать с registry.
Чтобы он заработал нужно указывать специальные аннотации, вот пример такого манифеста:
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: ct-frontend
namespace: argocd
annotations:
# Автообновление образа frontend
argocd-image-updater.argoproj.io/image-list: frontend=ghcr.io/firysksta/crispy-train/frontend
argocd-image-updater.argoproj.io/frontend.allow-tags: regexp:^main-v[0-9]+\.[0-9]+\.[0-9]+$ # Формат тегов: main-v1.0.0
argocd-image-updater.argoproj.io/frontend.update-strategy: semver
argocd-image-updater.argoproj.io/frontend.helm.image-spec: container.image # Репозиторий
argocd-image-updater.argoproj.io/frontend.helm.image-tag: container.tag # Тег
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
project: default
destination:
server: https://kubernetes.default.svc
namespace: crispy-train
source:
path: HelmCharts/frontend/
targetRevision: HEAD
repoURL: git@github.com:firysksta/crispy-train-cd.git
helm:
valueFiles:
- values_prod.yaml
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true