티스토리 뷰

728x90
SMALL

개요

앞서 살펴본 포스팅을 통해 Tekton에 대해 알아보았다. 사실 오픈소스의 시장 점유율이 높아짐에 따라 CNCF에 공개된 Cloud Native 소프트웨어들은 주목도가 높아지고 있는 것이 사실이다.

Tekton Previous Posting : Tekton Pipeline 작성

CNCF : https://landscape.cncf.io/

이와 같은 맥락으로 Continuous Develivery에 대해 관리하는 CDF라는 조직을 통해 현재 Tekton은 물론 CD 진영의 주요 활동에 대해 알아 볼 수 있다.

CDF : https://cd.foundation/

현재 CD Foundation Project로 등록되어 있는 오픈소스 소프트웨어는 Jenkins, Jenkins X, Spinnaker 그리고 Tekton 4개이다. Incubating 단계의 Project는 Screwdriver, Ortelius가 있다.

사실 앞서 많은 포스팅에서 Jenkins 플러그인 기반으로 대부분의 CD를 구현해 왔지만(일부 Spinnaker 활용에 대한 포스팅이 있긴 했음), Jenkins는 CD보다는 CI에 어울리는 도구로 CD에 특화된 Jenkins X, Spinnaker, Tekton에 대한 활용성을 높여가야 할 필요가 있다.

Tekton은 대표적인 CD 도구로 환영받고 있으며, 최근 OpenShift의 CD 도구로 정식 채택되기도 하였다. Tekton의 확장성과 높은 재활용성 그리고 무엇보다 안정적인 성능에 대해 높게 평가받고 있다는 의견이 지배적이다.

이번 포스팅에서는 Tekton에 대해 추가적으로 논의해보고, Tekton을 활용한 CI/CD를 설계해 보도록 하자.


Tekton 구조

앞선 포스팅에서도 살펴봤듯이 Tekton은 Step, Task, Pipeline으로 구성되어 있다. Step > Task(Steps) > Pipeline(Tasks)라고 표현할 수 있듯 각각의 하위 집합으로 표현될 수 있다.

Jenkins 포스팅에서는 다음과 같은 집합으로 설계를 진행했다.

Jenkins Previous Posting : Kubernetes Jenkins - 자동 배포환경 구성 (1/2)

Jenkins는 Step, Stage, Pipeline으로 구성되어 있다. Tekton과 마찬가지로 Step > Stage(Steps) > Pipeline(Stages)로 구성되어 있다. 구조 자체만 놓고 보았을때 Tekton과 Jenkins는 크게 차별점이 없다고 볼 수 있다. 다만, 재활용성 측면에서 Tekton의 강점을 확인할 수 있으며, 이는 클라우드 네이티브 진형에 어울리는 CD 도구임을 입증한다.

Tekton은 Task를 정의하고 이를 Pipeline에서 순서를 정하는 방식으로 활용하기 때문에 한번 정의한 Task는 또 다른 Pipeline에서 활용할 수 있다. 이와 반대로 Jenkins의 경우, Script 또는 Jenkinsfile에 정의하는 방식을 사용하기 때문에 모든 프로젝트 별로 빌드를 위한 파일이 존재해야 한다. 이는 TravisCD 역시 동일하다.(.travis.yml) 이로 인해 Stage의 내용이 중복되더라도 또 다시 복사하여 동일 내용을 정의해야 한다. 이는 사실 번거로움을 떠나, 마이크로서비스 아키텍처와 같이 확장되는 서비스 환경에서 특히 중요한 요소이다.

예를 들어, 100개의 마이크로서비스 환경에서 동일하게 사용하는 git clone이라는 동작에 대해 수정사항이 발생했을 경우를 생각해보자. Jenkins나 TravisCD의 경우 프로젝트 별로 생성되어 있는 배포 파일을 수정하여 각각 저장해 주어야 한다. 이는 단순작업을 떠나, 수동으로 동일한 작업을 반복적으로 수행함에 있어, 오류를 발생시킬 가능성이 높아지게 되고, 장애로 이어질 수 있는 포인트가 된다.

반대로 Tekton은 git clone이라는 동작을 하나의 Task로 정의하고 해당 Task를 재정의함으로써 반영의 효율성을 높일 수 있다. 이는 운영 유지보수 편의성은 물론 Task를 공통으로 정의함으로써 빌드/배포에 대한 표준화를 유도하고, 저장소 통합, 라이프사이클 관리 등을 중앙에서 통제할 수 있도록 관리함으로써, 높은 수준의 DevOps 조직을 구성하고자 하는 조직에 적합한 CD 도구라 할 수 있다.

다음은 Tekton을 활용한 Pipeline 아키텍처 예시이다. Tekton은 Task와 Pipeline을 Kubernetes 오브젝트로 관리하기 때문에 뛰어난 재사용성을 보장한다.

재사용성을 높이기 위해서는 다음과 같은 기준을 두고 설계하는 것이 효과적이다. 아래와 같이 정의할 경우 공통 요소에 대한 일괄 반영은 물론 각 서비스 별 특징을 살려 파이프라인을 설계할 수 있다.

a. Task에서는 모든 서비스에서 공통으로 사용하는 param을 정의한다.

b. Pipeline에서는 각 서비스 별로 정의하는 param을 정의한다.

위 5단계의 배포 과정에 정적분석, Code Inspector, Code Coverage, Image Scan, Health Checker, 승인 프로세스 등을 포함하여 확장된 아키텍처를 설계할 수 있다.

728x90
LIST
TAG
댓글
댓글쓰기 폼