Ssoon

Cloud Native CI/CD : 6.1 Install Tekton 본문

CICD Study [1기]

Cloud Native CI/CD : 6.1 Install Tekton

구구달스 2025. 10. 19. 14:49

 

⚙️ Tekton 설치로 시작하는 Cloud Native CI/CD

  • Kubernetes 환경에서 Cloud Native CI/CD를 구현하고 싶다면 Tekton은 가장 대표적인 솔루션입니다.
    Tekton은 Kubernetes 네이티브 CI/CD 시스템으로, 모든 파이프라인 구성 요소가 Kubernetes Custom Resource (CRD) 로 관리됩니다.
    즉, Tekton은 Kubernetes 위에 설치되어 완전하게 클라우드 네이티브 방식의 빌드·배포 자동화를 제공합니다.

"Tekton은 Kubernetes 환경에서 CI/CD를 네이티브하게 구현할 수 있는 강력한 도구입니다."


🧩 Tekton의 주요 구성 요소

  • Tekton은 여러 개의 모듈형 컴포넌트로 구성되어 있으며, 각각 독립적으로 설치할 수 있습니다.
    각 구성 요소는 아래와 같은 역할을 합니다.

🧱 Task

  • Task는 재사용 가능한 단위 작업입니다.
  • 여러 개의 step(컨테이너 단위 명령어)로 이루어지며, 각 Task는 Kubernetes Pod로 실행됩니다.
  • 예를 들어, “이미지 빌드”, “테스트 실행” 등의 개별 작업이 각각 하나의 Task가 됩니다.

"Task는 CI/CD 파이프라인의 기본 실행 단위입니다."


🔗 Pipeline

  • Pipeline은 여러 Task를 순서대로 실행하기 위한 정의입니다.
  • 각 Task 간의 의존성을 정의할 수 있어, 복잡한 빌드·배포 흐름을 표현할 수 있습니다.

"Pipeline은 여러 Task를 연결해 전체 빌드 흐름을 구성합니다."


▶️ TaskRun

  • TaskRun은 Task의 실제 실행 인스턴스입니다.
  • 각 TaskRun은 실행 결과와 상태를 기록합니다.

"TaskRun은 Task의 실행과 결과를 나타냅니다."


🚀 PipelineRun

  • PipelineRun은 Pipeline의 실행 인스턴스입니다.
  • 내부적으로 여러 개의 TaskRun을 포함하며, 전체 파이프라인 실행의 상태를 추적합니다.

"PipelineRun은 Pipeline 실행의 전체 결과를 관리합니다."


⚡ Trigger

  • Trigger는 외부 이벤트를 감지해 특정 PipelineRun을 자동으로 실행시킵니다.
  • 예를 들어, GitHub push 이벤트 발생 시 자동 빌드를 수행할 수 있습니다.

"Trigger는 이벤트 기반으로 파이프라인을 자동 실행시킵니다."



🧰 Tekton 설치를 위한 준비

Tekton을 설치하기 위해 필요한 것은 단 두 가지입니다.

  1. kubectl CLI
  2. Kubernetes 클러스터 (예: Minikube)

Tekton은 여러 컴포넌트로 나누어져 있으며, 개별 설치 또는 Operator를 통한 전체 설치가 가능합니다.


Tekton의 주요 설치 컴포넌트

컴포넌트 설명

Tekton Pipelines Task 및 Pipeline 관리
Tekton Triggers 이벤트 기반 Trigger 및 EventListener 관리
Tekton Dashboard 웹 UI 대시보드로 Pipeline과 로그 시각화
Tekton CLI (tkn) Tekton 리소스를 CLI로 관리 (실행, 중지, 로그 확인 등)

"Tekton은 모듈형 구조이므로, 필요에 따라 선택적으로 설치할 수 있습니다."


🏗️ Tekton Pipelines 설치

  • 먼저 Tekton의 핵심 구성요소인 Pipelines를 설치합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
