티스토리 뷰
유연하고 안전하게 배포 Pipeline 운영하기
Pipeline
반복하는 일을 자동화하는 시스템
- 서비스 빌드, 배포
- 라이브러리 업로드
- 작업 자동화
이 외에도 여러 운영 작업을 자동화하는 데에도 많이 활용 된다.
토스 뱅크의 Devops
토스 뱅크의 Devops는 Server Platform Team에 속해있다.
위 팀은 생산성, 안정성, 보안, Compliance, 서비스, 라이브러리 구현, 서비스 플랫폼 운영하는 팀
팀의 관점에서 Pipeline이란 아래와 같은 목표를 달성해야 한다.
- 생산성 : Pipeline을 빠르게 만들고 수정한다.
- 안정성 : Pipeline이 예상한대로 동작한다.
- 보안, Compliance : 모든 Pipeline에서 반드시 지켜야하는 요건이 있다.
Complicance : 금융권 회사들이 지켜야하는 전자금융감독규정 따위
이러한 속성들을 최대한 달성하기 위해서 Pipeline을 중앙화하고, Devops Engineer가 주도적으로 운영하고 있다.
토스뱅크에서는 Pipeline 도구로 GoCD를 사용하고 있다.
GoCD는 정의된 Pipeline에 따라 서버가 에이전트에게 작업을 할당하여 실행하는 구조이다.
웹 UI로서 작업을 정의하는 것은 여러 애로사항이 존재한다.
가시성
- 문제점
- 수백개의 Pipeline을 직관적으로 파악하기 힘들다.
- 파이프라인의 모든 단계를 직관적으로 확인하기 힘들다.
- 형상 관리가 힘들다.
- 해결 - Pipeline as Code
- Pipleline을 코드로 표현하여 Git에 저장한다.
- gocd-yaml-config-plugin
생산성
- 문제점
- 토스 뱅크의 Pipeline은 1년에 2배씩 증가해왔다.
- 빠르고 정확하게 Pipeline을 만들 수 있어야 한다.
- 기술 스택과 구조가 비슷해 대부분 복붙하는 경우가 많다.
- 공통 변경 사항이 있을 때 수정이 힘들다.
- 해결 - GoCD Template
- Pipeline 동작을 추상화해 Template으로 만들고 공유한다.
- 공통 설정을 Template화하고, 변수화하여 다양하게 커스텀이 가능하다.
확장성
- 문제점
- 변경에 유연하게 대처할 수 있는 것, Pipeline에도 필요하다.
- Pipeline 설정은 Git, Template 설정은 Web UI에서 봐야해서 불편하다.
- Template 수정에 따른 변경 사항이 너무 크다.
- 해결 - Helm Template
- 공통적인 부분을 Template으로 만들고, Values를 통해 렌더링한다.
- 조건문, 반복문 등을 사용하여 까다로운 분기를 처리할 수 있다.
- 조건문을 통해 Template 변경을 일부 Pipeline에서만 테스트할 수 있다.
복잡성
- 문제점
- 시간이 지나며 Template은 점점 복잡해졌다. (5개 타입, 72개 설정, 1182 라인 수)
- Template이 복잡해질수록 휴먼 에러의 여지가 크다. Helm Template 문법은 직관적이지도 않음
- 해결 - CI 도입
- Template 수정을 dev 브랜치에서만 수행하고, CI Test를 통과해야만 master로 머지 가능
- Github Actions 사용
- dev에 push 되면, 모든 Pipeline을 렌더링해본다.
- 원하는 동작이 맞는지 확인해본다.
- K8S Object Template에도 적용시킬 수 있다.
마무리
이러한 일련의 작업은 Pipeline as Code를 지원하는 모든 도구에서 활용할 수 있다.
Jenkins
, GitHub Actions
, Spinnaker
...
Pipeline as Code =~ Version-controlled Pipeline # PaC는 형상 관리가 가능한 Pipeline
+ Helm Template = Programmable Pipeline # Programmable한 특징을 더해주는 Helm
+ CI = Testable Pipeline # Testable까지 더한다면, 유연하고 안전한 Pipeline 운영이 가능하다.
'웨비나' 카테고리의 다른 글
[Toss Slash 23] 분산 추적 체계 & 로그 중심으로 Observability 확보하기 (0) | 2023.07.14 |
---|---|
[Toss Slash 23] Istio Zero Trust (2) | 2023.07.11 |
[if kakao 2022] 도커 없이 컨테이너 만들기 (1) | 2023.05.16 |
Toss Slash 22 요약 (0) | 2023.02.22 |
[if kakao2022]Openstack을 쿠버네티스 네이티브하게 운영하는 방법 (0) | 2023.02.14 |
댓글