0부터 시작하는 TEKTON 공부 - TEKTON 이해하기

Jaehong Lee·2023년 4월 18일
2
post-thumbnail

1. TEKTON 기본 개념

TEKTON 이란

참조 : https://tekton.dev/docs/

TEKTON은 CI / CD 시스템을 만들 수 있는 쿠버네티스 기반 오픈소스 프레임워크이다. TEKTON의 구성 요소들은 쿠버네티스의 Custom Resource Definitions로 정의된다

  • 즉, 쿠버네티스 클러스터 리소스를 사용하여 CI / CD를 구성할 수 있는 클라우드 네이티브 오픈 소스이다. YAML 파일로 CI / CD 파이프라인을 작성할 수 있다
  • Custom Resource Definitions : 쿠버네티스에서 커스텀 리소스가 어떻게 구성되어 있는지 정의하는 오브젝트. 커스텀 리소스를 이용해 동작을 하려면, 커스텀 컨트롤러를 통해 API를 만들어야 한다
    • CR은 커스텀 리소스고, CRD는 커스텀 리소스를 ETCD에 등록하기 위한 것이다

TEKTON은 빌딩 블록 방식으로 독립된 다양한 컴포넌트를 기반으로 파이프 라인을 구현할 수 있다

  • 빌딩 블록 방식 : 하나의 시스템이나 소프트웨어를 설계하는 과정에서, 구성하는 각각의 구성 요소를 독립된 모듈로 구성하는 방법
  • 파이프 라인 : 데이터나 명령 처리를 여러 단계로 나누어, 단계별로 동시에 수행하여 병렬화를 시키는 것. 이를 통해 반복적인 프로세스를 자동화하여 시간을 절약할 수 있다
  • CI CD 파이프라인 : 새 버전의 소프트웨어나 애플리케이션을 제공하기 위해 수행해야 할 일련의 단계이다. 빌드 / 테스트 / 릴리스 / 배포 / 유효성 검사로 이루어져 있으며, 전체 프로세스를 자동화하므로 수동으로 작업하는 것보다 더 빠르고, 안정적이다

TEKTON 특징

  1. 모듈화를 통한 재사용 : 모듈화가 잘 되어있어 Pipeline에서 필요한 Task를 가져다 쓸 수 있다. 모든 Task들은 다른 Pipeline과 독립적으로 사용 가능하다 ( 빌딩 블록 방식 )

  2. 표준화 : Tekton은 쿠버네티스 CRD을 통해 정의된다

  3. 기능 확장성 : Tekton Catalog를 통해 다른 사용자들과 Task, Pipeline을 공유해서 사용할 수 있다

TEKTON의 단점

  • 관련 정보가 적다
  • 쿠버네티스 내부에서만 동작 가능하다
  • 외부 서비스에 접근하기 위해서는 자격 증명 설정이 필요하다

TEKTON 컴포넌트

  • Tekton Pipeline : Tekton의 핵심 컴포넌트로, 쿠버네티스 커스텀 리소스로 이루어져 쿠버네티스 오브젝트로 CI CD 파이프라인을 구성할 수 있다

  • Tekton DashBoard : Teckton Pipeline을 조작 및 확인할 수 있는 웹 기반 UI

  • Tekton Triggers : 이벤트에 기반해 파이프라인을 동작시킬 수 있는 컴포넌트

  • Tekton CLI : TKN이라 하는 CLI 기반 도구로, TKN을 통해 TEKTON 리소스와 상호작용 할 수 있다

  • Tekton Catatlog : Tekton 레포지토리로 다양한 Task, Pipeline ( Tekton 빌딩 블록 )을 공유할 수 있다

    • Tekton은 모듈화를 통한 재사용이 가능하므로, 다른 사람이 정의해둔 Task를 가져다가 사용할 수 있다
    • TKN 명령어를 통해 Tekton 빌딩 블록들을 받아서 사용할 수 있다
  • Tekton Hub : Tekton Catalog에 접근할 수 있는 WEB


TEKTON Trigger

참조 : https://gruuuuu.github.io/cloud/tekton-trigger/

TEKTON Trigger는 특정 이벤트를 web-hook으로 받아 등록된 Pipeline을 실행시켜 준다

  • 레포지토리에 소스 코드를 Pull 했을 때, 자동으로 파이프 라인이 실행되도록 하려면, TEKTON Trigger를 필수적으로 사용해야 한다

TEKTON Trigger 주요 요소

  • EventListener : 서비스를 노출시켜 HTTP 기반으로 동작하며, JSON payload로 EVENT를 받아 Trigger로 전달. Pod로 실행된다
  • Trigger : 전달된 이벤트를 검증 및 파싱하고, Trigger Binding과 Trigger Template을 연결. EventListener가 이벤트를 감지했을 때, 어떤 동작을 할 지 정의
  • Trigger Binding : EventListener로부터 받은 데이터를 Trigger Template의 파라미터와 매핑
  • Trigger Template : Trigger Binding, EventListener로부터 어떤 파라미터를 받을지, 어떤 Pipeline을 실행시킬지 정의

