Kubernetes 클러스터에서 OpenFaaS 시도
7262 단어 kubernetesOpenFaaS
입문
Kubernetes에서 실행할 수 있는 FaaS(Function as a Service)로서 GitHub Star를 보면 OpenFaaS가 인기가 있다.
OpenFaaS는 Docker Swarm, Kubernetes에서도 작업할 수 있다고 하는데 Kubernetes에서 작업한 사례가 발견되지 않아 이번에 조사했습니다.
OpenFaaS
Docker 및 Kubernetes에서 실행되는 서버 프레임워크가 없습니다.
함수 자체가 복사되고 실행됩니다.
템플릿 엔진으로 Dockerfile을 만들었지만 Dockerfile을 사용자 정의할 수 있기 때문에 언어가 실행될 때 얽매이지 않고 확장성과 자유도가 매우 높다.
https://github.com/openfaas/faas
faas-netes가 뭐예요?
Kubernetes에서 실행되는 플라스틱 없는 기능을 실현하였으며, Swarm 버전의 실현과는 다르다.
다음 저장소는 faas-netes 배포를 위한 K8S 목록과 Helm 패키지를 제공합니다.
https://github.com/openfaas/faas-netes
실제로 해보겠습니다.
환경
Docker 및 Kubernetes에서 실행되는 서버 프레임워크가 없습니다.
함수 자체가 복사되고 실행됩니다.
템플릿 엔진으로 Dockerfile을 만들었지만 Dockerfile을 사용자 정의할 수 있기 때문에 언어가 실행될 때 얽매이지 않고 확장성과 자유도가 매우 높다.
https://github.com/openfaas/faas
faas-netes가 뭐예요?
Kubernetes에서 실행되는 플라스틱 없는 기능을 실현하였으며, Swarm 버전의 실현과는 다르다.
다음 저장소는 faas-netes 배포를 위한 K8S 목록과 Helm 패키지를 제공합니다.
https://github.com/openfaas/faas-netes
실제로 해보겠습니다.
환경
환경
배치
K8S에 배포하는 방법은 두 가지입니다.
다음 명령을 실행합니다.
$ git clone https://github.com/openfaas/faas-netes && \
cd faas-netes
kubectl apply -f faas.yml -f monitoring.yml -f rbac.yml
Pod 일람표 좀 볼게요.$ kubectl get po
NAME READY STATUS RESTARTS AGE
alertmanager-77b4b476b-qdbl5 1/1 Running 0 14m
faas-netesd-64fb9b4dfb-mqss5 1/1 Running 0 14m
gateway-5cb4f64656-pltpb 1/1 Running 0 14m
prometheus-7fbfd8bfb8-kv98c 1/1 Running 0 14m
FaaS 호스트 및 API 게이트웨이, Prometheus 및 AlertManager가 배포되었습니다.브라우저에서 UI를 보겠습니다.
# Mac限定
$ open http://$(minikube ip):31112/
함수는 여전히 비어 있습니다.
함수 배포를 위해 CLI를 다운로드하십시오.
$ curl -sSL https://cli.openfaas.com | sudo sh
예제를 가져옵니다.$ git clone https://github.com/openfaas/faas-cli && \
cd faas-cli
예시 파일의gateway IP 주소를 minikube 주소로 변경합니다.samples.yml
provider:
name: faas
gateway: [API Gateway の URL。今回はminikube で動作させているので、minikube ip の値(http://IP:31112)に変更します]
network: "func_functions" # this is optional and defaults to func_functions
배치하다.$ faas-cli deploy -f samples.yml
Deploying: nodejs-echo.
No existing function to remove
Deployed.
URL: http://192.168.99.100:31112/function/nodejs-echo
202 Accepted
Deploying: shrink-image.
No existing function to remove
Deployed.
URL: http://192.168.99.100:31112/function/shrink-image
202 Accepted
Deploying: ruby-echo.
No existing function to remove
Deployed.
URL: http://192.168.99.100:31112/function/ruby-echo
202 Accepted
Deploying: url-ping.
No existing function to remove
Deployed.
URL: http://192.168.99.100:31112/function/url-ping
202 Accepted
네 개의 예시 함수를 배치했다.
함수
ruby-echo
의 UI에 텍스트 데이터를 입력하십시오.그리고 200에서 Response로 돌아갑니다.
모든 함수는 K8S의 Pod로 등록되어 있으며,kubectl logs도 볼 수 있습니다.
$ kubectl logs ruby-echo-8d95f97fb-4wkm7
2017/11/27 09:32:39 Writing lock-file to: /tmp/.lock
Hello from your Ruby function. Input: foo bar
Function 제작법
모든 함수는 stdin으로
Text
또는 JSON
function에 전달하고 stdout로 반환합니다.# 各言語ごとのtemplate を取得します
$ faas-cli template pull
# 対応言語一覧
$ faas-cli new --list
Languages available as templates:
- csharp
- go
- go-armhf
- node
- node-arm64
- node-armhf
- python
- python-armhf
- python3
- ruby
Or alternatively create a folder containing a Dockerfile, then pick
the "Dockerfile" lang type in your YAML file.
템플릿에서 Mock을 작성합니다.언어가 이번에 파이썬으로 바뀌었다.$ faas-cli new hello-python --lang=python3
$ vim
hello-python3/handler.py
def handle(st):
print(st)
print("End") #追加
stdin의 값은 매개 변수 형식으로 이handle 함수에 전달되기 때문에 이것에 대해 약간의 처리를 기술하면 됩니다.그리고 함수를 구축합니다.함수는 Docker 이미지이므로 Docker build는 임의로 수행됩니다.
$ faas-cli build -f hello-python3.yml
[0] > Building: hello-python3.
....
Image: hello-python3 built.
[0] < Builder done.
--image
옵션 또는 hello-python3.yml
파일을 변경하여 이미지 이름 변경을 설정할 수 있습니다.hello-python3.yml
provider:
name: faas
gateway: [API Gateway の URL。今回はminikube で動作させているので、minikube ip の値(http://IP:31112)に変更します]
functions:
hello-python3:
lang: python3
handler: ./hello-python3
image: [Customイメージ名]
이미지 이름을 적절하게 변경하여 Docker 저장소로 밀어넣습니다.docker push
도 가능합니다.$ faas-cli push -f hello-python3.yml
배치하다.$ faas-cli deploy -f hello-python3.yml
Deploying: hello-python3.
No existing function to remove
Deployed.
URL: http://192.168.99.100:31112/function/hello-python3
202 Accepted
사용자 인터페이스에 함수를 표시하고 입력한 후 표준 출력으로 돌아갑니다.그렇다면 이것만으로는 Kubernetes와의 연관성이 잘 알려지지 않아 재미가 없다.
Kubernetes에서 어떤 구조 동작으로 계속 Z Lab Advent Calendar 2017 전송합니까?
Reference
이 문제에 관하여(Kubernetes 클러스터에서 OpenFaaS 시도), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/TakanariKo/items/300bf690181fc647a10d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)