4 분 소요

개요

  • 사이트 / GitHub
  • 데이터·I/O·컴퓨팅 집약적 워크로드에 특화된 고성능 오픈소스 서버리스(FaaS) 프레임워크
  • Kubernetes 네이티브, 온프레미스·클라우드·엣지(IoT) 환경 모두 지원
  • Apache License 2.0
특징 설명
고성능 단일 함수 인스턴스로 초당 수십만 HTTP 요청 또는 데이터 레코드 처리
CPU/GPU 지원 머신러닝·딥러닝 워크로드에 GPU 직접 활용 가능
다양한 트리거 HTTP, Kafka, RabbitMQ, NATS, Cron, Kinesis, MQTT, Azure Event Hubs 등
멀티 런타임 Go, Python, Node.js, Java, C++, Shell 함수 지원
Kaniko 통합 런타임에 Docker 데몬 없이 컨테이너 이미지 안전 빌드
데이터 과학 통합 Jupyter, Kubeflow와 네이티브 통합
함수 버전 관리 여러 버전 동시 실행 및 별칭(alias) 기반 이벤트 매핑
API Gateway 인증·카나리아 배포·함수 라우팅 내장


설치

컨테이너 레지스트리 준비 (Gitea)

  • Nuclio는 빌드된 함수 이미지를 푸시할 컨테이너 레지스트리가 필요
  • 아래 예시는 Gitea + Longhorn을 사용하는 경우

gitea-values.yaml

service:
  http:
    type: NodePort
    nodePort: 30100

ingress:
  hosts:
    - host: gitea-http.gitea.svc.cluster.local:3000
      paths:
        - path: /
          pathType: Prefix
dnf install cryptsetup
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.1/deploy/prerequisite/longhorn-iscsi-installation.yaml
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/v1.6.1/deploy/longhorn.yaml
curl -sSfL https://raw.githubusercontent.com/longhorn/longhorn/v1.6.1/scripts/environment_check.sh | bash

helm repo add gitea-charts https://dl.gitea.com/charts/
helm repo update gitea-charts
helm install gitea gitea-charts/gitea --create-namespace --namespace gitea --values ./gitea-values.yaml

Nuclio 설치

nuclio-values.yaml

dashboard:
  containerBuilderKind: kaniko
  nodePort: 30200

registry:
  secretName: registry-credentials
  pushPullUrl: gitea-http.gitea.svc.cluster.local:3000
helm repo add nuclio https://nuclio.github.io/nuclio/charts
helm repo update nuclio

kubectl create namespace nuclio
# 레지스트리 인증 시크릿 생성 (패스워드는 환경에 맞게 변경)
kubectl --namespace nuclio create secret docker-registry registry-credentials \
    --docker-username gitea_admin \
    --docker-password "<YOUR_PASSWORD>" \
    --docker-server gitea-http.gitea.svc.cluster.local:3000 \
    --docker-email gitea@local.domain

helm install nuclio nuclio/nuclio --namespace nuclio --values ./nuclio-values.yaml

대시보드

  • 브라우저에서 http://<cluster-ip>:30200 접속


테스트

  • 함수
    1. NEW FUNCTION 클릭
    2. helloworld (golang) 선택 후 프로젝트 선택 및 함수 이름 작성 후 CREATE 클릭
    3. 코드 확인
      • 코딩 및 테스트 수행
    4. 설정 확인
      • Deployment, Service 설정
    5. 트리거 확인
    6. DEPLOY 클릭
    7. 상태 확인
    8. 동작 확인


아키텍처

Function Processor

  • Processor architecture
구성 요소 설명
Event-source listeners 소켓·메시지 대기열 수신 또는 외부 이벤트/데이터 소스 주기적 폴링. 정확히 한 번(exactly-once) 또는 최소 한 번(at-least-once) 실행 보장
Runtime engine 함수 환경 초기화·이벤트 공급·응답 반환. 병렬 워커 다수 보유 가능
Data bindings 외부 파일·DB·메시징 시스템에 대한 지속적 연결. 데이터 프리패치·캐싱·마이크로 배치 처리
Control framework 프로세서 구성 요소 초기화·제어, 로깅, 통계 모니터링, 원격 관리 미니 포털

Runtime 유형

유형 언어/실행 방식 특징
Native Go, C 인라인 루틴 최저 지연, 실시간 처리
SHMEM Python, Java, Node.js 제로 복사 공유 메모리 채널로 프로세서와 통신
Shell 바이너리·커맨드 라인 실행 파일 stdout/stderr 결과 매핑, 파일 데이터 바인딩만 지원

Event Sources and Mapping

  • Event sources
