Document toolboxDocument toolbox

2. tekton


1. Tekton 개요

Tekton이란

Tekton은 CI/CD Pipeline을 작성할 수 있는 오픈소스 프로젝트입니다.
Tekton은 기본적으로 yaml 형태로 구성 하므로 다른 kubernetes CI/CD 툴과도 연동 및 변환이 가능합니다.

Tekton 특징

  • 자동화: 자동화된 프로세스는 일관성을 보장하고 오류를 줄여줌

  • 재사용: Tekton의 task는 독립적이어서 여러 Pipeline에서 필요한 task를 선택적으로 사용이 가능

  • 표준화: kubernetes의 custom resource를 통해 정의

  • 확장성: Tekton hub를 통해 Tekton 커뮤니티에서 작성한 여러 task를 사용할 수 있음

Tekton Architecture

Pipeline은 task들의 모음입니다. Pipeline 내에 task들은 순차적으로 실행되게 됩니다.
task의 RunAfter구문을 통해 이전 task가 끝난 뒤 다음 task가 실행되게 할 수 있습니다.

  • Task : 실제 수행을 정의하는 리소스 타입으로 여러 step을 정의

  • ClusterTask: 단일 네임스페이스 단위가 아닌 전체 클러스터로 범위가 지정된 Task
    ( v0.41 부터는 cluster resolver로 대체 )

  • Pipeline: Task의 실행 순서를 정의하는 리소스 타입

  • Taskrun: Task를 실행하는 리소스 타입

  • PipelineRun: Pipeline을 실행하는 리소스 타입

  • Pipeline Resource: TaskRun, PipelineRun에서 참조하는 리소스 타입 ( 예:  git, docker image 등 )

Tekton CLI

Tekton CLI는 Tekton 컴포넌트들을 쉽게 볼 수 있게 해주는 역할을 합니다.
기본적으로 kubectl 명령어로 사용이 가능하나 tkn 명령어를 통해 편리성을 제공합니다.

Tekton trigger

Tekton Trigger는 특정 이벤트를 webhook으로 받아 pipeline을 실행시키는 역할을 합니다.

Tekton trigger architecture

  • EventListener: Pod으로 실행되며, 서비스를 노출시켜 HTTP기반의 event를 받아 Trigger로 전달

  • Trigger: 전달된 이벤트에 대한 검증, 파싱 로직을 실행시킨 뒤 Trigger Template과 Trigger Binding을 연결

  • Trigger Binding: EventListener로부터 받은 데이터를 Trigger Template의 파라미터와 매핑

  • Trigger Template: Trigger Binding/EventListener 로부터 어떤 파라미터를 받을건지, 어떤 Pipeline을 실행시킬건지 정의

2. Tekton 사용

Web UI

Tekton은 로그인 없이 사용이 가능하나, KeyCloak 등이 연동되어 있는 경우 OIDC PROVIDER를 통해 로그인 기능을 추가할 수 있습니다. (ex. URL: https://Tekton.k8s.test.playce.cloud )

  • Tekton 메인 화면

Task

Task 생성하기

$ vi task-hello.yaml apiVersion: Tekton.dev/v1beta1 kind: Task metadata: name: hello spec: steps: - name: hello image: ubuntu command: - echo args: - "Hello World!"

Task 배포하기

  • task를 kubernetes 클러스터에 배포합니다.

$ kubectl apply -f task-hello.yaml
  • 배포된 task를 확인합니다.

$ kubectl get task NAME AGE hello 4s

Task 실행하기

tkn 또는 kubectl 명령을 이용하여 task를 실행할 수 있습니다.

  • tkn 사용하여 실행하기

  • kubectl로 실행하기(taskrun)

실행된 Task 확인하기

Task 로그 확인하기

  • 옵션

    • --last: 가장 최근에 실행한 로그를 출력

    • -f: 로그가 끊어지지 않고 계속적으로 출력

Pipeline

Task 생성하기

Pipeline 생성하기

  • 위의 예제에서 생성한 2개의 task를 사용하여 Pipeline을 생성합니다.

  • taskref: 클러스터에 배포된 task를 참조하는 경우 사용합니다.

  • runAfter: 이전 task 작업이 완료된 후 실행되어 질때, 이전 task명을 명시합니다.

Pipeline 배포하기

  • Pipeline을 kubernetes 클러스터에 배포합니다.

  • 배포된 Pipeline을 확인합니다.

  • 대시보드로 확인하기

메인화면에서 Tekton resources-Pipelines를 클릭합니다.

Pipeline 실행하기

  • tkn 사용하여 실행하기

  • kubectl로 실행하기(pipelinerun)

Pipeline 결과 확인하기

  • 로그 확인하기

  • 대시보드로 확인하기

메인화면에서 Tekton resources-PipelineRuns를 클릭합니다.
Pipeline 실행 결과가 리스트로 표시됩니다.

  • 해당 항목을 클릭하여 상세 로그를 확인할 수 있습니다.

Tekton Trigger

Prerequisites

  • Kubernetes v1.16 이상에서 동작합니다.

  • 현재 유저가 Cluster-admin 권한을 소유하고 있어야 합니다.

  • Tekton Pipeline이 설치되어 있어야 합니다.

  • Trigger가 실행할 Pipeline이 등록되어 있어야 합니다.

Trigger Binding 생성

  • Trigger Binding에서는 이벤트로부터 어떤 파라미터를 받아서 넘겨줄지 정의합니다.
    Pipeline에서 필요한 정보와 이벤트에서 넘겨준 파라미터를 매칭하는 작업을 수행합니다.

Trigger Template 생성

  • Pipeline 실행 시 필요한 파라미터 정보와 어떤 Pipeline을 실행할 지를 정의합니다.

  • Trigger Binding에서 파라미터를 받아올때에는 $(tt.params.{name})형식을 사용하면 됩니다.

Pipeline 수정하기

  • Trigger Template에서 받은 파라미터를 Pipeline에 적용하도록 Pipeline 및 task를 수정합니다.

  • Pipeline spec에 params을 추가합니다.

 

EventListener 생성

  • EventListener는 실제 Pod으로 동작하며 Event를 받아주는 역할을 합니다.

  • 연결할 Trigger Template과 Binding을 명시하여 EventListener를 생성합니다.

Service Account 생성

  • Trigger가 실행될 때 이벤트를 받아 Trigger Template과 Trigger Binding을 참조하여 Pipeline을 실행하기 위해 권한 설정이 필요합니다.

  • 권한 설정을 위한 Service Account를 생성합니다.

Role & RoleBinding 생성

  • 위에서 생성된 계정에 권한을 부여합니다. 부여되는 권한은 Tekton trigger를 설치할 때 설정된 권한입니다.

EventListener 설치 확인

Ingress 생성

  • eventlistener 서비와 연결할 ingress를 생성하여 외부로 서비스를 노출합니다.

  • ingress 배포 확인

trigger test

  • curl로 ingress로 이벤트를 전송하여 Pipeline이 실행 되는지 확인합니다.

  • 대시보드에서 Pipeline 결과를 확인합니다.

3. 기술자료

4. 릴리즈 노트