uni farm

docker swarmでOpenFaaSしてみる

docker swarmでOpenFaaSを起動するまでやってみた

環境

  • macOS: 10.13.2
  • docker: 17.12.0-ce(edge)

(docker swarmを使うので、kubernetesは無効にしておく)

OpenFaaSとは

OpenFaaSはサーバレスな環境をコンテナ上に立ち上げることができるらしい

dockerやkubernetesで使うことができる

openfaas実行

公式リポジトリopenfaasから docker-compose.ymlを使用する

docker stack deploy openfaas --compose-file docker-compose.yml
Deploying stack
this node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to swarm and try again

docker swarm initしろと出るので

docker swarm init

してから再度実行

docker stack deploy openfaas --compose-file docker-compose.yml
Creating network openfaas_functions
...

起動確認

docker stack ls
NAME                SERVICES
openfaas            13

docker service ls
ID                  NAME                    MODE                REPLICAS            IMAGE                              PORTS
7tauwqmyfngi        openfaas_alertmanager   replicated          1/1                 functions/alertmanager:latest      
5yrsvzmtzof8        openfaas_base64         replicated          1/1                 functions/alpine:latest            
dqxnp6k90led        openfaas_decodebase64   replicated          1/1                 functions/alpine:latest            
zgutt6nx5a29        openfaas_echoit         replicated          1/1                 functions/alpine:latest            
hwxu40pb1yhp        openfaas_gateway        replicated          1/1                 functions/gateway:0.6.15           *:8080->8080/tcp
vgkvm1j36akb        openfaas_hubstats       replicated          1/1                 functions/hubstats:latest          
ur7xnkltewia        openfaas_markdown       replicated          1/1                 functions/markdown-render:latest   
rvwzc5spx1ji        openfaas_nats           replicated          1/1                 nats-streaming:0.6.0               
o5ukfp1m87dx        openfaas_nodeinfo       replicated          1/1                 functions/nodeinfo:latest          
frehmta5wlzh        openfaas_prometheus     replicated          1/1                 functions/prometheus:latest        *:9090->9090/tcp
2sh2viw9gyh9        openfaas_queue-worker   replicated          1/1                 functions/queue-worker:0.4         
m50lssbogwad        openfaas_webhookstash   replicated          1/1                 functions/webhookstash:latest      
y26jotv62yb7        openfaas_wordcount      replicated          1/1                 functions/alpine:latest        

各コンテナの中身

何が立ち上がったのかみてみる

service群
  • gateway

guiでopenfaasに登録する関数の管理ができる http://localhost:8080 にアクセスすると表示される

openfaas home

  • prometheus

コンテナ監視ツール。何回関数が呼び出されたか、など可視化することができる http://localhost:9090 にアクセスすると表示される

openfaas prometheus

  • alertmanager

prometheusの監視メトリクスに対して、アラートの設定ができる

docker-compose.yml、alertmanagerのports部分のコメントアウトを外すことでguiを使うことができる

http://localhost:9093にアクセスすると表示される

docker-compose.yml(一部抜粋)
    alertmanager:
        image: functions/alertmanager:latest    # autobuild from Dockerfile in repo.
        environment:
            no_proxy: "gateway"
        command:
            - '-config.file=/alertmanager.yml'
        networks:
            - functions
        # Uncomment the following port mapping if you wish to expose the Prometheus
        # Alertmanager UI.
        ports:
            - 9093:9093

openfaas alert managet

  • nats, queue-worker

下をみる感じ、非同期通信を実現するためのもの?

https://github.com/openfaas/nats-queue-worker

function群
  • base64

テキストをbase64でエンコードして返す

curry
↓
Y3Vycnk=
  • decodebase64

テキストをbase64でデコードして返す

Y3Vycnk=
↓
curry
  • webhookstash

リクエストを送った時刻を返す

↓
Stashing request: 1516640331032477615.txt
  • nodeinfo

動作しているnode(Host)の情報を返す

Hostname: e60ac060e700

Platform: linux
Arch: x64
CPU count: 2
Uptime: 45755
  • markdown

markdownテキストをhtmlにして返す

# curry<h1>curry</h1>
  • hubstats

指定したuser or organisationのdocker hubの情報を返す

google
↓
The organisation or user google has 35 repositories on the Docker hub.
  • wordcount

文字数カウント、各カラムはwcコマンドと同じ出力になっており テキストの行数、単語数、バイト数を表す

curry
↓
0         1         5
  • echoit

echoサーバ

curry
↓
curry

参考

2022, Built with Gatsby. This site uses Google Analytics.