namespace/tekton-pipelines created
clusterrole.rbac.authorization.k8s.io/tekton-pipelines-controller-cluster-access created
clusterrole.rbac.authorization.k8s.io/tekton-pipelines-controller-tenant-access created
clusterrole.rbac.authorization.k8s.io/tekton-pipelines-webhook-cluster-access created
clusterrole.rbac.authorization.k8s.io/tekton-events-controller-cluster-access created
role.rbac.authorization.k8s.io/tekton-pipelines-controller created
role.rbac.authorization.k8s.io/tekton-pipelines-webhook created
role.rbac.authorization.k8s.io/tekton-pipelines-events-controller created
role.rbac.authorization.k8s.io/tekton-pipelines-leader-election created
role.rbac.authorization.k8s.io/tekton-pipelines-info created
serviceaccount/tekton-pipelines-controller created
serviceaccount/tekton-pipelines-webhook created
serviceaccount/tekton-events-controller created
...
  • 이 명령을 실행하면 Kubernetes에 tekton-pipelines라는 새로운 네임스페이스가 생성되며,
    CRD, ServiceAccount, Role, Deployment 등 Tekton 관련 리소스가 자동으로 구성됩니다.
  • 설치가 완료되면 다음 명령으로 상태를 확인할 수 있습니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl get crd
NAME                                       CREATED AT
customruns.tekton.dev                      2025-10-25T07:47:26Z
pipelineruns.tekton.dev                    2025-10-25T07:47:26Z
pipelines.tekton.dev                       2025-10-25T07:47:26Z
resolutionrequests.resolution.tekton.dev   2025-10-25T07:47:26Z
stepactions.tekton.dev                     2025-10-25T07:47:26Z
taskruns.tekton.dev                        2025-10-25T07:47:26Z
tasks.tekton.dev                           2025-10-25T07:47:26Z
verificationpolicies.tekton.dev            2025-10-25T07:47:26Z
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl get ns | grep tekton
tekton-pipelines             Active   2m47s
tekton-pipelines-resolvers   Active   2m46s
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl get all -n tekton-pipelines
NAME                                               READY   STATUS    RESTARTS   AGE
pod/tekton-events-controller-99665746c-ddtcr       1/1     Running   0          7m12s
pod/tekton-pipelines-controller-7595d6585d-n74q9   1/1     Running   0          7m12s
pod/tekton-pipelines-webhook-5967d74cc4-z9nxz      1/1     Running   0          7m12s

NAME                                  TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                              AGE
service/tekton-events-controller      ClusterIP   10.96.82.124   <none>        9090/TCP,8008/TCP,8080/TCP           7m12s
service/tekton-pipelines-controller   ClusterIP   10.96.45.211   <none>        9090/TCP,8008/TCP,8080/TCP           7m12s
service/tekton-pipelines-webhook      ClusterIP   10.96.68.99    <none>        9090/TCP,8008/TCP,443/TCP,8080/TCP   7m12s

NAME                                          READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/tekton-events-controller      1/1     1            1           7m12s
deployment.apps/tekton-pipelines-controller   1/1     1            1           7m12s
deployment.apps/tekton-pipelines-webhook      1/1     1            1           7m12s

NAME                                                     DESIRED   CURRENT   READY   AGE
replicaset.apps/tekton-events-controller-99665746c       1         1         1       7m12s
replicaset.apps/tekton-pipelines-controller-7595d6585d   1         1         1       7m12s
replicaset.apps/tekton-pipelines-webhook-5967d74cc4      1         1         1       7m12s

NAME                                                           REFERENCE                             TARGETS               MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/tekton-pipelines-webhook   Deployment/tekton-pipelines-webhook   cpu: <unknown>/100%   1         5         1          7m12s

 

"컨트롤러와 웹훅 Pod가 Running 상태가 되면 Tekton Pipelines 설치가 완료된 것입니다."


⚙️ Tekton Triggers 설치

  • 이제 이벤트 기반 자동화를 위한 Tekton Triggers를 설치합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml
clusterrole.rbac.authorization.k8s.io/tekton-triggers-admin created
clusterrole.rbac.authorization.k8s.io/tekton-triggers-core-interceptors created
...
  • 설치 완료 후, 상태를 확인합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl get crd | grep triggers
