티스토리 뷰

728x90
반응형

✅ 아래 글의 내용 및 이미지는 인프런 "쿠버네티스 어나더 클래스 (지상편) - 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

https://kubernetes.io/ko/docs/tasks/administer-cluster/use-cascading-deletion/#set-orphan-deletion-policy

 

▶ 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

이건 아직까지 나에게 필요하지 않은 것 같아서 패스함..

 

 

 

 

 

출처

https://inf.run/Wcast

 

쿠버네티스 어나더 클래스 (지상편) - 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

 

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/07   »
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
글 보관함
반응형
250x250