티스토리 뷰
✅ 아래 글의 내용 및 이미지는 인프런 "쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2" 강의를 듣고 정리한 글입니다.
인트로
- Spring2 배포 파이프라인 중 마지막 레벨
Level1
- Jenkins만 가지고 파이프라인 생성
- CI/CD 환경에 최소한 도커와 kubectl이 설치가 되어있어야함
- Jenkins UI로 소스빌드와 컨테이너 빌드, 그리고 배포 구성을 했는데 가장 쉽고 빠르게 할 수 있지만 Jenkins UI 로 수정한 구성에 대해서는 변경 관리가 안된다는 단점이 있다.
Level2
- Jenkins 파이프라인을 사용하면 배포 파이프라인을 스크립트로 만들 수 있다.
- 스크립트를 처음 만들때는 UI로 만드는 것보다 시간이 많이 필요하지만 한 번 만들어 놓으면 복사를 해서 쓰거나 내용에 로직을 넣어서 쓸 수 있다는 장점이 있음.
Level3
- 배포 구성이 아닌 배포 파일에 대해서도 개선이 필요한데 이게 레벨3
- k8s에 배포할 yaml 파일을 그냥 kubectl로 배포하다 보면 많은 yaml 파일들이 만들어지게됨.
- yaml 파일 동적으로 사용하게 구성. helm 같은 패키지 매니저가 그 역할을 한다.
- 배포할 yaml 파일들에 대한 중복은 최소화되고 환경별 설정 관리도 편리해진다.
Level4
- 위의 레벨을 넘어서 더 다양한 상황에서 안정적으로 앱을 배포하기 위한 여러 배포 전략들이 필요하다.
- ArgoCD를 사용하면 블루그린 배포나 카나리 방식의 배포 기능도 지원해준다.
- 요즘 추세는 Jenkins로 빌드까지만 하고 배포에 대해서는 ArgoCD를 많이 사용한다.
ArgoCD 아키텍처, Argo Apps 설치 및 배포 해보기
1. ArgoCD 설치하기
1-1. [+] 버튼을 눌러서 [새 보기] 만들기
조회명 : add-on
Type : List View
1-2. item name 입력 및 Pipeline 선택
Enter an item name에 [deploy-argo] 입력
[Pipeline] 선택
[OK] 버튼 클릭

1-3-1. Configure > General > GitHub project > Project url
* 설치 Repo는 별도로 있기 때문에, 여기선 Username 변경없이 따라하시면 됩니다.
Project url : https://github.com/k8s-1pro/install/
1-3-2. Configure > Pipeline
Definition : Pipeline script from SCM
Definition > SCM : Git
Definition > SCM > Repositories > Repository URL : https://github.com/k8s-1pro/install.git
Definition > SCM > Branches to build > Branch Specifier : */main
Definition > SCM > Branches to build > Additional Behaviours > Sparse Checkout paths > Path : ground/cicd-server/argo
Definition > Script Path : ground/cicd-server/argo/Jenkinsfile
※ Mac 유저분께서는 [Script Path] 부분을 아래와 같이 해주세요.
Definition > Script Path : ground/cicd-server/argo/Jenkinsfile-mac
※ Helm과 Kustomize 비교하며 사용하기에서 [3-3-1-1. 도커 접속 정보 및 쿠버네티스 config를 위한 New credentials 생성]이 사전에 설정되어 있어야 아래 빌드가 정상 동작합니다.

1-4. [저장] 후 [파라미터와 함께 빌드] 실행
1-4-1. Namespace 생성

1-4-2. Argo CD 배포

1-4-3. Argocd Image Updater 배포
1-4-4. Argo Rollouts 배포
1-5-1. ArgoCD 접속
https://192.168.56.30:30002/login

1-5-2 ArgoCD 관리자 비밀번호 확인 (CI/CD or Mastser server)
[jenkins@cicd-server ~]$ kubectl get -n argo secret argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d
BHQG2b2iJpatMNsS

1-5-3 ArgoCD 로그인
▶ Username : admin
▶ Password : BHQG2b2iJpatMNsS
- 로그인 이후 [User Info] > [UPDATE PASSOWRD] 에서 변경 가능
변경완료

2. App 배포하기 (kubectl) - 2231

2-1. App 생성 하기 - [+ NEW APP] 클릭
▶ GENERAL
Application Name : api-tester-2231
Project Name : default
SYNC POLICY : Manual
[체크] AUTO-CREATE-NAMESPACE

▶ SYNC OPTIONS
SKIP SCHEMA VALIDATION : 매니패스트에 대한 yaml 스키마 유효성 검사를 건너뛰고 배포 (kubectl apply --validate=false)
PRUNE LAST : 동기화 작업이 끝난 이후에 Prune(git에 없는 리소스를 제거하는 작업)를 동작시킴
RESPECT IGNORE DIFFERENCES : 동기화 상태에서 특정 상태의 필드를 무시하도록 함
AUTO-CREATE NAMESPACE : 클러스터에 네임스페이스가 없을 시 argocd에 입력한 이름으로 자동 생성
APPLY OUT OF SYNC ONLY : 현재 동기화 상태가 아닌 리소스만 배포
SERVER-SIDE APPLY : 쿠버네티스 서버에서 제공하는 Server-side Apply API 기능 활성화 (레퍼런스 참조)
▶ PRUNE PROPAGATION POLICY (레퍼런스 참조)
foreground : 부모(소유자, ex. deployment) 자원을 먼저 삭제함
background : 자식(종속자, ex. pod) 자원을 먼저 삭제함
orphan : 고아(소유자는 삭제됐지만, 종속자가 삭제되지 않은 경우) 자원을 삭제함
▶ 참고자료
https://kubernetes.io/docs/reference/using-api/server-side-apply/
https://kubernetes.io/ko/docs/concepts/architecture/garbage-collection/
가비지(Garbage) 수집
쿠버네티스가 클러스터 자원을 정리하기 위해 사용하는 다양한 방법을 종합한 용어이다. 다음과 같은 리소스를 정리한다: 종료된 잡 소유자 참조가 없는 오브젝트 사용되지 않는 컨테이너와 컨
kubernetes.io
▶ SOURCE
* 본인의 GithubHub Username 입력
Repository URL : https://github.com/<Github-Username>/kubernetes-anotherclass-sprint2.git
Revision : main
Path : 2231/deploy/k8s

