[Book] [OK!] 7.5 Image Updater


Задача:
С помощью Argo CD обновлять tag в манифестах, как только в registry появится новая версия


Делаю:
2026.01.30


Создать токен для работы с repo

https://github.com/settings/tokens


Или можно кликать по иконкам:

GithubUserName -> Settings -> Developer Settings -> Personal access token -> Tokens (classic) ->


Genereate new token (classic) -> ARGO_TOKEN


$ cat << 'EOF' | kubectl create -f -
apiVersion: v1
kind: Secret
metadata:
  name: github-secret
  namespace: argocd
  annotations:
    tekton.dev/git-0: https://github.com
type: kubernetes.io/basic-auth
stringData:
  username: YOUR_GITHUB_USERNAME
  password: YOUR_GITHUB_PAT
EOF


YOUR_GITHUB_USERNAME - github username
YOUR_GITHUB_PAT - GitHub personal access token


Перекладывание image с quay.io в hub.docker.com

Из-за блокировок на скачивание с quay.io, перекладываю image к себе в бесплатных облаках google-cloud-shell.


$ docker pull quay.io/rhdevelopers/bgd


$ docker login -u webmakaka
$ docker tag quay.io/rhdevelopers/bgd webmakaka/bgd:1.0.0
$ docker push webmakaka/bgd:1.0.0


В файле прописать image
gitops-cookbook-sc/ch07/bgdui/base/bgd-deployment.yaml


containers:
  - image: webmakaka/bgd:1.0.0


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

$ cat << 'EOF' | kubectl apply -f -
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: bgdk-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/wildmakaka/gitops-cookbook-sc.git
    targetRevision: main
    path: ch07/bgdui/bgdk
  destination:
    server: https://kubernetes.default.svc
    namespace: bgdk
  syncPolicy:
    automated:
      selfHeal: true
      prune: true
      allowEmpty: true
EOF


(Можно пропустить) Посмотреть на задеплоенное приложение


$ kubectl patch svc bgd -n bgdk -p '{"spec": {"type": "NodePort"}}'


$ kubectl get services -n bgdk
NAME   TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
bgd    NodePort   10.100.62.50   <none>        8080:32538/TCP   3m21s


$ MINIKUBE_IP=$(minikube --profile ${PROFILE} ip)
$ echo $MINIKUBE_IP


$ APP_NODE_PORT=$(kubectl get svc bgd -n bgdk -o jsonpath='{.spec.ports[?(@.port==8080)].nodePort}')


// [OK!]
$ echo http://$MINIKUBE_IP:$APP_NODE_PORT


Устанавливаю argocd-image-updater


Запуск примера


$ cat << 'EOF' | kubectl apply -f -
apiVersion: argocd-image-updater.argoproj.io/v1alpha1
kind: ImageUpdater
metadata:
  name: bgdk-image-updater
  namespace: argocd
spec:
  namespace: argocd
  writeBackConfig:
    method: git:secret:argocd/github-secret
    gitConfig:
      repository: https://github.com/wildmakaka/gitops-cookbook-sc.git
      branch: main
  applicationRefs:
    - namePattern: bgdk-app
      images:
        - alias: bgd
          imageName: webmakaka/bgd
EOF


// Нужно, чтобы новая версия была старше
$ docker tag webmakaka/bgd:1.0.0 webmakaka/bgd:1.0.1
$ docker push webmakaka/bgd:1.0.1


// Запустить синхронизацию, чтобы не ждать 2 минуты
$ argocd app sync bgdk-app


В результате в репо версия обновилась. Спустя 2 минуты и на сервер приехала обновленна версия image.

Файл .argocd-source-bgdk-app.yaml удалять можно. Он автоматом должен пересоздаваться.


Проверка логов


// Получить логи
$ POD_NAME=$(kubectl get pods -n argocd -l app.kubernetes.io/name=argocd-image-updater -o name)
$ kubectl logs -n argocd $POD_NAME --tail=20