7주차 - CI/CD - Argo CD, Argo rollouts, Flux

0. 도입

  • 도커로 이미지를 생성해서 이미지 저장소에 PUSH해본다.

  • Jenkins Tools 설정해서 Docker 이미지로 Build해본다.

  • Trigger로 Jenkins 빌드를 실행해본다.

  • Pipeline을 생성해서 파이프라인 단계마다 특정 태스크를 실행해본다.

  • Jenkins로 k8s로 배포를 해본다.

  • Argo로 k8s 대상으로 배포해본다.

  • Argo Rollouts으로 배포해본다.

  • 다음주가 마지막 스터디인데 너무나 많은것들을 배우고 있어서 이 스터디가 너무 그리울것같다.

  • @Cloudnet 팀 감사합니다!

1. 선수지식

  • Docker 기본 사용법

  • Jenkins 기본 사용법

  • K8S

2. 실습 환경 배포

  • CD를 할 수 있는 K8S가 필요

  • 중심이 되는 자원은 CI 와 CD로 Jenkins와 ArgoCD를 집중하면 된다.

  • EKS 배포 확인 및

  • GRAFANA, 프로메테우스 까지 배포 확인

3. Docker

A. [실습] Docker 이미지 생성하고 저장소로 push

목적: 간단한 docker 이미지 업로드동작 확인

실험 설정:

  1. Docker 이미지 빌드 이후 run

  2. Docker 계정 로그

  3. 이미지 빌드 이후에 이미지 업로드

실험 결과:

  1. 이미지 업로드 확인

4. Jenkins 기본 설정

A. [이론] Jenkins 소개

  • CI 와 CD를 위한 툴로 다음과 같은 워크플로를 가집니다.

    • 최신 코드 가져오기

    • 테스트 실행

    • 애플리케이션 빌드

    • 프로덕션 환경에 배포

  • 다양한 Plugins과 연동

    • Build Plugins: mvn, gradle

    • VCS Plugins: git

B. [실습] Jenkins 설정/Tools 설정

목적: Jenkins 설치 및 설정 해보기

실험 설정:

  1. Jenkins 설치 및 초기 설정

실험 결과:

  1. 젠킨스 설치 완료

  2. jvm 설정 완료

C. [실습] Jenkins 작업 생성

목적: Jenkins 작업 생성해보기

실험 설정:

  1. Jenkins item 만들기

  1. Docker 에 대한 jenkins 권한 부여하기

실험 결과:

  1. jenkins console output 확인

  1. Docker 이미지 빌드시에 정상적 기능 확인

5. Jenkins 파이프라인/CD

A. [이론] Jenkins Job/파이프라인 소개

  • Job의 구성 요소

    • Trigger (수행시점)

      • Task 가 언제 시작될지 명시

    • Built Step (작업을 구성하는 단계별 태스크)

      • 태스크들을단계별 STEP으로 구성

    • 태스크 완료후 수행할 명령 POST-BUILD ACTION

      • 작업의 결과를 처리하는 과정 (알림, 복사, CD)

  • 파이프라인은 전체 빌드 프로세스를 정의하는 코드

    • 노드란: 파이프라인을 실행하는 시스템

    • 스테이지: 특정 단계에서 수행되는 작업들

    • 스텝: 파이프 라인 특정 단계의 작업

  • 파이프라인 코드 생성 3가지 방법

    • jenkins UI에 Script 생성

    • SCM에 Jenkinsfile 생성해서 보관하고 빌드시작시 해당 jenkins 파일 실행

    • Blue Ocean UI 에서 파이프라인을 구성하면 Jenkins가 자동 생성해서 실행하는 방식

  • 파이프라인은

    • 선언형 파이프라인(jenkins 추천)

    • 스크립트형 파이프라인

B. [실습] 파이프 라인 생성

목적: 파이프라인을 구성해서 실행해보기

