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 이미지 업로드동작 확인
실험 설정:
Docker 이미지 빌드 이후 run
Docker 계정 로그
이미지 빌드 이후에 이미지 업로드
실험 결과:
이미지 업로드 확인
4. Jenkins 기본 설정
A. [이론] Jenkins 소개
CI 와 CD를 위한 툴로 다음과 같은 워크플로를 가집니다.
최신 코드 가져오기
테스트 실행
애플리케이션 빌드
프로덕션 환경에 배포
다양한 Plugins과 연동
Build Plugins: mvn, gradle
VCS Plugins: git
B. [실습] Jenkins 설정/Tools 설정
목적: Jenkins 설치 및 설정 해보기
실험 설정:
Jenkins 설치 및 초기 설정
실험 결과:
젠킨스 설치 완료
jvm 설정 완료
C. [실습] Jenkins 작업 생성
목적: Jenkins 작업 생성해보기
실험 설정:
Jenkins item 만들기
Docker 에 대한 jenkins 권한 부여하기
실험 결과:
jenkins console output 확인
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. [실습] 파이프 라인 생성
목적: 파이프라인을 구성해서 실행해보기
실험 설정:
선언형 파이프라인 생성
다음과 같이 compile 단계 -> Junit 단계 -> deploy 이후에 스텝을 post로 지정할 수 있습니다.
git에서 파이프라인 스크립트를 가져오기
실험 결과:
파이프 라인 스크립트를 git에서 가져올 때 정상 동작하는지 확인
B. [실습] Secret Text
목적: CI Secret 들을 기입하기
실험 설정:
SECRET TEXT 설정
credential 사용한 script 설정
실험 결과:
흠... pipeline stage view가 없어서 그런건지 몰라도 해당 값이 노출이 되지 않는다.
여기는 한번더 해봐야겠다.
B. [실습] Secret Files
목적: CI 중 비밀 파일들을 기입하기
실험 설정:
SECRET FILE 업로드
실험 결과:
6. Jenkins with K8S
A. [실습] Jenkins CD로 K8S 배포
목적: JENKINS로 디플로이먼트/서비스 배포해보기
실험 설정:
jenkins에서 aws 사용을 위한 설정 및 k8s 설정
aws 설정
jenkins 설정
서비스 스크립트를 생성 및 jenkins 계정으로 docker login 및 aws login
실험 결과:
서비스 생성 확인
7. ARGO CD
A. [이론] ArgoCD 소개
ArgoCD는 Kubernetes를 위한 CD 툴로 Jenkins의 CI가 완료된 이후에 배포에 대한 설정을 할 수 있습니다.
소스에 변경에 대해서 Sync를 함으로써 Argo Workflow나 Event 들을 수신해서 복잡한 작업을 진행할 수 있다.
여기서 생기는 질문은 `Jenkins에서 k8s 다 배포까지 되는데 굳이 왜?` 라고 할 수 있다.
CI와 CD를 분리 함으로써 CI에서 생기는 장애 사항에도 불구하고 CD는 분리할 수 있다.
또한, k8s의 CD에 대해서 시각화 라던지 편리 기능들을 ArgoCD에서 많이 지원을 하게 된다.
복잡한 배포 로직이라던지 빠른 장애 대응도 가능해 보인다.
헬스체크, 상태 확인등도 시각화로 잘 보이니깐 k8s 배포에 특수화 된 툴이라고 생각하면된다.
B. [실습] Directory로 배포
목적: git으로 배포이후에 sync로 반영되는지 확인
실험 설정:
ArgoCD 서비스 배포 확인
git에서 소스 수정
argo cd 에서 소스 수실험
결과:
나의 git에 있는 소스에 따른 yaml 값으로 배포 생성
싱크를 클릭했을때 소스에서 값을 가져와 갱신 하는 것을 확인
8. ARGO Rollouts
A. [이론] ArgoCD Rollouts 소개
Argo Rollout
k8s에는 RollingUpdate 전략으로 배포를 할 수 있는데 전문 CD 툴이 아니라서 제한이 있다.
이에 따라, ARGO에서는 복잡한 Blue Green 배포나 Canary 배포나 배포중 상태 및 세부 동작 조정을 위해서 사용된다.
하지만 이를 위해 다른 구성요소와 동일하게 Rollout Controller로 배포가 되고 해당 부분들을 설정하게 된다.
해당 방법이 블루 그린 배포 방법이다.
해당 방법은 canary 배포 방법이다.
ArgoCD로 언제든지 빠르게 모니터링하다가 롤백이 가능하다.
B. [실습] Rollout으로 배포
목적: Canary 배포 방법 사용해서 진행해보기
실험 설정:
롤아웃 컨트롤러 설치
실험 결과:
UI에서 CANARY 배포 하는것을 확인
이미지 변경 후에 PROMOTE로 카나리 배포 확인
Last updated