[k8s] ArgoCD: Image Updater

๊ด€๋ จ ํฌ์ŠคํŠธ
https://blog.naver.com/sssang97/223122991133

ArgoCD๋Š” pull ๋ฐฉ์‹์˜ gitops ๋ฐฐํฌ๋ฅผ ๊ตฌํ˜„๊ฐ€๋Šฅ์ผ€ ํ•ด์ฃผ๋Š” ๋ณด์กฐ๋„๊ตฌ๋‹ค.
์‹ค์ œ




์„ค์น˜

์•„๋ž˜ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ด์„œ ๊ด€๋ จ ์„ค์ •๋“ค์„ ์„ค์น˜ํ•œ๋‹ค.

kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj-labs/argocd-image-updater/stable/manifests/install.yaml




๊ณ„์ • ๊ตฌ์„ฑ

๊ทธ๋ฆฌ๊ณ  edit์œผ๋กœ configmap์— ๊ณ„์ • ์ •๋ณด๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

kubectl edit configmap argocd-cm -n argocd

์ด๋ฆ„์€ apiKey๋กœ ํ–ˆ๋‹ค.

accounts.image-updater: apiKey

๊ทธ๋ฆฌ๊ณ  account list๋กœ ํ™•์ธํ•˜๋ฉด ์ถ”๊ฐ€๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๊ธˆ ๋งŒ๋“  ๊ณ„์ •์— ๊ถŒํ•œ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

kubectl edit configmap argocd-rbac-cm -n argocd

data:
  policy.csv: |
    p, role:image-updater, applications, get, */*, allow
    p, role:image-updater, applications, update, */*, allow
    g, image-updater, role:image-updater
  policy.default: role.readonly




updater ๊ตฌ์„ฑ

๋˜ ํ•˜๋‚˜์˜ configmap์— ๋“ค์–ด๊ฐ€์„œ ์ถ”๊ฐ€ ํ•„๋“œ๋“ค์„ ๋„ฃ์–ด์ค€๋‹ค.

kubectl edit configmap argocd-image-updater-config -n argocd

์ด๋ ‡๊ฒŒ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

data:
  applications_api: argocd
  argocd.server_addr: ์ฃผ์†Œ
  argocd.grpc_web: "true"
  argocd.insecure: "false"
  argocd.plaintext: "true"




updater์— ๊ถŒํ•œ ๋ถ€์—ฌ

image-updater์—์„œ ์‚ฌ์šฉํ•  argocd ์ ‘๊ทผ์šฉ ํ† ํฐ์„ ๋งŒ๋“ค๊ณ 

argocd account generate-token --account image-updater --id image-updater

๊ทธ๊ฑธ ์ ์ ˆํžˆ ์ ์šฉํ•ด์ค€๋‹ค.
YOUR_TOKEN์— ๋ฐฉ๊ธˆ ํ† ํฐ์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

kubectl create secret generic argocd-image-updater-secret \
  --from-literal argocd.token=$YOUR_TOKEN --dry-run -o yaml |
  kubectl -n argocd apply -f -




๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋“ฑ๋ก

์‚ฌ์šฉํ•  ๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ •๋ณด๋„ ์—ฌ๊ธฐ์— ๋„ฃ์–ด์ค˜์•ผ ํ•œ๋‹ค.
Docker hub์˜ public ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, ์ด๋ ‡๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

kubectl edit configmap argocd-image-updater-config -n argocd
  registries.conf: | 
    registries:
      - name: docker
        api_url: https://registry-1.docker.io
        prefix: docker.io
        ping: yes
        tagsortmode: latest-last

ํผ๋ธ”๋ฆญ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ผ ์‹ ๊ฒฝ์“ธ ๊ฒƒ์ด ์—†๋Š”๋ฐ, ์‚ฌ์‹ค ํ”„๋กœ๋•์…˜์—์„œ๋Š” private์„ ์‚ฌ์šฉํ•  ์ผ์ด ํ›จ์”ฌ ๋งŽ์„ ๊ฒƒ์ด๋‹ค.
private ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” credentials ํ•„๋“œ์— ์ ‘๊ทผ์šฉ ํ‚ค๋ฅผ ์ถ”๊ฐ€๋กœ ์ „๋‹ฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.




updater ์ˆ˜์ •์‚ฌํ•ญ ๋ฐ˜์˜

updater์˜ ์„ค์ •์„ ๋ณ€๊ฒฝํ–ˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ๊ทธ๊ฒŒ ๋ฆฌ์–ผํƒ€์ž„์œผ๋กœ ๋ฐ˜์˜๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.
๊ทธ๋ž˜์„œ ์ˆ˜์ •ํ•œ๊ฑธ ๋ฐ˜์˜์‹œํ‚ค๋ ค๋ฉด pod๋ฅผ ์ฃฝ์ด๊ณ  ์ƒˆ๋กœ ๋„์šฐ๋„๋ก ํ•ด์•ผํ•œ๋‹ค.

kubectl -n argocd rollout restart deployment argocd-image-updater




updater ์—ฐ๊ฒฐ ์ƒํƒœ ํ™•์ธ

๋ ˆ์ง€์ŠคํŠธ๋ฆฌ๋ฅผ ๋“ฑ๋กํ•œ๊ฒŒ ์ž˜ ๋˜์—ˆ๋Š”์ง€๋„ ํ™•์ธํ•ด๋ณด์ž.
pod ๋ชฉ๋ก์„ ํ™•์ธํ•ด์„œ updater ํŒŒ๋“œ์— ๋“ค์–ด๊ฐ„ ๋‹ค์Œ

argo-image-updater cli๋กœ ํŠน์ • ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธ์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

argocd-image-updater test docker.io/myyrakle/node-server-for-test

์—ฌ๊ธฐ์„œ ๋ญ”๊ฐ€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ๊ฒƒ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค.




๋ฐฐํฌ

๋ฐฐํฌ๋Š” ๊ทธ๋ƒฅ ์ง€์ •ํ•ด๋‘” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— pushํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ ๋‹ค ๋๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

์ƒˆ ๋ฒ„์ „์„ ์˜ฌ๋ฆฌ๋ฉด image updater๊ฐ€ ๊ฐ์ง€ํ•˜๊ณ , ์ด๋ฏธ์ง€๋ฅผ ๊ต์ฒดํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€ ๋นŒ๋“œ ํ”„๋กœ์„ธ์Šค์™€ ์‹ค์ œ ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค์˜ ์ œ์–ด๊ถŒ์„ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

image updater์˜ ํด๋ง ์ฃผ๊ธฐ๋Š” 2๋ถ„ ์ •๋„๋ผ๊ณ  ํ•œ๋‹ค. ์—„์ฒญ ๋น ๋ฅด์ง€๋Š” ์•Š๋‹ค.



์ฐธ์กฐ
https://velog.io/@junsugi/Argo-CD-Image-Updater-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-with.-AWS-EKS
https://argocd-image-updater.readthedocs.io/en/stable/install/installation/
https://stackoverflow.com/questions/34198392/docker-official-registry-docker-hub-url