knativeのクイックスタートチュートリアルをなぞって20分で試す

2023/07/02に公開

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

参考

https://knative.dev/docs/install/quickstart-install/#run-the-knative-quickstart-plugin

Discussion