DevOps 데브옵스

Jay_u·2024년 7월 5일

데브옵스란

데브옵스는 소프트웨어의 개발과 운영의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의, 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다.

개발프로세스 v5
Developer -> Git -> CI -> CD -> Server -> Monitoring

왜 데브옵스를 도입하는가?'

서비스의 빠른 개발 & 배포가 중요하고 개선하고 싶다면 고민하자

자동화 (시간 절약 -> 효율이 증가한다)
측정 (로그를 남기고 부하를 체크하자)
공유 (해결한 내용을 글로 공유하고 설정을 공유하자)
축적 (패시브 스킬, 효율 증가)

서버 운영의 역사

  1. 서버 배포 문서화하기
    단점 : 문서의 정확성, 업데이트 여부

  2. CHEF, PUPPET, ANSIBLE과 같은 상태 관리 도구
    단점 : 러닝커브, 서버에 다른 버전 여러 개 설치시 막힘

  3. 가상화 (한 서버에 여러개 가상머신 설치)
    단점 : 처음부터 다시 세팅한다면? 서버 이미지 공유는?

  4. 클라우드
    하드웨어 파편화 문제 해결, 가상화된 환경만으로 아키텍처 구성 가능

  5. PaaS
    Vercel, Heroku, Netlify, AWS Elastic Beanstalk
    서버를 운영하는 것은 복잡하고 어렵다
    잘 구성해 놓은 곳에 소스 코드만으로 배포
    일반화된 프로비저닝 방법을 제공 *(프로비저닝이란 IT 인프라를 설정하는 프로세스이자, 데이터와 리소스에 대한 액세스를 관리하는 데 필요한 단계)

PaaS의 단점
애플리케이션을 PaaS 방식에 맞춰야함
서버에 대한 원격접속 불가능
서버에 파일 시스템 사용 불가
서버 패키지 설치 못함
로그 수집 제한적 허용

PaaS에서 할 수 있는 것
크론잡
데이터 분석(BigQuery, S3 연동)
로그분석(엘라스틱 서치)
애플리케이션 성능 모니터링
A/B 테스트, Canary 배포
네트워크, 스토리지 설정

도커 배포는 어떻게 할까?

일일이 켜줘야 한다고?
여유 서버는 어떻게 확인할지
롤아웃/롤백에 손이 많이 가네

서비스 검색 문제

프록시 -> LoadBalancer -> WAS

서비스 노출 문제(Gateway)
서비스 이상 부하 모니터링 문제

Containser Orchestration

복잡한 컨테이너 환경을 효과적으로 관리하기 위한 도구

  1. 클러스터
  2. 상태관리
  3. 배포관리(롤아웃 롤백 등)
  4. 서비스 등록 및 조회
  5. 볼륨 스토리지

쿠버네티스

컨테이너를 쉽고 빠르게 배포/확장하고 관리를 자동화해주는 오픈소스 플랫폼

배포 프로세스 고민

더 작은 단위로 자주 배포하자
소스를 푸시하면 자동으로 빌드하자
테스트 서버 수를 늘리자
배포 권한을 확대하자

code -> git -> event -> build Job(branch) -> Docker

cd에 경우
Deploy Job -> Deploy

브랜치마다 도커 이미지를 만들어서 바로 배포 가능한 도커 이미지를 항시 보유한다.
테스크, QA를 하기 위해서 여러 개의 서버 중 원하는 서버를 사용하고 완료되면 종료
누가 몇 번 서버에서 어떤 브랜치를 테스트 중인지 Jenkins에서 확인

테스트를 진행할 서버가 부족하다

테스트 서버를 만들기 위해 GitOps를 사용하자, ArgoCD를 사용하자

깃 브랜치 별 젠킨스가 빌드를 해준다.
도커이미지와 빌드설정파일이 깃옵스로 만들어진다.
ArgoCD가 도커이미지와 빌드설정파일을 기반으로 쿠버네티스에 테스트 서버를 생성해준다.

profile
정확한 정보를 전달할려고 노력합니다.

0개의 댓글