실험 설정:

  1. 선언형 파이프라인 생성

    1. 다음과 같이 compile 단계 -> Junit 단계 -> deploy 이후에 스텝을 post로 지정할 수 있습니다.

  1. git에서 파이프라인 스크립트를 가져오기

실험 결과:

  1. 파이프 라인 스크립트를 git에서 가져올 때 정상 동작하는지 확인

B. [실습] Secret Text

목적: CI Secret 들을 기입하기

실험 설정:

  1. SECRET TEXT 설정

  1. credential 사용한 script 설정

실험 결과:

  • 흠... pipeline stage view가 없어서 그런건지 몰라도 해당 값이 노출이 되지 않는다.

  • 여기는 한번더 해봐야겠다.

B. [실습] Secret Files

목적: CI 중 비밀 파일들을 기입하기

실험 설정:

  1. SECRET FILE 업로드

실험 결과:

6. Jenkins with K8S

A. [실습] Jenkins CD로 K8S 배포

목적: JENKINS로 디플로이먼트/서비스 배포해보기

실험 설정:

  1. jenkins에서 aws 사용을 위한 설정 및 k8s 설정

    1. aws 설정

    2. jenkins 설정

  1. 서비스 스크립트를 생성 및 jenkins 계정으로 docker login 및 aws login

실험 결과:

  1. 서비스 생성 확인

7. ARGO CD

A. [이론] ArgoCD 소개

  • ArgoCD는 Kubernetes를 위한 CD 툴로 Jenkins의 CI가 완료된 이후에 배포에 대한 설정을 할 수 있습니다.

  • 소스에 변경에 대해서 Sync를 함으로써 Argo Workflow나 Event 들을 수신해서 복잡한 작업을 진행할 수 있다.

여기서 생기는 질문은 `Jenkins에서 k8s 다 배포까지 되는데 굳이 왜?` 라고 할 수 있다.

  1. CI와 CD를 분리 함으로써 CI에서 생기는 장애 사항에도 불구하고 CD는 분리할 수 있다.

  2. 또한, k8s의 CD에 대해서 시각화 라던지 편리 기능들을 ArgoCD에서 많이 지원을 하게 된다.

  3. 복잡한 배포 로직이라던지 빠른 장애 대응도 가능해 보인다.

  4. 헬스체크, 상태 확인등도 시각화로 잘 보이니깐 k8s 배포에 특수화 된 툴이라고 생각하면된다.

B. [실습] Directory로 배포

목적: git으로 배포이후에 sync로 반영되는지 확인

실험 설정:

  1. ArgoCD 서비스 배포 확인

  2. git에서 소스 수정

  3. argo cd 에서 소스 수실험

결과:

  1. 나의 git에 있는 소스에 따른 yaml 값으로 배포 생성

  1. 싱크를 클릭했을때 소스에서 값을 가져와 갱신 하는 것을 확인

8. ARGO Rollouts

A. [이론] ArgoCD Rollouts 소개

  1. Argo Rollout

    1. k8s에는 RollingUpdate 전략으로 배포를 할 수 있는데 전문 CD 툴이 아니라서 제한이 있다.

    2. 이에 따라, ARGO에서는 복잡한 Blue Green 배포나 Canary 배포나 배포중 상태 및 세부 동작 조정을 위해서 사용된다.

    3. 하지만 이를 위해 다른 구성요소와 동일하게 Rollout Controller로 배포가 되고 해당 부분들을 설정하게 된다.

  • 해당 방법이 블루 그린 배포 방법이다.

  • 해당 방법은 canary 배포 방법이다.

  • ArgoCD로 언제든지 빠르게 모니터링하다가 롤백이 가능하다.

B. [실습] Rollout으로 배포

목적: Canary 배포 방법 사용해서 진행해보기

실험 설정:

  1. 롤아웃 컨트롤러 설치

실험 결과:

  1. UI에서 CANARY 배포 하는것을 확인

  1. 이미지 변경 후에 PROMOTE로 카나리 배포 확인

Last updated