본문 바로가기

클라우드/Kubernetes(쿠버네티스)

[kubernetes] Tekton

Tekton 이란?

Tekton은 지속적 통합 및 배포(CI/CD) 시스템을 만들 수 있는 강력하면서도 유연한 Kubernetes 기반 오픈소스 프레임워크



쿠버네티스의 CRD(Custom Resource Definition)를 활용하여 쿠버네티스 제어판에서 파이프라인 태스크를 실행. 또한 Tekton은 Jenkins, Jenkins X, Skaffold, Knative와 같은 기존 CI/CD 툴과 효과적으로 연동

 

재사용 tekton의 모든 task들은 다른 pipeline과 완전히 독립적으로 사용할 수 있다. 
모듈화가 잘 돼있어 여러 pipeline에서 필요한 task를 갖다 쓸 수 있다.
표준화 Tekton은 Kubernetes의 Custom Resource를 사용해 정의된다.
기능의 확장성 Tekton Hub를 통해 Tekton커뮤니티에서 제작한 여러 종류의 task들을 사용할 수 있다.

 

Tekton 구조

Step
  • step하나 == 작업 하나
  • 예를들어 Python app의 유닛테스트, Java app의 compile작업, Git Clone등 하나의 작업 모듈을 step이라고 한다.
Task
  • Task는 step들의 모음
  • Task하나당 하나의 pod로 동작
Pipeline
  • pipeline은 Task들의 모음
  • pipeline속 Task들은 순차적으로 실행되게 된다.
  • task의 RunAfter 구문을 통해 이전 task가 끝난 뒤 다음 task가 실행되게 할 수 있다.
TaskRun
  • 단일 Task를 실행시키는 역할
PipelineRun
  • 이름에서 알 수 있듯이 Pipeline을 실행시키는 역할. 
  • Pipeline이 실행될 때 Pipeline내 Task들은 workspace라는 이름의 볼륨을 공유하게 할 수 있다. 
  • PipelineRun을 실행시키면 각 Task에 해당하는 TaskRun을 자동으로 생성시켜 실행하기 때문에 별도로 TaskRun을 정의해주지 않아도 된다.

 

Tekton trigger 란?

특정 이벤트가 발생할 때마다 이벤트를 web hook으로 받아 등록된 pipeline을 자동으로 실행 시키는 역할

 

EventListener
Pod로 실행되며, 서비스를 노출시켜 HTTP기반의 event를 받아 trigger로 전달
Trigger 전달된 이벤트에 대한 검증, 파싱 로직을 실행시킨 뒤 Trigger Template과 Trigger Binding을 연결
Trigger Binding
EventListener로 부터 받은 데이터를 Trigger Template의 파라미터와 매핑
Trigger Template
Trigger Binding/EventListener로 부터 어떤 파라미터를 받을건지, 어떤 파이프라인을 실행시킬건지 정의

 

용어

CI/CD

  • CI/CD 
    • 애플리케이션 개발 단계를 자동화 하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법
    • 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포
  • CI 
    • 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미
    • CI를 성공적으로 구현할 경우 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.
  • CD
    • 지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미
    • 지속적인 제공이란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리(예: GitHub 또는 컨테이너 레지스트리)에 자동으로 업로드되는 것을 의미
    • 지속적인 배포란 개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미
    • 개발자들이 코드를 계속 작성하면, 사용자 및 내부 사용자들이 계속 쓸 수 있게 만드는것

 

 

CRD

  • 사용자에게 필요한 자원으로 쿠버네티스 안에서 정의해 사용하는 것
  • 쿠버네티스는 사용자가 원하는 모든 기능을 기본 기능으로 제공하는 것이 비효율적이라 판단해 자신이 필요한 기능을 직접 추가해서 사용하는 사용자 정의 자원과 사용자 정의 컨트롤러를 제공
  • 사용자 정의 컨트롤러
    • 사용자 정의 자원을 이용해서 원하는 동작을 하려면 사용자 정의 컨트롤러로 API를 만들어야 한다.
    • 사용자 정의 자원으로 원하는 상태를 선언하면 사용자 정의 컨트롤러가 해당 상태를 맞추는데 필요한 처리를 한다.
    • 대표적인 사용 방법으로 K네이티브가 있다. 
  • 사용자 정의 자원 정의(주로 CRD를 만드는 방법을 사용)
    1. CRD
    2. Aggregated API



K네이티브

  • 서버리스 클라우드 네이티브 애플리케이션을 배포, 실행, 관리하기 위해 쿠버네티스에 구성 요소를 추가하는 오픈소스 커뮤니티 프로젝트
  • 특징
    1. kubernetes 위에서 기동
    2. 특정 클라우드 종속성이 없음
    3. On-Premise(자체적으로 보유한 전산 서버)에서도 설치 가능



'클라우드 > Kubernetes(쿠버네티스)' 카테고리의 다른 글

[kubernetes] 사용자 권한 (keycloak)  (0) 2021.07.25
[kubernetes] Jenkins vs Jenkins X  (0) 2021.07.25
[kubernetes] Tekton  (0) 2021.07.25
[쿠버네티스] Helm  (0) 2021.07.08
[쿠버네티스] 시크릿  (0) 2021.06.11
[쿠버네티스] 컨피그맵  (0) 2021.06.09