▶ DESTINATION
Cluster URL : https://kubernetes.default.svc
Namespace : anotherclass-223
[선택] Directory

▶ 화면 상단 [CREATE] 클릭
어플리케이션이 만들어짐

2-2. 배포하기 - [SYNC] 클릭 > [SYNCHRONIZE] 클릭

PRUNE : GIt에서 자원 삭제 후 배포시 K8S에서는 삭제되지 않으나, 해당 옵션을 선택하면 삭제시킴
FORCE : --force 옵션으로 리소스 삭제
APPLY ONLY : ArgoCD의 Pre/Post Hook은 사용 안함 (리소스만 배포)
DRY RUN : 테스트 배포 (배포에 에러가 있는지 한번 확인해 볼때 사용)
2-3. 배포 확인

배포중
ArgoCD Image Updater를 이용한 이미지 자동 배포
ArgoCD Image Updater를 사용해서 이미지 자동배포를 사용해야하는 이유
- 기존에는 Jenkins에서 컨테이너 빌드 후 k8s 배포용 YAML 파일의 이미지 태그를 직접 수정하고 Git에 반영해야 했음
- 이 작업은 수동 스크립트로 진행되거나 복잡한 로직(와일문 등)으로 파드 상태 확인 후 업데이트하는 방식이었음
- ArgoCD를 도입하면 GitOps 방식으로 리소스 스펙(YAML) 변경만 반영되면 자동으로 쿠버네티스에 배포됨
- 즉, 수동 배포 명령 없이도 Git에 반영된 내용을 자동으로 감지해서 배포
- 리소스 스펙 변경(ex. 디플로이먼트 설정, 레플리카 수, 볼륨 마운트 등) 시 유용함
- 그러나 앱 버전 업그레이드로 이미지가 바뀌는 경우는 처리 방식이 다름
- 기존에는 Jenkins에서 빌드한 후 도커 이미지를 올리고, 수동으로 YAML의 이미지 태그를 수정해야 했음
- 이 과정이 반복적이고 자동화되기 어려웠음
- 이 문제를 해결하기 위해 ArgoCD에 Image Updater를 도입하게 됨
- ArgoCD Image Updater는 도커 레지스트리를 지속적으로 모니터링하다가 이미지 태그가 새롭게 올라오면 자동으로 Git의 YAML 파일을 수정함
- 그 결과 ArgoCD가 변경사항을 감지하여 배포를 자동으로 수행
- Image Updater를 도입하면 다음과 같은 이점이 있음:
- Jenkins에서 이미지 빌드 및 업로드까지만 하면 이후 배포는 자동으로 진행됨
- 리소스 스펙 변경 없이 이미지 버전만 바꿔도 자동 배포 가능
- 배포 자동화 범위가 넓어져 전체 DevOps 파이프라인 효율이 증가함
- 주의사항
- Image Updater는 Helm 혹은 Kustomize로 배포하는 앱에 대해서만 작동함
- 사전에 도커 레지스트리 인증 정보, Git 저장소 정보 등을 설정해야 함
- 각 앱마다 어떤 방식으로 태그를 매칭할지 규칙(예: latest, semver 등)을 설정해줘야 함
Argo Rollouts를 이용한 배포 - Blue/Green, Canary
이건 아직까지 나에게 필요하지 않은 것 같아서 패스함..
출처
쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2 강의 | 일프로 - 인프런
일프로 | , ✅ 광범위한 쿠버네티스 기술을 A~Z까지 넓고 얇게 훑기보다 하나의 개념을 배우더라도 왜 사용하는지 부터 실무에서 어떻게 사용되는지 까지를 다루는 강의✅ 시작은 초급자지만강
www.inflearn.com
https://cafe.naver.com/kubeops/118
ArgoCD 빠르게 레벨업 하기 (1/3)
ArgoCD 아키텍쳐 ArgoCD 설치 및 배포 (kubectl, helm) ▶ Argo Site : https://argoproj.github.io/ ▶ Argo Githu...
cafe.naver.com
https://cafe.naver.com/kubeops/121
ArgoCD 빠르게 레벨업 하기 (2/3)
Argo Image Updater를 이용한 이미지 자동배포 4. Argo Image Updater 를 이용한 이미지 자동 배포 (helm) - 2232 ※ Helm과 Kust...
cafe.naver.com
https://cafe.naver.com/kubeops/125
ArgoCD 빠르게 레벨업 하기 (3/3)
5. Argo Rollouts를 이용한 Blue-Green 배포 - 2233 5-1. Argo Rollouts 설치 ▶ Jenkins > Dashboard > add-on >...
cafe.naver.com
- Total
- Today
- Yesterday
- Bash tab
- window
- claude
- Kotlin
- mybatis config
- Java
- jQuery
- k8s
- input
- config-location
- docker
- 오라클
- 북리뷰
- JavaScript
- Spring
- Spring Security
- maven
- springboot
- mybatis
- Linux
- localtime
- LocalDate
- LocalDateTime
- intellij
- 베리 심플
- rocky
- Mac
- oracle
- svn
- elasticsearch
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |