1月上旬にKnativeハンズオンが公開されたので、発表当初から気になっていたのもありやってみた。ハンズオンでできることと、Knativeのことについてまとめておく。ちなみに、Knativeは当然だが、Kubernetesを触ってみたのも今回が初めて。
目次
Knativeとは?
Google Cloud Next'18で発表されたコンテナ実行環境上でサーバレスを提供するOSS。Kubernetesが提供しているカスタムリソース定義(CRD)を使ったAPI群とOSSのセットであり、Kubernetes上で簡易にPaaS/FaaS環境を実現できるようになるというもの。
背景
Knativeが出てきた背景は、以下にある記事を読むと、目的としてはサーバレスにおけるクラウドのロックイン回避と運用ロジック(API)の標準化。インフラ環境としてどこを使ってもよいが、その上で動作させるソフトウェアを運用するロジックは標準化(OSS化)させるべきという考えらしい。
Google Cloudは以前から、クラウドベンダーロックイン回避のため、GCPをいつ始めても止めても構わないという話もしているし、そのためにKubernetesも提供しているので、サーバレスにおいて似たような背景からKnativeを出したのは自然な流れだと思う。
できること
Knativeでできることは以下3種類のAPIで提供されている機能となる。
(Knativeハンズオンから引用)
ざっと読んだ感じ、今までGoogle App Engine、Cloud FunctionsやAWS Lambdaで提供されている機能を自前で用意しなくても、Kubernetesを使っていればAPIベースで簡単に使えるようになると読める。
直近の動き
Kanative関連の直近(2019/1/15)で大きなニュースは以下2つあり、Knativeを拡張した新たなサーバレス環境や既存FaaSの互換環境を提供するなど、サーバレス界隈の中心となっているように見える。
Knativeハンズオン概要
ここからハンズオンの内容に入る。実施にあたって、Kubernetesを動かす環境が必要なる。Googleのcodelabsだからだと思うが、GKEベースでのハンズオンとなっている。また、CLIもGCPのCloud Shellを推奨している。もし、他環境で試したい場合はGitHubのインストールガイドにドキュメントがある。また、Kubernetesの基礎知識と、できればIstioの知識もあると理解しやすい。
所要時間は、GKEとKubernetesを初めて触る私で3~4時間。ただし、コマンドの意味を知るために別の記事を読むなどの脱線を含めた時間。
codelabs.developers.google.com
ハンズオンで実施することは以下の通り。基礎知識の学習とKnative Eventingを除いたAPIの基本機能を試すことができる内容となっている。
- Knative概要と機能の学習
- Knativeインストール(Kubernetesクラスタ作成を含む)
- KnativeへのWebアプリケーションのデプロイ
- オートスケール機能利用とPodの監視
- Knative Servingを使ったBlue/Greenデプロイ
- Knative Buildを使ったビルドのテンプレート化
所感は後述するが、パブリッククラウドを使った場合はハンズオン後忘れずにKubernetesクラスタを削除しましょう。GKE未経験だったので詳しく知らなかったが、裏でGCEが動いており、放置するとノード数分課金されます。
Knativeハンズオンの一例
ハンズオンにある内容なので、詳細は割愛するが、インストールは以下のコマンドを使うことで実行できる。
Knativeインストール
1.Istioインストール
kubectl apply --filename https://raw.githubusercontent.com/knative/serving/v0.2.1/third_party/istio-1.0.2/istio.yaml
kubectl label namespace default istio-injection=enabled
kubectl get pods --namespace=istio-system
ハンズオンでIstioインストール後のpodの状態
username@cloudshell:~ (project name)$ kubectl get pods --namespace=istio-system
NAME READY STATUS RESTARTS AGE
istio-citadel-746c765786-bc8jd 1/1 Running 0 25m
istio-cleanup-secrets-bqchr 0/1 Completed 0 25m
istio-egressgateway-7b46794587-npc57 1/1 Running 0 25m
istio-galley-75c6976d79-8cb8h 1/1 Running 0 25m
istio-ingressgateway-57f76dc4db-pb5vz 1/1 Running 0 25m
istio-pilot-6495978c49-68j4t 2/2 Running 0 25m
istio-policy-6677c87b9f-mprxf 2/2 Running 0 25m
istio-sidecar-injector-879fd9dfc-r49wz 1/1 Running 0 25m
istio-statsd-prom-bridge-549d687fd9-d64sd 1/1 Running 0 25m
istio-telemetry-7d46d668db-2df7p 2/2 Running 0 25m
2.Knative(Serving&Build)のインストール
kubectl apply --filename https://github.com/knative/serving/releases/download/v0.2.1/release.yaml
kubectl get pods --namespace=knative-serving
kubectl get pods --namespace=knative-build
ハンズオンでKnativeインストール後のpodの状態
username@cloudshell:~ (project name)$ kubectl get pods --namespace=knative-serving
NAME READY STATUS RESTARTS AGE
activator-db79694db-lnjfv 2/2 Running 0 6m
activator-db79694db-n4hds 2/2 Running 0 6m
activator-db79694db-tbw9k 2/2 Running 0 6m
autoscaler-86d954bffc-hznf5 2/2 Running 0 6m
controller-5cc6f8cc95-rzm6k 1/1 Running 0 6m
webhook-654c8d7bff-kcdqm 1/1 Running 0 6m
username@cloudshell:~ (project name)$ kubectl get pods --namespace=knative-build
NAME READY STATUS RESTARTS AGE
build-controller-79d6cc9d57-j2vhd 1/1 Running 0 6m
build-webhook-f97d479f9-mdt27 1/1 Running 0 6m
所感
ハンズオンをやってみて、以下の様に感じた(薄い感想)。
- GAEでできること(Blue/Greenデプロイ)が、環境を選ばずに簡単に準備できるのは便利そう。
- GKEを使ってKubernetesクラスタを構築するの簡単だった(Knative関係ない)。
- Knative環境には、複数のサービスが動いており、リソースと運用が大変そう。(Kubernetes、Istio以外に、監視サービスのためにPrometheusとGrafanaがデフォルトでインストールされ動作している。)
次やってみたいこと
- Kubernetesのハンズオンと学習(時間あれば程度)
- Knative Eventingのサンプル実施