Argo CD Image Updater 사용 이유
우리는 Jenkins Pipeline을 이용해서 빌드부터 자동 배포까지 동작하는 과정을 지난 게시글(CI/CD관련 게시글)에서 확인해 봤는데요.
Argo CD
소스를 빌드하고 배포까지 한번에 하기가 상당히 까다롭습니다.
소스를 빌드하고, 컨테이너를 빌드해서 이미지를 Docker Hub
에 올리고 .yaml
파일을 수정하는 과정으로 자동배포까지 만들 수는 있지만 코드가 번잡해지죠.
이것을 해결하기 위해 Image Updater
를 사용하게 됩니다.
Image Updater
는 Docker Hub
를 모니터링하고 있어, 변경감지가 발생하면 ArgoCD
로 배포명령을 내리고 태그 규칙을 추가해 자동배포를 진행하게 됩니다.
아래 이미지를 보고 한번 이해해 보시기 바랍니다.
Argo CD Image Updater 설치
Jenkins에 접속해 이전에 만들어 놓은 Dashboard > add-on > deploy-argo > 파라미터와 함께 빌드
여기로 이동해 아래와 같이 설정하고 배포를 시작합니다.
DEPLOY_TYPE : helm_upgrade
TARGET_ARGO : argocd-image-updater
동작 확인
Kubernetes
대쉬보드에 들어가서 Pod
가 정상 동작하는지 확인해 봅시다.
2분 간격으로 체크 중인지를 확인해보면 됩니다.
time="2025-03-15T15:45:26Z" level=info msg="Processing results: applications=1 images_considered=0 images_skipped=1 images_updated=0 errors=0"
time="2025-03-15T15:47:26Z" level=info msg="Starting image update cycle, considering 1 annotated application(s) for update"
time="2025-03-15T15:47:26Z" level=info msg="Processing results: applications=1 images_considered=0 images_skipped=1 images_updated=0 errors=0"
time="2025-03-15T15:49:26Z" level=info msg="Starting image update cycle, considering 1 annotated application(s) for update"
time="2025-03-15T15:49:26Z" level=info msg="Processing results: applications=1 images_considered=0 images_skipped=1 images_updated=0 errors=0"
time="2025-03-15T15:51:26Z" level=info msg="Starting image update cycle, considering 1 annotated application(s) for update"
time="2025-03-15T15:51:26Z" level=info msg="Processing results: applications=1 images_considered=0 images_skipped=1 images_updated=0 errors=0"
자동 배포 설정
설정 방법
Application > api-tester-2232 > DETAILS
해당 화면으로 들어가서 Annotations내용에 아래 내용을 입력합니다.
▶ update-strategy
semver : 주어진 이미지 제약 조건에 따라 허용되는 가장 높은 버전으로 업데이트
latest : 가장 최근에 생성된 이미지 태그로 업데이트
name : 알파벳순으로 정렬된 목록의 마지막 태그로 업데이트
digest : 변경 가능한 태그의 최신 푸시 버전으로 업데이트
# 도커 허브에서 이미지 대상 지정
# argocd-image-updater.argoproj.io/image-list=<alias>=<Docker Username>/<Image Name>
argocd-image-updater.argoproj.io/image-list=1pro-api-tester=1pro/api-tester
# 업데이트 전략 선택
# argocd-image-updater.argoproj.io/<alias>.update-strategy=name
argocd-image-updater.argoproj.io/1pro-api-tester.update-strategy=name
# 태그 정규식 설정 (1.1.1-231220.175735)
argocd-image-updater.argoproj.io/1pro-api-tester.allow-tags=regexp:^1.1.1-[0-9]{6}.[0-9]{6}$
SYNC POLICY 설정
ENABLE AUTO-SYNC
를 클릭해서 아래 상태로 만들어 줍니다.
- PRUNE RESOURCES
- Git에서 리소스 삭제시 실제 Kubernetes에서도 자원이 삭제
- SELF HEAL
- Auto Sync 상태에서 항상 Git에 있는 내용이 적용됨 (이때 ArgoCD나 Kuberentes에서 직접 수정한 내용은 삭제됨)
Docker Build Job 생성
새보기 및 item 생성
Jenkins에서
Docker Image
를 만들 수 있게 작업해 봅시다.
우선 새보기를 만들어 볼까요??
조회명 : 223
Type : List View
이젠 아이템을 생성해 봅시다.
Enter an item name : 2232-build-docker-for-image-updater
Pipeline을 선택하고 OK버튼 클릭해서 만들어 줍시다.
이번에는 일프로님 repo가 아닌 본인의 repo를 사용하시는게 좋습니다.
그래야 내가 만들 Docker Hub에 이미지가 올라가는걸 확인할 수 있고 그걸 바탕으로 감지하여 빌드가 완료되는 것을 확인 할 수 있으니까요.
Project url : ${본인 github repo}
# 예시
Project url : https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2/
Definition : Pipeline script from SCM
Definition > SCM : Git
# 본인 repository url을 사용하세요. 밑에는 예시입니다.
Definition > SCM > Repositories > Repository URL : https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2.git
Definition > SCM > Branches to build > Branch Specifier : */main
Definition > SCM > Branches to build > Additional Behaviours > Sparse Checkout paths > Path : 2232
Definition > Script Path : 2232/Jenkinsfile
자동 업데이트 실행해보기
빌드
방금 만든 것을 실행시켜 빌드하여 Image를 푸쉬하게 합니다.
자동 업데이트 확인
Argo CD Image Updater
가 0~2분 이내에 Docker Hub
에 이미지가 변경된 것을 감지하여 Pod
를 생성하게 될 겁니다.
Pod
이 올라갔다면 아래와 같이 Pod
이 제거 되고 ReplicaSet
만 남게 되는 것을 확인 할 수 있습니다.
마무리
작업 후에 다음 실습을 위해 기존 namespace는 삭제하도록 하겠습니다.
🚀TrubleShooing
싱크가 제대로 안될 경우 해결방법
- detail에서 annotations 작성시 image path를 잘 적었는지 확인
(1pro/api-tester -> ${docker username}/api-tester - repo URL 본인 것인지 확인
- PATH 경로 잘 작성했는지 확인(저처럼 fork를 하지않고 특정 레포에 넣으신분들...)
image pull이 안되는 경우 해결방법
- Jenkinsfile을 뒤져서 DOCKERHUB_USERNAME 및 GITHUB_URL변경했는지 확인
- 2232/deploy/helm/api-tester 폴더에 들어가 values.yaml과 values-xx.yaml파일들의 images가 1pro-/api-tester가 아닌 ${docker username}/api-tester인지 확인
- Docker Hub에 접속해 v1.0.0으로 태그가 달려있으면 삭제 후 212 List View의 container-build했던 부분의 Jenkinsfile에서 image생성시 사용한 태그가 v1.0.0인지 확인해보고 GitHub에 들어가 v를 삭제한 1.0.0으로 커밋한 후에 컨테이너 빌드를 다시 시작(이 때 CI/CD서버에 docker에 로그인이 되어 있어야합니다.)
이 글은 인프런의 일프로님 강의를 기반으로 작성되었습니다.
'FrameWorks > Kubernetes' 카테고리의 다른 글
[Kubernetes] ArgoCD 사용해보기 (3) - ArgoCD Rollouts를 이용한 배포 (0) | 2025.03.16 |
---|---|
[Kubernetes] ArgoCD 사용해보기 (1) - ArgoCD 설치 및 기본 배포 (0) | 2025.03.15 |
[Kubernetes] Helm과 Kustomize 비교하며 사용하기 (0) | 2025.03.14 |
[Kubernetes] Jenkins Pipeline - 기초부터 Blue, Green 까지 (0) | 2025.03.12 |
[Kubernetes] CI/CD 환경 구축하기 (0) | 2025.03.11 |
댓글