Ssoon
Cloud Native CI/CD : 6.1 Install Tekton 본문
⚙️ 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을 설치하기 위해 필요한 것은 단 두 가지입니다.
- kubectl CLI
- 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 Pipelines → Tekton Triggers → Tekton Dashboard 순서로 설치한다.
- 설치 후 kubectl get pods -n tekton-pipelines 로 모든 컴포넌트의 상태를 확인한다.
- Tekton Dashboard는 포트포워딩(kubectl port-forward)으로 로컬에서 접근 가능하다.
- tkn CLI로 Tekton 리소스를 명령어로 관리할 수 있다.
"Tekton을 설치하면 Kubernetes 환경에서 완전한 Cloud Native CI/CD를 구현할 수 있습니다."
'CICD Study [1기]' 카테고리의 다른 글
| Cloud Native CI/CD : 6.3 Create a Task to Compile and Package an App from Git (0) | 2025.10.19 |
|---|---|
| Cloud Native CI/CD : 6.2 Create a Hello World Task (0) | 2025.10.19 |
| Helm : 5.7 Triggering a Rolling Update Automatically (0) | 2025.10.19 |
| Helm : 5.6 Deploying a Chart with a Dependency (0) | 2025.10.19 |
| Helm : 5.5 Deploying a Chart from a Repository (0) | 2025.10.19 |
Comments