AmberAx

Tekton: Kubernetes Native CI/CD

· 6 min read
Tekton: Kubernetes Native CI/CD

Kubernetes가 컨테이너 오케스트레이션의 표준으로 자리 잡으면서, 클라우드 네이티브 애플리케이션의 빌드, 테스트, 배포를 자동화하는 CI/CD 시스템의 중요성이 더욱 부각되고 있습니다.

이 글에서는 Kubernetes 환경에 최적화된 CI/CD 프레임워크인 Tekton을 심층적으로 분석하고, 기존 CI/CD 도구와의 차이점, 장단점, 활용 사례 등을 자세히 살펴보겠습니다.


Kubernetes CI/CD의 도전 과제 #

기존의 CI/CD 도구들은 대부분 VM 기반 환경에 맞춰 설계되었기 때문에, 컨테이너와 Kubernetes 환경에서는 몇 가지 문제점을 드러냅니다.

  • 리소스 관리의 비효율성: VM 기반 CI/CD 시스템은 컨테이너 빌드 및 실행을 위해 별도의 VM을 프로비저닝해야 하므로, 리소스 낭비가 발생하고 확장성이 제한적입니다.
  • Kubernetes와의 통합 부족: Kubernetes API와 직접 통합되지 않아, Kubernetes 리소스를 효율적으로 활용하기 어렵습니다.
  • 컨테이너 이미지 빌드 및 관리에 대한 최적화 부족: 컨테이너 이미지 레이어 캐싱, 병렬 빌드 등 컨테이너 특성에 맞는 최적화된 기능을 제공하지 못하는 경우가 많습니다.

Tekton: Kubernetes 네이티브 CI/CD #

Tekton은 이러한 문제점을 해결하기 위해 Kubernetes 위에서 작동하도록 설계된 오픈 소스 CI/CD 프레임워크입니다. Kubernetes의 Custom Resource Definitions (CRD)를 활용하여 파이프라인, 작업(Task), 단계(Step) 등을 정의하며, Kubernetes API 및 컨트롤러와 긴밀하게 통합됩니다.


Tekton의 주요 특징 및 장점 #

  • Kubernetes 네이티브: Tekton은 Kubernetes 클러스터 내에서 실행되므로, 별도의 CI/CD 서버를 관리할 필요가 없습니다. 이는 운영 오버헤드를 줄이고, Kubernetes 리소스를 효율적으로 활용하며, 높은 확장성을 제공합니다.
  • 모듈성과 재사용성: 작업을 독립적인 Task로 분리하여 파이프라인을 구성합니다. 이러한 Task는 재사용 가능하며, Tekton Hub를 통해 다른 사용자들이 만든 Task를 쉽게 찾아 사용할 수 있습니다.
  • 유연성과 확장성: 다양한 빌드 도구, 테스트 프레임워크, 배포 전략과 통합될 수 있도록 설계되었습니다. 필요에 따라 더 많은 리소스를 할당하여 파이프라인 실행 속도를 높일 수 있습니다.
  • 표준화와 이식성: YAML 파일을 사용하여 파이프라인을 정의하므로, 버전 관리 시스템에서 파이프라인 코드를 관리할 수 있습니다. 또한, 파이프라인은 Kubernetes 클러스터 간에 이식 가능합니다.
  • 분산 실행 및 병렬 처리: 파이프라인 내의 여러 작업을 병렬로 실행하여 전체 파이프라인 실행 시간을 단축할 수 있습니다.

Tekton의 주요 구성 요소 #

Tekton은 Kubernetes 기반의 강력하고 유연한 CI/CD 프레임워크로, 컨테이너 중심의 워크플로우를 정의하고 실행할 수 있도록 설계되었습니다. 아래는 Tekton의 주요 구성 요소와 그 역할에 대한 설명입니다.

Task

  • Task는 실행할 작업의 최소 단위입니다.
  • 컨테이너 이미지를 빌드하거나, 코드를 테스트하거나, 애플리케이션을 배포하는 등 다양한 작업을 Task로 정의할 수 있습니다.
  • 각 Task는 여러 Step으로 구성되며, 각 Step은 컨테이너로 실행됩니다.
  • YAML 파일로 정의되며, 예시는 다음과 같습니다:
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: example-task
spec:
  steps:
    - name: echo
      image: alpine
      script: |
        #!/bin/sh
        echo "Hello, Tekton!"        

Pipeline

  • Pipeline은 여러 Task를 연결하여 구성한 CI/CD 워크플로우입니다.
  • Task들의 실행 순서, 조건부 실행, 병렬 실행 등을 정의할 수 있습니다.
  • 복잡한 워크플로우를 구성하는 데 적합하며, YAML 파일로 정의됩니다.
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: example-pipeline
spec:
  tasks:
    - name: task1
      taskRef:
        name: example-task
    - name: task2
      runAfter:
        - task1
      taskRef:
        name: another-task