클래스 설명 예시
Synchronous Request/Response 요청 후 즉각 응답 대기 HTTP, RPC
Asynchronous Message-Queue 게시 후 구독자에게 배포 RabbitMQ, MQTT, 이메일, Cron
Message/Record Streams 순서가 있는 레코드 순차 처리 Kafka, Kinesis, V3IO
Record/Data Polling (ETL) 주기적 또는 데이터 변경 트리거 기반 외부 DB 조회 DB 폴링
  • 이벤트 소스 매핑: URL “/”→ 프로덕션, “/beta”→ 베타 버전 방식으로 함수 버전별 매핑 가능
  • 딜러(Dealer): N 리소스(샤드·파티션·작업)를 M 프로세서에 동적 배포, 장애 및 스케일 변경 처리

Function Build & Deployment Flow

  • Build & Deploy
  • 각 함수는 YAML 또는 JSON으로 작성된 버전별 함수 사양(spec) 보유
  • 함수 사양: 코드, 데이터 바인딩, 환경 리소스, 자격 증명, 이벤트 소스 등 정의
  • build 명령: 컴파일 후 아티팩트 생성 → 이후 여러 배포에 재사용 가능
  • run 명령: 소스를 받아 빌드 + 배포 또는 기존 아티팩트 직접 배포 가능
  • build.yaml 파일로 빌드 플래그 세밀하게 제어

Function Versioning

  • 새 버전 게시 후 별칭(alias)으로 태그 지정 가능
  • 프로덕션·베타 등 여러 버전을 동시에 실행
  • 이벤트 소스 매핑은 버전 또는 별칭 기반 → 신규 배포 시 매핑 변경 불필요


Kubernetes Ingress를 사용하여 이름으로 함수 호출


플랫폼 설정

  • 플랫폼을 공유하는 모든 함수 간에 공유되는 별도 설정
  • Kubernetes: 함수 네임스페이스에 platform-config ConfigMap으로 저장
  • 플랫폼은 클러스터 또는 네임스페이스 단위로 적용
구성 요소 설명
Log sinks 로그 출력 대상 설정
Metric sinks 메트릭 수집 대상 설정
Webadmin 대시보드 설정
Health check 함수 상태 확인 방식
Cron-trigger creation mode Cron 트리거 생성 방식
Runtime 런타임 기본값 설정
Sensitive fields 민감 필드 마스킹 규칙


함수

  • 진입점은 두 개의 인수를 받음
인수 설명
Context 함수 호출 전반에 걸쳐 상태 유지. 로거·데이터 바인딩·워커 정보·사용자 지정 데이터 포함
Event 이벤트 헤더·본문·트리거 정보 포함. EventID, Body, ContentType, Headers, Fields 등


트리거

트리거 유형 설명
HTTP Synchronous REST API 엔드포인트 노출
Kafka Stream 토픽 파티션 기반 스트림 처리
RabbitMQ Message Queue AMQP 메시지 소비
NATS Message Queue NATS pub/sub 구독
MQTT Message Queue IoT 디바이스 메시지 처리
Cron Polling 주기적 실행 스케줄
Kinesis Stream AWS Kinesis 스트림 처리
Azure Event Hubs Stream Azure 이벤트 스트림 처리
V3IO stream Stream Iguazio V3IO 스트림 처리


API Gateway

  • 함수를 웹 서비스로 노출하는 프록시 레이어
  • UI, HTTP API, nuctl CLI를 통해 생성·삭제 가능
기능 설명
함수 라우팅 요청을 대상 함수로 전달하고 응답 반환
인증 Basic Auth 등 접근 제어
카나리아 배포 트래픽을 여러 함수 버전으로 분산


Runtime engines

런타임 버전 예시
Go 1.x
Python 3.9, 3.10, 3.11
Node.js 18.x
Java 11
C++ -
Shell bash


Dashboard HTTP API

  • 대시보드가 노출하는 REST API — 함수·프로젝트·API Gateway CRUD 지원
  • nuctl CLI는 내부적으로 이 API를 사용


유사 도구 비교

항목 Nuclio Knative OpenFaaS Fission
대상 워크로드 데이터·I/O 집약, ML/AI 범용 서버리스 범용 FaaS 빠른 콜드 스타트 FaaS
Kubernetes 전용 O O O O
GPU 지원 O X X
빌드 방식 Kaniko (데몬 불필요) Buildpacks/Dockerfile Dockerfile Dockerfile
이벤트 소스 Kafka, NATS, MQTT, HTTP 등 다수 Knative Eventing HTTP, NATS 등 HTTP, MQ 등
대시보드 UI O X O X
함수 버전 관리 O O X X
적합 용도 고성능·스트리밍·ML 추론 클라우드 서비스 추상화 심플한 FaaS 배포 초저지연 함수 실행


관련 포스트