학습일지/kubernetes
K8s-Native Serverless Framework - kubeless 정리
inspirit941
2021. 9. 4. 22:16
반응형
cf. kubeless는 2021년 12월을 끝으로 maintain이 종료되었다. 아무도 관리하지 않는 오픈소스라는 의미.
프로젝트 경로도 vmware-archive로 이동된 것을 확인할 수 있다.
https://github.com/kubeless/kubeless
혹시라도 이 포스트를 검색해서 들어왔다면,
kubeless라는 프레임워크보다는 serverless에 관련된 지식의 개요라도 얻어갈 수 있다면 좋겠다.
Serverless in k8s
Event, Job, Task 등을 실행하기 위해서는 결국 컨테이너가 필요하다. 하지만 Serverless는 Container-based System과는 결이 다름.
- 기본적으로 Serverless는 k8s 관련 기술이 아니다. 사용자가 pods / containers를 배포하는 게 아니라 Function을 배포함.
- 내부적으로는 해당 function을 구동하기 위한 컨테이너를 올리고, 작업이 끝난 컨테이너는 삭제하는 식으로 동작함.
- 즉 container의 Deployment를 Cloud Provider가 책임지는 구조.
- 사용자가 Function을 실행하면 -> Spin up a container
- 사용자가 Function을 삭제하면 -> terminate a container
- Fission: Serverless용 오픈소스 Tech. AWS나 구글에서도 사용함. 로컬에서도 적용 가능
- Kubeless: k8s native Serverless Application.
K8s 관리자가 고려해야 할 요소가 많은 프레임워크라고 보면 됨. Network / Resource Limit / Node 등..
Kubeless
- k8s native Serverless framework로, k8s 클러스터에 코드를 배포한다.
- auto scaling, monitoring, troubleshooting, api routing 등을 지원한다.
- Event: kubeless function을 실행시키는 모든 것. Function 실행이 필요하면 kubeless에서 함수 실행 이벤트를 발생시킨다.
AWS Lambda Cli와도 호환된다고 함.
Install / Deploy Functions
Prerequisite.
아래 명령어는 전부 kubectl을 구동할 수 있는 리눅스 머신을 기준으로 한 설명이다.
kubectl validate cluster --state=s3://kops-bucket-a87654
... validate cluster 명령어로 클러스터 상태 체크. is ready 상태여야 한다.kubectl api-versions
에서 rbac api가 활성화되어 있는지 확인한다. rbac가 활성화되어 있어야 함.
- https://github.com/kubeless/kubeless 에서 release 버전 확인.
- https://github.com/kubeless/kubeless/releases/tag/v1.0.8
- 링크에서 Asset -> 운영체제에 맞는 zip파일을
wget <url>
로 입력해서 가져온다. 압축까지 해제.
- bundles -> kubeless 디렉토리 -> kubeless binary 파일을 확인할 수 있다.
- 해당 binary 파일을 /bin 디렉토리로 이동시킨다. (/usr/local/bin) bundles 디렉토리는 삭제한다.
kubectl create ns kubeless
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
로 확인할 수 있다.
- function definition : 어떤 언어로 function을 정의하건 event / context 두 개의 input은 반드시 필요하다.
def hello(event, context): print event return event['data']
- Event: 첫 번째 파라미터 위치여야 함. event source에 관련된 데이터를 포함하고 있음. data 필드에는 function request에 들어갈 body 데이터가 있어야 한다.
- context: 두 번째 파라미터. function 자체의 general information.
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를 입력해야 한다.
실제로 k8s에서는 deployment, replicaset같은 k8s Object가 생성되었지만, kubeless에서 객체들을 알아서 관리한다.
kubectl get functions
로 배포된 functions들을 조회 가능함.kubeless function delete <name>
으로 생성한 function을 삭제할 수 있으며, 관련해서 생성된 객체들도 전부 같이 삭제된다.
반응형