ArgoCD Image Updater는 Kubernetes 워크로드와 함께 배포된 컨테이너 이미지의 새 버전을 확인하고, ArgoCD를 사용하여 허용되는 최신 버전으로 자동 업데이트 할 수 있습니다.
오늘은 ECR을 활용하여 ArgoCD Image Updater를 사용해봅시다.
사전 준비
ECR에 새로운 Repository를 만들고, 1.0.0 태그를 가진 이미지를 Push합니다.
Kubernetes 리소스 yaml이 위치할 CodeCommit Repository도 하나 생성합니다.
ArgoCD 설치
애플리케이션 배포 및 관리를 자동화하는 ArgoCD를 먼저 설치해줍니다. 오늘은 Helm으로 설치하겠습니다.
values.yaml을 먼저 준비해줍니다.
configs:
params:
server.insecure: true
values.yaml을 이용하여 설치를 진행합니다.
# CLI 설치
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
# Helm으로 설치
helm repo add argo https://argoproj.github.io/argo-helm
helm repo update argo
helm install argocd argo/argo-cd \
--create-namespace \
--namespace argocd \
--values values.yaml
Port-forward를 통해 argocd 서버를 localhost로 노출시킵니다. (실행을 유지하고, 다른 터미널 창을 열어야합니다.)
kubectl port-forward svc/argocd-server -n argocd 8080:443
Admin User의 기본 비밀번호를 알아냅니다.
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
기본 비밀번호를 이용해 argocd CLI에서 로그인합니다.
argocd login 127.0.0.1:8080 # ID : admin
GUI에서 로그인하기 쉽게 비밀번호를 바꿔줍니다.
argocd account update-password
이상 ArgoCD 설치가 끝났습니다.
ArgoCD Image Updater 설치
ArgoCD Image Updater도 helm으로 설치합니다.
values.yaml부터 준비합니다. account_id와 region을 적절하게 치환하여 사용해야 합니다.
config:
argocd:
grpcWeb: true
serverAddress: "http://argocd-server.argocd" # ArgoCD API Server 연결
insecure: true
plaintext: true
logLevel: debug
registries: # ECR Registry 등록 (Docker hub 등 Public Registry는 불필요)
- name: ECR
api_url: "https://073813292468.dkr.ecr.ap-northeast-2.amazonaws.com"
prefix: "073813292468.dkr.ecr.ap-northeast-2.amazonaws.com"
ping: true
insecure: false
credentials: "ext:/scripts/auth1.sh"
credsexpire: 10h
authScripts:
enabled: true
scripts: # ECR 인증 Token을 얻는 스크립트
auth1.sh: |
#!/bin/sh
aws ecr --region ap-northeast-2 get-authorization-token --output text --query 'authorizationData[].authorizationToken' | base64 -d
values.yaml을 이용하여 설치를 진행합니다.
helm install argocd-image-updater argo/argocd-image-updater \
--namespace argocd \
--values values.yaml
애플리케이션 준비
ArgoCD Image Updater로 Pod의 Image를 변경하려면 애플리케이션을 Kustomize나 Helm으로 생성해야 합니다.
간단하게 다음과 같은 구성으로 진행하겠습니다.
[ec2-user@ip-10-0-0-198 k8s]$ ls
deployment.yaml hpa.yaml ingress.yaml kustomization.yaml service.yaml
resources:
- deployment.yaml
- service.yaml
- ingress.yaml
- hpa.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
이제 파일들을 CodeCommit Repository에 Git으로 Push합니다.
애플리케이션 생성
SSH 터널링이나 EC2 서버 주소를 이용하여 ArgoCD Server로 접속합니다.
아까 Update한 Password를 이용하여 로그인을 진행합니다.
CodeCommit Credential부터 설정하겠습니다.
Settings / Repositories에서 CONNECT REPO를 누릅니다.
CodeCommit 접근 권한이 있는 IAM User에서 HTTPS Git credential을 발급하고, Username과 Password를 등록합니다.
CONNECT 버튼을 눌렀을 때 Successful이 나오면 정상입니다.
본격적으로 ArgoCD Application을 생성합니다. Application / NEW APP을 누릅니다.
SYNC POLICY를 Automatic으로 설정하여 자동으로 코드의 변경사항을 감지하고, 업데이트하도록 설정합니다.
나머지 설정은 원하는 대로 하고, 맨 밑에 기본으로 Directory가 아닌 Kustomize가 나오면 잘 인식하고 있는 것입니다.
모든 설정이 다 됐으면 CREATE를 누릅니다.
좀 기다렸다가 Healthy, Sync OK 상태가 되면 정상입니다.
Annotation 설정
ArgoCD Image Updater가 동작하기 위해서는 Annotation을 설정해야 합니다.
Application에서 DETAILS / SUMMARY / EDIT을 누릅니다.
다음과 같이 Annotation을 추가시킵니다.
argocd-image-updater.argoproj.io/image-list: org/app=<IMAGE_REPOSITORY_URL>/<IMAGE_REPOSITORY_NAME> # Pod에 사용할 Image 정의, org/app을 alias로 사용
argocd-image-updater.argoproj.io/org_app.pull-secret: ext:/scripts/auth1.sh # PULL에 필요한 Token을 받아옴
argocd-image-updater.argoproj.io/org_app.update-strategy: semver # 시맨틱 버전을 이용하여 최신 버전 판단
이상 ArgoCD Image Updater 설정까지 완료했습니다.
기능 테스트
현재 제 이미지는 1.0.0 버전이기 때문에 ALB를 통해 접속하면 다음과 같이 나옵니다.
이제 소스코드를 수정하고, 1.5.0 버전으로 업데이트 해보겠습니다.
docker push 073813292468.dkr.ecr.ap-northeast-2.amazonaws.com/nginx:1.5.0
조금 기다리면 Deployment를 통해 새로운 Replicaset이 생성된 것을 볼 수 있습니다.
Endpoint에 접속하면 버전이 바뀐 것을 볼 수 있습니다.
마무리
ArgoCD Image Updater의 업데이트 전략에는 semver 말고도 latest, digest, name이 있습니다.
공식 사이트를 참고해서 용도에 맞게 사용하셨으면 좋겠습니다.
https://argocd-image-updater.readthedocs.io/en/stable/basics/update-strategies/
Update strategies - Argo CD Image Updater
Update strategies Supported update strategies An update strategy defines how Argo CD Image Updater will find new versions of an image that is to be updated. Argo CD Image Updater supports different update strategies for the images that are configured to be
argocd-image-updater.readthedocs.io
오늘의 글은 여기까지입니다. 감사합니다!
'AWS' 카테고리의 다른 글
[AWS] CloudShell VPC 모드에서 잠깐 인터넷 액세스하기 (0) | 2024.12.29 |
---|---|
[AWS] DataSync로 S3 버킷을 다른 계정으로 마이그레이션하기 (4) | 2024.12.28 |
[AWS] AWS Load Balancer Controller로 HTTPS가 적용된 ALB 생성하기 (0) | 2024.02.21 |
[AWS] Managed Service for Apache Flink로 스트리밍 데이터 분석 - Studio notebooks (2) (2) | 2024.02.16 |
[AWS] Terraform으로 EC2 Instance 생성하기 (0) | 2024.01.19 |