오픈소스 서버리스 플랫폼인 OpenFaaS를 쿠버네티스 클러스터 위에 설치하고 직접 함수를 배포까지 해보자
OpenFaaS 설치 (Feat. K8s Cluster)
Window 환경에서 VMWare를 설치 후, Ubuntu 3개 노드로 구성한 클러스터 위에 OpenFaaS를 설치함
1. fass-cli 설치
•
arkade 설치
Arkade: K8s 애플리케이션 및 개발 도구를 간단히 설치할 수 있도록 도와주는 오픈소스 CLI 툴. Helm 차트, YAML 매니페스트 등을 단일 명령어로 설치할 수 있는 “마켓플레이스” 역할.
Helm: K8s에서 애플리케이션을 관리하기 위한 패키지 매니저. Helm은 K8s 리소스를 “차트(Chart)”라는 패키지 형식으로 묶어 배포, 업그레이드 등을 간소화함. Halm 차트는 Service, Deployments 등 K8s 리소스를 정의한 YAML 템플릿을 포함하는 패키지.
curl -sSL https://get.arkade.dev | sudo -E sh
Bash
복사
•
arkade로 faas-cli 설치
arkade get faas-cli
Bash
복사
2. OpenFaaS 설치
arkade install openfaas
Bash
복사
로그 기록
•
설치 확인
kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"
Bash
복사
3. 로그인 과정
•
비밀번호 직접 설정
a.
새로운 비밀번호 생성 및 확인
PASSWORD=$(head -c 12 /dev/urandom | shasum | cut -d' ' -f1)
echo $PASSWORD
Bash
복사
b.
Secret(basic-auth) 생성
kubectl -n openfaas create secret generic basic-auth \
--from-literal=basic-auth-user=admin \
--from-literal=basic-auth-password="$PASSWORD"
Bash
복사
c.
Gateway Pod 재시작
kubectl -n openfaas rollout restart deployment/gateway
Bash
복사
•
OpenFaaS UI 접속
http://<node-ip>:<gateway-nodeport>
# http://192.168.74.129:31112/
Bash
복사
◦
Gateway의 NodePort와 해당 노드의 IP로 UI 접근 가능
•
로그인 화면
◦
Username: admin
◦
Password: echo $PASSWORD 로 확인한 비밀번호
OpenFaaS 설치 (Feat. minikube)
맥북 프로에 minikube를 설치 후, 그 위에 OpenFaaS를 설치함
0. minikube 설치
brew update
brew install minikube
minikube start
Bash
복사
Note:
’만약 apiserver 플래그가 유효한지 그리고 SELinux가 비활성화되었는지 확인하세요’ 라는 에러가 뜬다면?
minikube start --extra-config=apiserver.authorization-mode=RBAC
kubectl get nodes
minikube status
Bash
복사
minikube dashboard &
jobs
Bash
복사
1. arkade 도구 설치
arkade는 쿠버네티스 앱과 CLI 등을 쉽게 설치해 주는 오픈소스
brew install arkade
Bash
복사
2. OpenFaaS 설치 및 확인
brew install openfaas --load-balancer
kubectl -n openfaas get deployments -l "release=openfaas, app=openfaas"
kubectl -n openfaas get pods
kubectl -n openfaas get service
Bash
복사
minkube tunnel
Note:
minkube tunnel은 Minikube 클러스터에서 LB 타입의 서비스가 외부 IP를 할당받을 수 있도록 지원하는 데 사용된다.
minikube tunnel
kubectl get svc -n openfaas
Bash
복사
•
이를 실행하면, Minikube는 LoadBalancer 서비스에 동적으로 IP를 할당한다.
•
다시 LB 서비스를 확인하여 EXTERNAL-IP가 할당되었는지 확인한다.
export OPENFAAS_URL="http://127.0.0.1:80cle80/"
Bash
복사
•
방금 할당 받은 EXTERNAL-IP를 사용해서 OPENFAAS_URL로 정의하자.
3. faas-cli 도구 설치
arkade get faas-cli
faas-cli
Bash
복사
4. Admin 계정 설정 및 OpenFaaS 대시보드 접근
kubectl rollout status -n openfaas deploy/gateway
Bash
복사
•
kubectl rollout status:
◦
현재 Deployment(또는 다른 리소스)의 롤아웃 상태를 확인한다.
◦
롤아웃은 Kubernetes가 Deployment를 새 버전으로 업데이트하거나 기존 버전을 롤백할 때 수행되는 과정이다.
•
n openfaas:
◦
n은 Namespace를 지정하는 옵션이다.
◦
여기서는 openfaas라는 네임스페이스에서 해당 Deployment를 확인한다.
•
deploy/gateway:
◦
롤아웃 상태를 확인할 Deployment의 이름이다.
◦
deploy/는 리소스 타입을 명시하며, 여기서는 Deployment이다.
◦
gateway는 OpenFaaS의 게이트웨이 Deployment 이름이다.
kubectl port-forward -n openfaas svc/gateway 8080:8080 &
Bash
복사
•
kubectl port-forward:
◦
Kubernetes 클러스터 내의 Pod, Service, Deployment 등의 리소스와 로컬 머신 간에 포트를 연결(port forward)한다.
◦
이를 통해 클러스터 내부에서만 접근 가능한 리소스에 외부(로컬 머신)에서 접근할 수 있다.
•
n openfaas:
◦
n 옵션은 Namespace를 지정한다.
◦
여기서는 OpenFaaS가 설치된 네임스페이스(openfaas)에서 gateway 서비스를 대상으로 한다.
•
svc/gateway:
◦
포트 포워딩할 Kubernetes 리소스를 지정한다.
◦
svc/는 Service 리소스를 의미하며, gateway는 OpenFaaS Gateway 서비스 이름이다.
•
8080:8080:
◦
로컬 포트:클러스터 내 포트 형식으로 포트 매핑을 설정한다.
◦
로컬 머신의 8080 포트를 OpenFaaS Gateway의 8080 포트에 연결한다.
◦
이로써 http://localhost:8080으로 OpenFaaS Gateway에 접근할 수 있게 된다.
•
&:
◦
명령어를 백그라운드 프로세스로 실행한다.
◦
터미널을 계속 사용할 수 있도록 명령 실행을 백그라운드로 넘긴다.
PASSWORD=$(kubectl get secret -n openfaas basic-auth -o jsonpath="{.data.basic-auth-password}" | base64 --decode; echo)
echo -n $PASSWORD | faas-cli login --username admin --password-stdin
echo $PASSWORD
Bash
복사
•
패스워드를 정의한다. 해당 값은 secret에서 가져온다.
•
그리고 패스워드를 확인한다.
http://<EXTERNAL-IP>/ui/에 접속 후
- Username : admin1
- Password : <위에서 확인한 패스워드>
OpenFaaS 함수 배포
UI로 함수 Deploy & Invoke 해보기
http://<EXTERNAL-IP>/ui/에서 새로운 함수를 클릭 후, DEPLOY를 눌러 배포한다.
배포한 figlet 함수 페이지 안에서 INVOKE를 누르면, figlet 함수가 있는 컨테이너가 실행되면서 입력값을 처리한다.
직접 함수 Deploy & Invoke 하기
1. Template 가져오기
faas-cli template pull
faas-cli new --list
Bash
복사
2. 함수 만들기
# faas-cli new --lang python3 hello-openfaas --prefix="<도커허브_계정>"
faas-cli new --lang python3 hello-openfaas --prefix="kyohyunchoo"
Bash
복사
•
하나의 디렉토리와 세 개의 파일이 생성된다:
◦
./hello-openfaas
◦
./hello-openfaas.yml
◦
./hello-openfaas/handler.py
◦
./hello-openfaas/requirements.txt
3. 함수 수정하기
vi ./hello-openfaas.yml
Bash
복사
version: 1.0
provider:
name: openfaas
gateway: http://<EXTERNAL-IP>:8080
functions:
hello-openfaas:
lang: python3
handler: ./hello-openfaas
image: kyohyunchoo/hello-openfaas:latest
YAML
복사
•
vim으로 YAML 파일에 들어가서 gateway를 EXTERNAL-IP로 변경해야 된다.
vi ./hello-openfaas/handler.py
Bash
복사
•
handler.py는 입력값을 그대로 반환하는 일종의 echo 함수이다.
•
이 템플릿을 수정하여 출력하고 싶은 문장으로 변경해 보자.
4. 함수 배포하기
faas-cli up -f hello-openfaas.yml
Bash
복사
빌드 과정에서 Docker 데몬이 필요하므로 잠시 Docker 데스크톱을 실행한다.
함수 배포 완료
짜잔~ 이렇게 hello-openfaas 함수가 배포된 것을 알 수 있다!!!