✨
knativeのクイックスタートチュートリアルをなぞって20分で試す
knativeとは
- kubernetes上に構築できるサーバレスフレームワーク
- Knative ServingとKnative Eventingの二つに大きく分けられる
- Serving
- アプリケーションの異なるリビジョンを管理することで、トラフィックの分断やロールバックが可能になる
- Eventing
- イベント駆動アーキテクチャをサポートする
- 様々なイベント(AWSS3への配置、Kafkaへのメッセージ受信、Cron、KubernetesAPIなど)をトリガーにリソース起動が可能になる
インストール
必要ツールインストール
brew reinstall kn
brew install knative-sandbox/kn-plugins/quickstart
クラスタ起動
kn quickstart kind
クラスタ確認
kind get clusters
マニフェストファイルインストール
kn service create hello \
--image ghcr.io/knative/helloworld-go:latest \
--port 8080 \
--env TARGET=World
オートスケール
リソースの確認
kn service list
エンドポイントへのアクセス
echo "Accessing URL $(kn service describe hello -o url)"
curl "$(kn service describe hello -o url)"
標準出力
Hello World!
エンドポイントへアクセスしない場合は、自動的にPodがTerminateされ、スケールインしていく。
kubectl get pod -l serving.knative.dev/service=hello -w
NAME READY STATUS RESTARTS AGE
hello-00001-deployment-86f5595786-lltjw 2/2 Running 0 71s
hello-00001-deployment-86f5595786-lltjw 2/2 Terminating 0 96s
hello-00001-deployment-86f5595786-lltjw 1/2 Terminating 0 2m
hello-00001-deployment-86f5595786-lltjw 0/2 Terminating 0 2m6s
hello-00001-deployment-86f5595786-lltjw 0/2 Terminating 0 2m6s
hello-00001-deployment-86f5595786-lltjw 0/2 Terminating 0 2m6s
アクセスするとスケールアウトされる。
NAME READY STATUS RESTARTS AGE
hello-00001-deployment-86f5595786-thfqv 2/2 Running 0 24s
トラフィックでの分断
- ブルーグリーンデプロイメントができるように、リビジョンごとにルーティングの割合を指定して振り分けることができる
マニフェストファイルの内容を書き換えてリビジョンを上げる
kn service update hello \
--env TARGET=Knative
エンドポイントへアクセスする
echo "Accessing URL $(kn service describe hello -o url)"
curl "$(kn service describe hello -o url)"
標準出力
Hello Knative!
リビジョンの確認
kn revisions list
標準出力を確認すると2つのリビジョンが表示され、新しいリビジョンのトラフィックが100%となっている
NAME SERVICE TRAFFIC TAGS GENERATION AGE CONDITIONS READY REASON
hello-00002 hello 100% 2 2m2s 3 OK / 4 True
hello-00001 hello 1 15m 3 OK / 4 True
50:50でトラフィックをリビジョンごとに振り分ける
kn service update hello \
--traffic hello-00001=50 \
--traffic @latest=50
リビジョンの確認
kn revisions list
標準出力を確認すると、50%50%で振り分けられるようになっている。
NAME SERVICE TRAFFIC TAGS GENERATION AGE CONDITIONS READY REASON
hello-00002 hello 50% 2 3m34s 3 OK / 4 True
hello-00001 hello 50% 1 17m 3 OK / 4 True
Podの確認
k get pod -n default
リビジョン1と2の内容が交互に表示される
Hello Knative!
Hello World!
標準出力
NAME READY STATUS RESTARTS AGE
hello-00001-deployment-86f5595786-qh7nb 2/2 Running 0 23s
hello-00002-deployment-558697774f-d5sk2 2/2 Running 0 25s
参考
Discussion