2. TEKTON 파이프 라인

TEKTON 파이프라인 구조

참조 : https://tekton.dev/docs/concepts/

  • TEKTON 파이프라인 구조는 위와 같다

  • Step을 통해 Task를 정의하고, Pipeline을 통해 Task의 순서를 정하는 방식이다

TEKTON 파이프 라인 구성 요소

  • Step : 하나의 작업 모듈. 하나의 Step은 쿠버네티스에서 하나의 컨테이너다

  • Task : 순서를 지닌 Step의 모음으로, 하나의 Pod로 동작

  • Taskrun : Task를 실행. Taskrun을 생성하면, Pod가 생성되어 로그를 통해 실행 결과를 조회할 수 있다. 단순 템플릿인 Task에 변수 값을 지정하고, 실행하는 것. 스케쥴링도 가능하다

    • 만약 PipelineRun을 사용한다면, Taskrun은 자동 생성되므로 따로 생성할 필요 없다
    • TaskRun은 Task를 오직 한 번 실행시킬 수 있다. 이미 실행한 TaskRun을 다시 실행할 수 없으며, Task를 다시 실행하고 싶으면, 새로운 TaskRun을 만들어야 한다
  • Pipeline : Task들의 모음. Task 별 순서나 실행 조건을 설정 가능. Task들을 DAG 형태로 구성해 실행한다

    • Directed Acyclic Graph : 방향성 비순환 그래프이다. 여러 Task 또는 동작의 흐름으로 방향성이 있지만, 순환이나 반복은 허용하지 않는다
  • PipelineRun : Pipeline을 실행. PipelineRun을 생성하면, 내부의 Task에 대한 Taskrun이 자동 생성된다 ( TaskRun Pod가 자동 배포된다 ). 단순 템플릿인 Pipeline에 변수 값을 지정하고, 실행하는 것. 스케쥴링도 가능하다

    • PipelineRun은 Pipeline을 오직 한 번 실행시킬 수 있다. 이미 실행한 PipelineRun을 다시 실행할 수 없으며, Pipeline을 다시 실행하고 싶으면, 새로운 PipelineRun을 만들어야 한다
  • PipelineResource : TaskRun과 PipelineRun이 참조하는 매개 변수 및 데이터를 미리 정의할 수 있는 리소스. GIT이나 DOCKER IMAGE와 같은 것들이 정의된다 ( 최신 버전에서는 삭제되었다 )

  • Workspace : Task들이 사용할 볼륨. 작업 실행 과정에서 데이터 저장 / 데이터 공유 / 사전에 생성한 데이터 사용이 필요한 경우 사용한다. EmptyDir을 사용하여 하나의 Task에게만 붙여줄 수 있으며, PVC를 사용하여 다수의 TASK가 공유할 수 있게 할 수 있다

    허나 pvc에서 AccessMode에 따라 다수의 Node에 대한 접근이 제한될텐데, 만약 RWO로 설정하면, TASK들이 서로 다른 노드에 배치될 경우, Workspace를 공유 못하지 않을까?

    • Tekton의 Affinity Assistants 기능을 통해 Pipeline 내 모든 Task들이 같은 Node에 배치되도록 할 수 있다
      • 실제로 Pipeline이 실행되면, affinity-assistant StatefulSet이 배포되어, Pipeline 내 모든 Task들에 대한 TaskRun Pod들이 같은 Node에 배치되도록 해준다
      • 해당 기능을 사용하면, 사용자가 PodTemplate을 정의하여 NodeSelector나 Tolerations를 설정했다고 하더라도, 해당 설정을 자동으로 바꿔준다
  • Parameter : Task에서 필요한 값들을 미리 변수로 정의한 후, Pipeline, TaskRun, PipelineRun 에서 값들을 입력 받을 수 있다


TEKTON이 사용하는 K8S 리소스

  • Secrets : GIT이나 DOCKER HUB 등 외부 서비스에 접속할 때 사용하는 인증 정보를 정의

  • ConfigMap : 쿠버네티스 클러스터에 접속할 때 필요한 Kubeconfig 값을 정의

  • ServiceAccount : Secrets와 연결하여 사용. Tekton 오브젝트 실행 간에 사용할 권한이나 인증정보를 RBAC와 Secrets를 통해 할당 받는다

  • PVC : Workspace를 위한 볼륨 정의

profile
멋진 엔지니어가 될 때까지

0개의 댓글