원래 이전 포스팅으로 수업이 완전히 끝났지만, ArgoCD로 배포 시 에러가 생겼다. 이를 해결해야 하는데 개념이 혼재된 느낌이라 해결 방법을 찾기가 어려웠다. 그래서 마지막으로 ArgoCD 설치 과정에 대한 정리를 해보았다.
1. 사전 작업
미리 강사님께서 Artifact Hub에서 argo-cd, argocd-image-updater, argo-rollouts package를 Github에 업로드 해놓으셨다.
여기에 상세 과정이 나와있다.
생각해둘 것은
k8s-1pro/install/tree/main/ground/cicd-server/argo/helm/ 여기에 helm chart들이 업로드 되어있다는 것!
2. ArgoCD 설치하기
여기서 Jenkins 파일을 볼 필요가 있다.
parameters {
choice(choices: ['option', 'namespace_create', 'namespace_delete', 'helm_upgrade', 'helm_uninstall'], name: 'DEPLOY_TYPE', description: '배포 타입 선택')
choice(choices: ['option', 'argo-cd', 'argocd-image-updater', 'argo-rollouts'], name: 'TARGET_ARGO', description: 'Argo 대상 선택')
}
이 parameters를 가지고 if/else 문을 구성해 다음과 같은 순서로 진행한다.
이제 Jenkins에 namespace_install > helm_upgrade 순서로 빌드해주면 된다.
(Jenkins로 ArgoCD pod를 빌드, 배포까지 해주는 것)
3. ArgoCD 접속 및 배포
https://192.168.56.30:30002/login
kubectl get -n argo secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d
▲ Jenkins 초기 비밀번호 확인 (관리자 비밀번호)
4. App 배포하기
ArgoCD는 Application 단위로 App을 관리하기 때문에, Application을 만들면 된다.
4-1. kubectl로 배포하기
참고로 build 과정은 생략한다. (강사님의 1pro/api-tester:1.0.0 이미지를 대신 사용함)
# GENERAL
Application Name: api-tester-2231
Project Name: default
SYNC POLICY : Manual
AUTO-CREATE-NAMESPACE
# SOURCE
Repository URL : https://github.com/leesunmi99/kubernetes-anotherclass-sprint2.git
Revision : main
Path : 2231/deploy/k8s
# DESTINATION
Cluster URL : https://kubernetes.default.svc
Namespace : anotherclass-223
[선택] Directory
▲ 2231/deploy/k8s 에는 리소스들을 정의하는 yaml 파일들만 존재한다. (그래서 강사님의 image를 씀)
4-2. helm으로 배포하기
# GENERAL
Application Name: api-tester-2232
Project Name: default
SYNC POLICY : Manual
AUTO-CREATE-NAMESPACE
# SOURCE
Repository URL : https://github.com/leesunmi99/kubernetes-anotherclass-sprint2.git
Revision : main
Path : 2232/deploy/helm/api-tester
# DESTINATION
Cluster URL : https://kubernetes.default.svc
Namespace : anotherclass-223
[선택] Helm
VALUES FILES : values-dev.yaml [입력 후 엔터]
▲ ArgoCD가 자동으로 helm 파일임을 인식함
5. ArcoCD Image Updater
- helm과 Kustomize를 사용할 때만 동작한다. ( 내부적으로 --set image.tag=1.0.0-202506.031850 이런 옵션을 사용하기 때문)
- Docker hub를 모니터링 하고, 이미지가 업데이트 되면 ArgoCD에 배포 명령을 보낸다
values-dev.yaml 파일
config:
argocd:
serverAddress: "https://argo-cd-argocd-server"
registries:
- name: Docker Hub
api_url: https://registry-1.docker.io
#credentials: env:DOCKER_HUB_CREDS=username:passowrd
▲ ArgoCD의 API 주소 : https://argo-cd-argocd-server
▲ Docker Hub의 이미지 저장소 API 주소: https://registry-1.docker.io
자동 배포 설정 방법
(App 버전 업그레이드로 컨테이너 이미지를 변경해야 할 때)
helm_upgrade (argocd-image-updater 선택)
# GENERAL
Application Name: api-tester-2232
Project Name: default
SYNC POLICY : Manual
AUTO-CREATE-NAMESPACE
# SOURCE
Repository URL : https://github.com/leesunmi99/kubernetes-anotherclass-sprint2.git
Revision : main
Path : 2232/deploy/helm/api-tester
# DESTINATION
Cluster URL : https://kubernetes.default.svc
Namespace : anotherclass-223
[선택] Helm
VALUES FILES : values-dev.yaml [입력 후 엔터]
▲ 이전에 helm으로 배포한 App의 Application
여기에 추가로 Annotation을 입력한다.
// 도커 허브에서 이미지 대상 지정
# argocd-image-updater.argoproj.io/image-list=<alias>=<Dockerhub-Username>/api-tester
argocd-image-updater.argoproj.io/image-list=lsm0-api-tester=lsm0/api-tester
//lsm0/api-tester : 레퍼지토리 이름
// 업데이트 전략 선택
# argocd-image-updater.argoproj.io/<alias>.update-strategy=name
argocd-image-updater.argoproj.io/lsm0-api-tester.update-strategy=name
// 태그 정규식 설정 (1.1.1-231220.175735)
# argocd-image-updater.argoproj.io/<alias>.allow-tags=regexp:^1.1.1-[0-9]{6}.[0-9]{6}$
argocd-image-updater.argoproj.io/lsm0-api-tester.allow-tags=regexp:^1.1.1-[0-9]{6}.[0-9]{6}$
▲ alias: ArgoCD에서 내부에 붙이는 별칭
다른 App 이여도 같은 image를 사용할 수 있기 때문에 alias(별칭)를 달아주는 것!
이미지 업데이트 옵션:
https://argocd-image-updater.readthedocs.io/en/stable/basics/update-strategies/
SYNC POLICY > ENABLE AUTO-SYNC
Docker build Job 생성 (Jenkins에서)
[새보기]
223
Type: List View
[item]
Enter an item name : 2232-build-docker-for-image-updater
[Pipeline] 선택
Project url : https://github.com/leesunmi99/kubernetes-anotherclass-sprint2/
Pipeline script from SCM
SCM : Git
Repository URL : https://github.com/leesunmi99/kubernetes-anotherclass-sprint2.git
Branch Specifier : */main
Path : 2232
Script Path : 2232/Jenkinsfile
이후 수업을 위해 api-tester-2232 Application을 삭제한다
6. Argo Rollouts
6-1. Argo Rollouts로 Blue/Green 배포하기
실습 과정
Argo Rollouts 설치 -> App 생성 -> 배포 -> Git 수정 후 Refresh -> Sync -> Promote
Argo Rollouts 설치 방법
Jenkins > deploy-argo ( helm_upgrade / argocd-rollouts) 빌드
App 생성하기 [EDIT AS YAML]
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: api-tester-2233
spec:
destination:
name: ''
namespace: anotherclass-223
server: 'https://kubernetes.default.svc'
source:
path: 2233/deploy/argo-rollouts
repoURL: 'https://github.com/k8s-1pro/kubernetes-anotherclass-sprint2.git'
targetRevision: main
sources: []
project: default
배포하기
SYNC 버튼 클릭
트래픽 보내기
# Actie Service
while true; do curl http://192.168.56.30:32233/version; sleep 2; echo ''; done;
# Preview Service
while true; do curl http://192.168.56.30:32243/version; sleep 2; echo ''; done;
Git 수정하기
image: '1pro/api-tester:1.0.0' => image: '1pro/api-tester:2.0.0'
Argo Rollouts 대시보드 확인
http://192.168.56.30:30003/rollouts/anotherclass-223
+ Argo Rollouts CLI 설치
// root 계정
curl -LO https://github.com/argoproj/argo-rollouts/releases/download/v1.6.4/kubectl-argo-rollouts-linux-amd64
chmod +x ./kubectl-argo-rollouts-linux-amd64
mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
// 설치 확인
kubectl argo rollouts version
// 조회
kubectl argo rollouts get rollout api-tester-2233 -n anotherclass-223 -w
6-2. Argo Rollouts로 Canary 배포하기
# kubectl로 Rollouts 배포
kubectl apply -f https://raw.githubusercontent.com/k8s-1pro/kubernetes-anotherclass-sprint2/main/2234/deploy/argo-rollouts/rollout.yaml -n anotherclass-223
kubectl apply -f https://raw.githubusercontent.com/k8s-1pro/kubernetes-anotherclass-sprint2/main/2234/deploy/argo-rollouts/configmap.yaml -n anotherclass-223
kubectl apply -f https://raw.githubusercontent.com/k8s-1pro/kubernetes-anotherclass-sprint2/main/2234/deploy/argo-rollouts/secret.yaml -n anotherclass-223
kubectl apply -f https://raw.githubusercontent.com/k8s-1pro/kubernetes-anotherclass-sprint2/main/2234/deploy/argo-rollouts/service.yaml -n anotherclass-223
//조회
kubectl argo rollouts get rollout api-tester-2234 -n anotherclass-223 -w
트래픽 보내기
while true; do curl http://192.168.56.30:32234/version; sleep 2; echo ''; done;
배포 시작
// 방법1) 직접 edit 로 수정하기
// kubectl argo rollouts edit <ROLLOUT_NAME> -n <NAMESPACE_NAME>
kubectl argo rollouts edit api-tester-2234 -n anotherclass-223
// 방법2) image 수정하기
// kubectl argo rollouts set image <ROLLOUT_NAME> <CONTAINER_NAME>=<IMAGE>:<TAG> -n <NAMESPACE_NAME>
kubectl argo rollouts set image api-tester-2234 api-tester-2234=1pro/api-tester:2.0.0 -n anotherclass-223
리소스 정리
kubectl delete -f https://raw.githubusercontent.com/k8s-1pro/kubernetes-anotherclass-sprint2/main/2234/deploy/argo-rollouts/rollout.yaml -n anotherclass-223
kubectl delete -f https://raw.githubusercontent.com/k8s-1pro/kubernetes-anotherclass-sprint2/main/2234/deploy/argo-rollouts/configmap.yaml -n anotherclass-223
kubectl delete -f https://raw.githubusercontent.com/k8s-1pro/kubernetes-anotherclass-sprint2/main/2234/deploy/argo-rollouts/secret.yaml -n anotherclass-223
kubectl delete -f https://raw.githubusercontent.com/k8s-1pro/kubernetes-anotherclass-sprint2/main/2234/deploy/argo-rollouts/service.yaml -n anotherclass-223
'인프런 복습 - 쿠버네티스 어나더 클래스' 카테고리의 다른 글
[Sprint3] 가상화 한방정리 (0) | 2025.06.23 |
---|---|
[Sprint2] ArgoCD Rollouts 사용하기 (2) | 2025.06.04 |
[Sprint2] ArgoCD Image Updater 이용하기 (0) | 2025.06.03 |
[Sprint2] ArgoCD 설치 및 Application 생성해보기 (1) | 2025.06.02 |
[Sprint2] 배포 파이프라인 구축 후 마주하게 되는 고민들 (1) | 2025.05.31 |