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

실제로 해보겠습니다.


환경

  • minikube:v0.23.0
  • kubernetes Master:v1.8.0
  • openfaas:v0.5
  • 배치


    K8S에 배포하는 방법은 두 가지입니다.
  • 1.Manifest 배포 사용
  • 2.Helm template 배포 사용
  • 이번에는 1 Manifest 배포에서 수행되었습니다.
    다음 명령을 실행합니다.
    $ 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 또는 JSONfunction에 전달하고 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 전송합니까?

    좋은 웹페이지 즐겨찾기