Knative Serving은 serverless application이나 function들을 배포하고 서빙하는 역할을 합니다.
Serverless 컨테이너의 빠른 배포
자동 scale up & down
Istio기반 라우팅 & 네트워크 프로그래밍
배포된 코드와 config의 스냅샷기능
Serving 은 쿠버네티스 CRD (Custom Resource Definition)으로 정의된 4개의 오브젝트로 구성되어 있습니다.
Service : Configuration과 Route 리소스의 추상화된 집합체입니다. 워크로드의 lifecycle을 관리하는 역할을 합니다.
Configuration : Serving으로 배포되는 서비스를 정의합니다. 컨테이너 경로, 환경변수 등의 설정을 정의할 수 있으며 컨테이너의 경로를 지정할 때 빌드버전도 지정할 수 있습니다.
Revision : 코드와 config의 스냅샷입니다. Configuration을 생성할때마다 새로운 revision이 생기며 이전 revision으로 롤백하거나 각각의 버전으로 트래픽을 분할하여 서빙할 수 있습니다.
Route : User Service의 네트워크 엔드포인트를 제공합니다. 하나 이상의 Revision을 가지며 서비스로 들어오는 트래픽을 Revision으로 라우팅할 수 있습니다. 단순히 최신 버전의 Revision으로 라우팅할수도 있지만 카날리 테스트와 같이 여러 Revision으로 라우팅할수도 있습니다.
KubernetesEventSource : Kubernetes이벤트가 생성될 때 마다 이벤트메시지를 발생시킴.
GitHubSource : create, delete, deploy, fork 등과 같은 GitHub이벤트가 생성될 때마다 이벤트메시지 발생시킴.
그 외에도 GitLab, BitBucket, Apache CouchDB등이 있습니다.
Background++
원래는 Build도 component에 있었지만, Knative v0.8 부터 Deprecated되었습니다. 이유는 여기나와있지만 간단히 기술하자면 build가 Knative의 핵심책임이 아니라는 것입니다. 대신 Tekton Pipelines라는 툴을 사용하는 것을 권장하고 있습니다. 궁금해서 찾아봤는데 홈페이지가 공사중이더군요.(20.1.7 기준) 나중에 시간날때 한번 건들여봐야겠습니다. github : https://github.com/tektoncd/pipeline Doc : https://tekton.dev/
Serverless : Request가 있을 때만 실행되기 때문에 사용률과 확장성의 효율성이 뛰어남. Knative : opensource serveless solution Serving : 서비스를 배포하며 서비스 네트워크 설정을 알아서 해줌 Eventing : Knative의 비동기 메세지 처리 모듈