clusterinterceptors.triggers.tekton.dev      2025-10-25T07:56:33Z
clustertriggerbindings.triggers.tekton.dev   2025-10-25T07:56:33Z
eventlisteners.triggers.tekton.dev           2025-10-25T07:56:33Z
interceptors.triggers.tekton.dev             2025-10-25T07:56:33Z
triggerbindings.triggers.tekton.dev          2025-10-25T07:56:33Z
triggers.triggers.tekton.dev                 2025-10-25T07:56:33Z
triggertemplates.triggers.tekton.dev         2025-10-25T07:56:33Z

(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ k get deploy -n tekton-pipelines | grep triggers
tekton-triggers-controller    1/1     1            1           39s
tekton-triggers-webhook       1/1     1            1           39s

 

"Tekton Triggers 설치 후에는 이벤트 기반 자동화 구성이 가능해집니다."


🖥️ Tekton Dashboard 설치

  • Tekton Dashboard는 파이프라인, Task, 로그를 시각적으로 확인할 수 있는 UI입니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl apply -f https://storage.googleapis.com/tekton-releases/dashboard/latest/release.yaml
customresourcedefinition.apiextensions.k8s.io/extensions.dashboard.tekton.dev created
serviceaccount/tekton-dashboard created
...
  • 설치 후  상태를 확인합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl get crd | grep dashboard
extensions.dashboard.tekton.dev              2025-10-25T07:58:07Z
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl get deploy -n tekton-pipelines
NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
tekton-dashboard              1/1     1            1           27s

 

"Dashboard Pod가 Running 상태이면 설치가 완료된 것입니다."


🌐 Tekton Dashboard 접속

  • Dashboard는 기본적으로 외부에 노출되지 않습니다.
    로컬에서 접근하려면 아래 명령을 사용합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl get svc,ep -n tekton-pipelines tekton-dashboard
NAME                       TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)    AGE
service/tekton-dashboard   ClusterIP   10.96.88.26   <none>        9097/TCP   53s

NAME                         ENDPOINTS          AGE
endpoints/tekton-dashboard   10.244.0.52:9097   53s

# service 를 Nodeport 설정 : nodePort 30000
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl patch svc -n tekton-pipelines tekton-dashboard -p '{"spec":{"type":"NodePort","ports":[{"port":9097,"targetPort":9097,"nodePort":30000}]}}'
service/tekton-dashboard patched

