前回の投稿ではKubernetesのクラスタをRKE(Rancher Kubernetes Engine)を使ってデプロイしました。今回の投稿ではそのクラスタの上でOSSなServerlessプラットフォームであるOpenFaaSを動かしたいと思います。

OpenFaaSの詳細に関してはまた別の機会に紹介したいと思いますが、英語が読める方はぜひ「Getting started with OpenFaaS on minikube」を一読されることをおすすめします。この投稿ではminikubeではなく、本物のKubernetesクラスタ上でデプロイすることになります。

前提

この投稿は以下を前提としています:

  • 前回の投稿を読んでいる
  • お使いのマシンの kubectl前回作ったKubernetesクラスタに向いている
  • Helmがインストール済みである

Helmを使ってOpenFaaSをデプロイ

まずはHelmを使えるようにするためにクラスタにtillerをインストールします。tillerのService Accountを作りましょう:

kubectl -n kube-system create sa tiller \
 && kubectl create clusterrolebinding tiller \
 --clusterrole cluster-admin \
 --serviceaccount=kube-system:tiller
# serviceaccount “tiller” created
# clusterrolebinding “tiller” created

その後tillerをインストールします:

helm init —-skip-refresh --upgrade --service-account tiller
# $HELM_HOME has been configured at /Users/fukuyamaken/.helm.
# Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.
# Happy Helming!

これが成功したらOpenFaaSのfaas-netesリポジトリをcloneします。faas-netesはOpenFaaSをKubernetesで使うための拡張機能だと思って下さい。このリポジトリにHelmでデプロイするためのファイル群が用意されています。

git clone https://github.com/openfaas/faas-netes && \
cd faas-netes

そして、OpenFaaSをクラスタにデプロイします。このクラスタではrbacがちゃんと設定されていないので --set rbac=false をオプションで渡していることに注意してください。

helm upgrade --install --debug --reset-values --set rbac=false --set async=false openfaas openfaas/

正常にデプロイできていれば kubectl get svc,deploymentsでOpenFaaS関連のServiceやDeploymentが動いているのが確認できます:

NAME                        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
svc/alertmanager            ClusterIP   10.233.18.46    <none>        9093/TCP         4m
svc/alertmanager-external   NodePort    10.233.1.242    <none>        9093:31113/TCP   4m
svc/faas-netesd             ClusterIP   10.233.37.207   <none>        8080/TCP         4m
svc/faas-netesd-external    NodePort    10.233.26.167   <none>        8080:31111/TCP   4m
svc/gateway                 ClusterIP   10.233.55.73    <none>        8080/TCP         4m
svc/gateway-external        NodePort    10.233.57.162   <none>        8080:31112/TCP   4m
svc/kubernetes              ClusterIP   10.233.0.1      <none>        443/TCP          2h
svc/prometheus              ClusterIP   10.233.46.236   <none>        9090/TCP         4m
svc/prometheus-external     NodePort    10.233.15.159   <none>        9090:31119/TCP   4m
NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/alertmanager   1         1         1            1           4m
deploy/faas-netesd    1         1         1            1           4m
deploy/gateway        1         1         1            1           4m
deploy/prometheus     1         1         1            1           4m

実行してみよう!

OpenFaaSがKubernetes上にデプロイできたところで実際に使ってみましょう!ブラウザでWorkerノードのポート31112にアクセスしてください(今回の環境では203.104.227.60:31112)。OpenFaaSのGatewayのUIが表示されるはずです。
1_UXiddLMFmoL3z_7JoOiKBA

では、Function StoreにプリセットされてるFunctionをデプロイしてみましょう。Johnny Mkhael氏が作ったFigletというFunctionを今回は選びます。
1_6zHFYzaLsOT5rvCKYUI3Mw

デプロイができたらUIをリフレッシュしてください。figletのFunctionが表示されるはずです。このFunctionに対してUI経由でリクエストを投げてみましょう!今回は

OpenFaaS
Kubernetes
RKE

という文字列を送信します。Invokeを押したら以下のようにレスポンスが返ってくるはずです。
1_aeTOho22nStqm2oXKLVfhw

OpenFaaSをRKEでデプロイしたKubernetes上で動かすことができました!オンプレで1コア1GB RAMな環境でもちゃんと動いてるのでノートPCでも開発時に使えそうです。(ただし、CPUやメモリを割と使うFunctionは実行できない可能性が高いです。その場合はノードのスペックを上げて下さい)

おわりに

2部構成でKubernetesをRKEでデプロイし、さらにその上にOpenFaaSをデプロイする方法を書きました。複雑な手順はそれほどなかったと思いますがいかがでしょうか?まだまだ考慮すべき点は多数ありますが、一種のスタート地点として役に立つ情報になればと思います!

© 2018. SuperSoftware Co., Ltd. All Rights Reserved.