[구름 k8s] TIL 3-4-3

Peppie·2022년 10월 26일
0

1. CI/CD 개요 및 파이프라인

어플리케이션 개발 및 배포 과정

문제 선정

제공하려는 서비스에 대한 결정

문제 정의

제공하려는 서비스에 따른 기능 명세

설계

알고리즘 및 데이터베이스 설계, 화면 설계 (UI, User Interface)

구현

프로그래밍 언어를 이용하여 구현 (coding)

  • build : 구현된 프로그램을 바이너리 형태로 변경하는 과정
  • build tool : compiler, interpreter, linker, debugger

테스트

  • 단위 테스트 : 기능 (함수, function) 단위 테스트
  • 통합 테스트 : 전체 기능에 대한 테스트 (이때 문제 많이 발생)
  • 인수 테스트 : 문제 정의에 기반하여 최종 테스트

운영

유지보수 수행

  • 어플리케이션 버그 수정
  • 사용자 요구 사항 변화에 대한 반영

소프트웨어 개발 생명 주기

SDLC : Software Development LifeCycle

문제정의 -> 설계 -> 구현 -> 테스트 -> 유지보수

현재 어플리케이션 개발 과정은 협업에 의해 진행

여러 개발자에 의해 기능을 나누어서 개발

역할별 구분

  • PM : Project Manager
  • 분석가 : 문제 정의
  • 설계가 : 시스템 / 어플리케이션 설계
  • 프로그래머 (개발자) : 구현, 단위 테스트
  • 테스터 : 어플리케이션 테스트 및 통합 테스트
  • 유지 보수 담당자 : 유지 보수

협업시 문제

  • 공유 문제 : 결과물에 대한 공유
  • 프로그램 코드 통합시 많은 문제 발생

협업시 문제 해결 위한 공유 도구 사용

형상 관리 도구 (버전 관리 도구) : Git

개발자와 운영자간의 문제 - 시각차

  • 개발자 : 어플리케이션 개발에 대한 책임
  • 운영자 : 어플리케이션 배포 및 운영에 대한 책임
  • 개발자와 운영자 사이의 시각차에 따른 문제

시스템 구성

  • 개발 서버 (빌드 build 서버) : 개발자 사용, build 환경 구성
  • 배포 서버 (타겟 target 서버) : 어플리케이션 배포 및 배포 환경 구성
  • 운영 서버 : 운영 목적, 운영 환경 구성

CI

지속적 통합 (Continuous Integration)

  • 개발자를 위한 자동화 프로세스
  • 어플리케이션 코드 변경 사항이 정기적으로 빌드/테스트되어 공유 저장소 (Git)에 병합
    • 빌드 도구 : 프로그래밍 언어에 따라 결정
    • 테스트 도구 : 테스트 전용 도구
  • 여러 개발자가 동시에 어플리케이션 개발시 서로 충돌 가능한 문제 해결
  • 개발 서버 (빌드 서드) 환경에 구성

CD

타겟 서버에서 운영 서버로 어플리케이션 배포 자동화

지속적 서비스 제공 (Continuous Delivery)

  • 수동 배포
  • 개발자는 어플리케이션에 적용한 변경사항을 버그 테스트를 거쳐 공유 저장소에 자동 업로드
  • 운영자는 어플리케이션을 공유 저장소에서 운영 환경으로 배포

병목현상 가능성 있음

지속적인 배포 (Continuous Deployment)

  • 자동 배포
  • 개발자는 변경사항을 공유 저장소에 저장하면 자동으로 운영환경까지 자동으로 릴리즈되는 형태


=> CI/CD는 마이크로 서비스 아키텍처가 활성화되면서 강조/적용

CI/CD pipeline

CI/CD의 각 과정이 연계되는 구조

CI/CD 사용 도구

2. 쿠버네티스 CI/CD

GitOps 기반 지속적 배포

GitOps : Git (공유) + Operation (운영); 쿠버네티스를 활용하여 어플리케이션 관리를 수행하는 환경의 CI/CD 방법론

쿠버네티스 클러스터를 관리하고, 클러스터에 어플리케이션을 배포하는 방법론

GitOps 핵심

  • 어플리케이션 소스 (프로그램) 뿐만 아니라 배포 설정까지 Git 저장소를 통해 관리
  • Git 저장소에 선언적으로 기술된 Kubernetes manifest (YAML 형식)와 같은 파일 저장 및 이를 사용한 배포 진행 방식

GitOps를 적용한 쿠버네티스 CI/CD pipeline

개발자 Pipeline

  • 어플리케이션 코드를 Git 저장소에 저장
  • Git 저장소에 저장된 어플리케이션 코드를 배포 서버를 통해 배포 -> Jenkins (CI 도구)
    • 시스템 운영자 Pipeline의 Git 저장소에 정보 등록
  • 어플리케이션 코드는 컨테이너 이미지로 생성해서 레포지토리에 저장

시스템 운영자 Pipeline

  • Helm을 이용하여 패키지 구성 결과를 Git 저장소에 저장
  • Git 저장소의 내용을 실제 쿠버네티스 클러스터에 배포 -> Argo (CD 도구)

0개의 댓글