(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~/greetings$ kubectl get svc,ep -n tekton-pipelines tekton-dashboard
NAME                       TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
service/tekton-dashboard   NodePort   10.96.88.26   <none>        9097:30000/TCP   108s

NAME                         ENDPOINTS          AGE
endpoints/tekton-dashboard   10.244.0.52:9097   108s
  • 그런 다음 브라우저에서 다음 주소로 접속합니다.

"Ingress 설정을 통해 외부에서도 접근할 수 있습니다."


💻 Tekton CLI 설치 및 확인

  • 마지막으로 Tekton CLI(tkn)를 설치합니다.
  • CLI를 통해 Pipeline과 Task를 직접 생성, 실행, 모니터링할 수 있습니다.
  • 설치 후 버전을 확인해 Tekton과의 연결이 정상인지 확인합니다.
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ wget https://github.com/tektoncd/cli/releases/latest/download/tkn_0.42.0_Linux_x86_64.tar.gz
--2025-10-25 17:16:54--  https://github.com/tektoncd/cli/releases/latest/download/tkn_0.42.0_Linux_x86_64.tar.gz
Resolving github.com (github.com)... 20.200.245.247
Connecting to github.com (github.com)|20.200.245.247|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://github.com/tektoncd/cli/releases/download/v0.42.0/tkn_0.42.0_Linux_x86_64.tar.gz [following]
--2025-10-25 17:16:54--  https://github.com/tektoncd/cli/releases/download/v0.42.0/tkn_0.42.0_Linux_x86_64.tar.gz
Reusing existing connection to github.com:443.
HTTP request sent, awaiting response... 302 Found
Location: https://release-assets.githubusercontent.com/github-production-release-asset/181939372/5c63e841-b86f-44df-a030-e96800f7c917?sp=r&sv=2018-11-09&sr=b&spr=https&se=2025-10-25T09%3A00%3A57Z&rscd=attachment%3B+filename%3Dtkn_0.42.0_Linux_x86_64.tar.gz&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2025-10-25T08%3A00%3A36Z&ske=2025-10-25T09%3A00%3A57Z&sks=b&skv=2018-11-09&sig=igS23qfX8l9PNtVlxGB2tDgrCqz%2F2C1aKn%2B5UbaX7Mg%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc2MTM4MjAxNSwibmJmIjoxNzYxMzgwMjE1LCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.w0Yp_jU76aRqslnctWFw5u9Et5KhN8TTPAAYCZGvyec&response-content-disposition=attachment%3B%20filename%3Dtkn_0.42.0_Linux_x86_64.tar.gz&response-content-type=application%2Foctet-stream [following]
--2025-10-25 17:16:54--  https://release-assets.githubusercontent.com/github-production-release-asset/181939372/5c63e841-b86f-44df-a030-e96800f7c917?sp=r&sv=2018-11-09&sr=b&spr=https&se=2025-10-25T09%3A00%3A57Z&rscd=attachment%3B+filename%3Dtkn_0.42.0_Linux_x86_64.tar.gz&rsct=application%2Foctet-stream&skoid=96c2d410-5711-43a1-aedd-ab1947aa7ab0&sktid=398a6654-997b-47e9-b12b-9515b896b4de&skt=2025-10-25T08%3A00%3A36Z&ske=2025-10-25T09%3A00%3A57Z&sks=b&skv=2018-11-09&sig=igS23qfX8l9PNtVlxGB2tDgrCqz%2F2C1aKn%2B5UbaX7Mg%3D&jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmVsZWFzZS1hc3NldHMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwia2V5Ijoia2V5MSIsImV4cCI6MTc2MTM4MjAxNSwibmJmIjoxNzYxMzgwMjE1LCJwYXRoIjoicmVsZWFzZWFzc2V0cHJvZHVjdGlvbi5ibG9iLmNvcmUud2luZG93cy5uZXQifQ.w0Yp_jU76aRqslnctWFw5u9Et5KhN8TTPAAYCZGvyec&response-content-disposition=attachment%3B%20filename%3Dtkn_0.42.0_Linux_x86_64.tar.gz&response-content-type=application%2Foctet-stream
Resolving release-assets.githubusercontent.com (release-assets.githubusercontent.com)... 185.199.109.133, 185.199.108.133, 185.199.111.133, ...
Connecting to release-assets.githubusercontent.com (release-assets.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 37171573 (35M) [application/octet-stream]
Saving to: ‘tkn_0.42.0_Linux_x86_64.tar.gz’

tkn_0.42.0_Linux_x86_64.t 100%[=====================================>]  35.45M  20.7MB/s    in 1.7s

2025-10-25 17:16:56 (20.7 MB/s) - ‘tkn_0.42.0_Linux_x86_64.tar.gz’ saved [37171573/37171573]

(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ tar xvzf tkn_0.42.0_Linux_x86_64.tar.gz
LICENSE
README.md
tkn

(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ sudo mv tkn /usr/local/bin/
(⎈|kind-myk8s:N/A) ssoon@DESKTOP-72C919S:~$ tkn version
Client version: 0.42.0
Pipeline version: v1.5.0
Triggers version: v0.33.0
Dashboard version: v0.62.0

 

"CLI 버전과 Tekton 컴포넌트 버전이 정상 출력되면 설치가 완료된 것입니다."


📌 핵심 요약

  • Tekton은 Kubernetes 네이티브 CI/CD 프레임워크로, CRD 기반으로 Pipeline을 구성한다.
  • Task, Pipeline, TaskRun, PipelineRun, Trigger는 Tekton의 핵심 개념이다.
  • Tekton PipelinesTekton TriggersTekton Dashboard 순서로 설치한다.
  • 설치 후 kubectl get pods -n tekton-pipelines 로 모든 컴포넌트의 상태를 확인한다.
  • Tekton Dashboard는 포트포워딩(kubectl port-forward)으로 로컬에서 접근 가능하다.
  • tkn CLI로 Tekton 리소스를 명령어로 관리할 수 있다.

"Tekton을 설치하면 Kubernetes 환경에서 완전한 Cloud Native CI/CD를 구현할 수 있습니다."

 

Comments