PipelineRun

  • PipelineRun은 Pipeline의 실행 인스턴스입니다.
  • Pipeline에 필요한 매개변수와 리소스를 지정하여 생성합니다.
  • PipelineRun을 생성하면 Tekton은 정의된 순서에 따라 Task들을 실행합니다.
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  name: example-pipelinerun
spec:
  pipelineRef:
    name: example-pipeline
  params:
    - name: parameter-name
      value: parameter-value

TaskRun

  • TaskRun은 Task의 실행 인스턴스입니다.
  • PipelineRun 없이 독립적으로 실행할 수도 있습니다.
  • Task의 실행 결과를 모니터링하고 디버깅하는 데 유용합니다.
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  name: example-taskrun
spec:
  taskRef:
    name: example-task

PipelineResource

  • PipelineResource는 Pipeline과 Task에서 사용하는 리소스를 정의합니다.
  • 예를 들어, Git 저장소, 컨테이너 이미지, 클라우드 스토리지 등이 포함됩니다.
  • Tekton의 최신 버전에서는 PipelineResource 대신 Custom Task 또는 Workspaces를 사용하는 것이 권장됩니다.
apiVersion: tekton.dev/v1alpha1
kind: PipelineResource
metadata:
  name: example-git-resource
spec:
  type: git
  params:
    - name: url
      value: https://github.com/example/repo.git

Trigger

  • Trigger는 특정 이벤트(예: Git push, webhook)가 발생했을 때 PipelineRun을 자동으로 생성하는 기능을 제공합니다.
  • GitHub Actions와 유사한 방식으로 동작하며, 이벤트 기반 CI/CD 워크플로우를 구축할 수 있습니다.
  • Tekton Trigger는 EventListener, TriggerBinding, TriggerTemplate으로 구성됩니다.
apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:
  name: example-listener
spec:
  triggers:
    - name: example-trigger
      bindings:
        - ref: example-binding
      template:
        ref: example-template
---
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerBinding
metadata:
  name: example-binding
spec:
  params:
    - name: git-repo-url
      value: "$(body.repository.url)"
---
apiVersion: triggers.tekton.dev/v1alpha1
kind: TriggerTemplate
metadata:
  name: example-template
spec:
  resourcetemplates:
    - apiVersion: tekton.dev/v1beta1
      kind: PipelineRun
      metadata:
        generateName: example-pipelinerun-
      spec:
        pipelineRef:
          name: example-pipeline

Tekton과 다른 CI/CD 도구의 비교 (GitHub Actions/GitLab CI, Jenkins) #

기능 GitHub Actions/GitLab CI Jenkins Tekton
실행 환경 호스팅된 서비스 (또는 자체 호스팅 가능) 자체 호스팅 Kubernetes 클러스터
주요 장점 사용 편의성, 쉬운 시작, 생태계 통합 오랜 역사와 풍부한 플러그인 Kubernetes 네이티브, 높은 유연성, 재사용성
주요 단점 Kubernetes 워크로드에 대한 제한적인 최적화 복잡한 설정 및 관리, 무거운 리소스 사용 상대적으로 학습 곡선이 높음
Kubernetes 통합 제한적 플러그인을 통해 부분적으로 가능 완전한 통합
컨테이너 최적화 상대적으로 낮음 플러그인을 통해 부분적으로 가능 높음
재사용성 워크플로우 재사용 가능 (제한적) Job/Pipeline 재사용 가능 (제한적) Task/Pipeline 재사용성 우수
클라우드/플랫폼 종속성 특정 플랫폼에 대한 종속성 발생 가능 자체 구축 시 독립적, 플러그인에 따라 종속성 발생 가능 플랫폼 독립적

Tekton의 활용 사례 #

  • 컨테이너 이미지 빌드 및 배포 자동화: 소스 코드 변경 시 자동으로 컨테이너 이미지를 빌드하고, 레지스트리에 푸시하며, Kubernetes 클러스터에 배포하는 파이프라인을 구축할 수 있습니다.
  • 마이크로서비스 배포: 여러 마이크로서비스의 빌드, 테스트, 배포를 자동화하는 복잡한 파이프라인을 구성할 수 있습니다.
  • GitOps 워크플로우 구축: Git 저장소를 중심으로 CI/CD 워크플로우를 관리하는 GitOps 환경에서 Tekton을 활용하여 자동화된 배포 파이프라인을 구축할 수 있습니다.
  • Jenkins X와의 통합: Jenkins X v3부터는 Tekton을 core pipeline engine으로 사용하여 Kubernetes 기반의 CI/CD 경험을 제공합니다.

결론 #

Tekton은 Kubernetes 환경에 최적화된 강력하고 유연한 CI/CD 프레임워크입니다. 컨테이너 기반 워크로드, 마이크로서비스 아키텍처, 클라우드 네이티브 애플리케이션의 CI/CD 파이프라인을 구축하려는 경우, Tekton은 기존의 CI/CD 도구들의 한계를 극복하고 효율적이고 안정적인 CI/CD 시스템을 구축할 수 있도록 지원합니다. 다만, 상대적으로 학습 곡선이 존재하므로, Tekton의 개념과 구성 요소들을 충분히 이해하고 사용하는 것이 중요합니다.

Did you find this post helpful?
Share it with others!