2. tekton
- 1 1. Tekton 개요
- 1.1 Tekton이란
- 1.2 Tekton 특징
- 1.3 Tekton Architecture
- 1.4 Tekton CLI
- 1.5 Tekton trigger
- 2 2. Tekton 사용
- 2.1 Web UI
- 2.2 Task
- 2.3 Pipeline
- 2.4 Tekton Trigger
- 3 3. 기술자료
- 4 4. 릴리즈 노트
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 결과를 확인합니다.