학습일지/kubernetes

K8s-Native Serverless Framework - kubeless 정리

inspirit941 2021. 9. 4. 22:16
반응형

cf. kubeless는 2021년 12월을 끝으로 maintain이 종료되었다. 아무도 관리하지 않는 오픈소스라는 의미.

프로젝트 경로도 vmware-archive로 이동된 것을 확인할 수 있다.

https://github.com/kubeless/kubeless

 

GitHub - vmware-archive/kubeless: Kubernetes Native Serverless Framework

Kubernetes Native Serverless Framework. Contribute to vmware-archive/kubeless development by creating an account on GitHub.

github.com

 

혹시라도 이 포스트를 검색해서 들어왔다면,
kubeless라는 프레임워크보다는 serverless에 관련된 지식의 개요라도 얻어갈 수 있다면 좋겠다.

 


Serverless in k8s

스크린샷 2021-08-31 오후 10 03 20

Event, Job, Task 등을 실행하기 위해서는 결국 컨테이너가 필요하다. 하지만 Serverless는 Container-based System과는 결이 다름.

스크린샷 2021-08-31 오후 10 15 30스크린샷 2021-08-31 오후 10 17 47

  • 기본적으로 Serverless는 k8s 관련 기술이 아니다. 사용자가 pods / containers를 배포하는 게 아니라 Function을 배포함.
  • 내부적으로는 해당 function을 구동하기 위한 컨테이너를 올리고, 작업이 끝난 컨테이너는 삭제하는 식으로 동작함.
  • 즉 container의 Deployment를 Cloud Provider가 책임지는 구조.
    • 사용자가 Function을 실행하면 -> Spin up a container
    • 사용자가 Function을 삭제하면 -> terminate a container

스크린샷 2021-08-31 오후 10 28 02

  • Fission: Serverless용 오픈소스 Tech. AWS나 구글에서도 사용함. 로컬에서도 적용 가능
  • Kubeless: k8s native Serverless Application.

K8s 관리자가 고려해야 할 요소가 많은 프레임워크라고 보면 됨. Network / Resource Limit / Node 등..

스크린샷 2021-08-31 오후 10 30 14

Kubeless

스크린샷 2021-09-01 오전 10 02 58

  • k8s native Serverless framework로, k8s 클러스터에 코드를 배포한다.
  • auto scaling, monitoring, troubleshooting, api routing 등을 지원한다.
  • Event: kubeless function을 실행시키는 모든 것. Function 실행이 필요하면 kubeless에서 함수 실행 이벤트를 발생시킨다.

스크린샷 2021-09-01 오전 10 04 19

AWS Lambda Cli와도 호환된다고 함.

스크린샷 2021-09-01 오전 10 05 46


Install / Deploy Functions

Prerequisite.

스크린샷 2021-09-02 오후 1 44 03

아래 명령어는 전부 kubectl을 구동할 수 있는 리눅스 머신을 기준으로 한 설명이다.

  • kubectl validate cluster --state=s3://kops-bucket-a87654 ... validate cluster 명령어로 클러스터 상태 체크. is ready 상태여야 한다.
  • kubectl api-versions 에서 rbac api가 활성화되어 있는지 확인한다. rbac가 활성화되어 있어야 함.
  1. https://github.com/kubeless/kubeless 에서 release 버전 확인.
  2. bundles -> kubeless 디렉토리 -> kubeless binary 파일을 확인할 수 있다.
  3. 해당 binary 파일을 /bin 디렉토리로 이동시킨다. (/usr/local/bin) bundles 디렉토리는 삭제한다.
  4. kubectl create ns kubeless
  5. kubectl create -f https://github.com/kubeless/kubeless/releases/download/v1.0.8/kubeless-v1.0.8.yaml
    • yaml파일을 보면 controller라는 메타데이터 이름으로 필요한 리소스 / 적용하려는 메소드 등이 정의되어 있다.
    • 이 yaml파일로 정의된 k8s 리소스들은 kubectl get all -n kubeless 로 확인할 수 있다.

스크린샷 2021-09-03 오전 9 47 19

  1. function definition : 어떤 언어로 function을 정의하건 event / context 두 개의 input은 반드시 필요하다. 
  2. def hello(event, context): print event return event['data']

스크린샷 2021-09-03 오전 9 52 28

  • Event: 첫 번째 파라미터 위치여야 함. event source에 관련된 데이터를 포함하고 있음. data 필드에는 function request에 들어갈 body 데이터가 있어야 한다.
  • context: 두 번째 파라미터. function 자체의 general information.

스크린샷 2021-09-03 오후 12 26 33

kubeless function deploy hello --runtime=python2.7 --from-file hello.py --handler test.hello

  • handler : 해당 function의 handler
  • py 파일의 권한을 chmod 777로 변경해줘야 함.
  • deploy 뒤에 붙은 'hello'는 원하는 대로 변경할 수 있음.
  • from file의 경우 커맨드 실행경로에 파일이 없다면, 파일이 있는 full path를 입력해야 한다.

스크린샷 2021-09-03 오후 12 26 02스크린샷 2021-09-03 오후 12 27 37스크린샷 2021-09-03 오후 12 28 47

실제로 k8s에서는 deployment, replicaset같은 k8s Object가 생성되었지만, kubeless에서 객체들을 알아서 관리한다.

스크린샷 2021-09-03 오후 12 29 43

  • kubectl get functions 로 배포된 functions들을 조회 가능함.
  • kubeless function delete <name> 으로 생성한 function을 삭제할 수 있으며, 관련해서 생성된 객체들도 전부 같이 삭제된다.

 

 

반응형