Knativeとは
Kubernetes上でサーバーレスなアプリケーションをデプロイ・実行・管理するコンポーネントセットです
開発者が複雑なインフラストラクチャを気にせずコードに集中するための環境を提供してくれます
- ゼロスケーリングと自動スケール
- Kubernetes上であればベンダーロックインされない
- 一般的な言語やフレームワークの多くをサポート
コンテナの実行とスケーリング、リビジョン管理に関するServingと、イベントのサブスクリプションを管理するEventing、2つのコンポーネントから構築されます
ローカル環境でKnativeを構築してコンテナのデプロイと実行を試してみます
環境
macOS Big Sur 11.4
Knativeの構築
※quickstart
プラグインが出ているので、以下手順は少し古い
事前準備
$ brew install kind
$ brew install kubectl
$ brew install knative/client/kn
$ curl -sL install.konk.dev | bash
# 割と時間かかる
確認
$ kind get clusters
knative
# ネームスペースと複数のリソースが作成されてる
$ kubectl get ns | grep knative
knative-eventing Active 3m40s
knative-serving Active 5m8s
$ kubectl get all -n knative-serving
NAME READY STATUS RESTARTS AGE
3scale-kourier-control-5b464bcd66-4snkz 1/1 Running 0 4m50s
activator-8bf774c58-tw8kt 1/1 Running 0 5m32s
...
$ kubectl get all -n knative-eventing
NAME READY STATUS RESTARTS AGE
pod/eventing-controller-8548bbf497-6ggpg 1/1 Running 0 4m42s
pod/eventing-webhook-5fffb9c9cf-6bqzc 1/1 Running 0 4m41s
...
アプリケーションのデプロイと実行
$ kn service create hello \
--image gcr.io/knative-samples/helloworld-go \
--port 8080 \
--env TARGET=World \
--revision-name=world
$ curl http://hello.default.127.0.0.1.nip.io
Hello World!
# デフォルトのネームスペースにPodが立ち上がってる
$ kubectl get po
NAME READY STATUS RESTARTS AGE
hello-world-deployment-7c68546989-x4gk8 2/2 Running 0 105s
ゼロスケーリングの確認
PodをwatchしているとしばらくしてPodが削除されます
Podが存在しない状態で先程のエンドポイントを叩くと再度Podが作成されます
$ kubectl get pod -l serving.knative.dev/service=hello -w
NAME READY STATUS RESTARTS AGE
hello-world-deployment-7c68546989-2fslw 2/2 Running 0 52s
hello-world-deployment-7c68546989-2fslw 2/2 Terminating 0 63s
hello-world-deployment-7c68546989-2fslw 1/2 Terminating 0 65s
hello-world-deployment-7c68546989-2fslw 0/2 Terminating 0 96s
hello-world-deployment-7c68546989-bzv8g 0/2 Pending 0 0s
hello-world-deployment-7c68546989-bzv8g 0/2 Pending 0 0s
hello-world-deployment-7c68546989-bzv8g 0/2 ContainerCreating 0 0s
hello-world-deployment-7c68546989-bzv8g 1/2 Running 0 1s
hello-world-deployment-7c68546989-bzv8g 1/2 Running 0 2s
hello-world-deployment-7c68546989-bzv8g 2/2 Running 0 3s
構築した環境の削除
$ kn service delete hello
$ kind delete clusters knative
まとめ
割と簡単に試せました
本番環境に構築する際は以下のドキュメントが参考になります
https://knative.dev/docs/admin/install/
最後に、こちらの記事で詳細にKnativeの解説がされています