Alibaba Cloud Container Service for KubernetesによるKnative Servingの構築とAutomatic Scalingの実装について
Alibaba Cloud Container Service for KubernetesでKnativeを体験する方法をご紹介します。
Knative Servingは、サーバーレスアプリケーションと機能のデプロイとサービングをサポートするために、KubernetesとIstio上に構築されたゼロスケールのリクエスト駆動型コンピューティングランタイム環境です。KnativeServingは、サーバーレスワークロードをデプロイして実行するためのKubernetes拡張機能を提供することを目的としています。
この投稿では、Knative Servingを素早く構築し、Alibaba Cloud Container Service for Kubernetesで自動スケーリングを実装する方法を説明します。
Knative Servingの構築
ステップ1:Kubernetes環境の準備
Alibaba Cloud Container Service for Kubernetesのバージョン1.11.5がリリースされました。コンソールを使用して、素早く簡単にKubernetesクラスタを作成することができます。詳細については、Kubernetesクラスタの作成を参照してください。
ステップ2:Istioの導入
Knative ServingはIstio上で動作します。現在、Alibaba Cloud Container Service for Kubernetesでは、ワンクリックでIstioをすばやくインストールして構成することができます。やり方がよくわからない場合は、Deploy Istioを参照してください。
Container Service - Kubernetes console
にログオンします。左側のナビゲーションペインで、「Cluster」を選択し、さらに「Cluster」を選択して「Clusters」ページに移動します。そして、クラスタを選択し、Actions欄でMore、Deploy Istioの順に選択してください。
「Deploy Istio」のページに表示されるパラメータを設定し、完了したら「Deploy Istio」をクリックします。数秒から1分ほどで、Istio環境がデプロイされます。実際にデプロイされたことを確認するには、コンソールでポッドの状態を確認します。下図のような画面が表示されます。
ステップ3:Istio Ingress Gatewayの導入
このステップでは、Container Service - Kubernetes console
にログオンします。左側のナビゲーションペインで、「Marketplace」を選択し、「App Catalog」を選択します。表示されたページで、ack-istio-ingressgatewayを見つけてクリックします。下の赤い四角で囲ったものがそれです。
「Parameters」タブをクリックします。Istio Ingress Gatewayのデフォルト設定が提供されます。特定の要件に基づいてこれらのパラメータを変更し、「作成」をクリックします。
istio-system
名前空間のポッドリストを見て、稼働状況を確認します。以下のように表示されているはずです。
ステップ4:Knative CRDのデプロイ
Container Service - Kubernetes console
にログオンします。左側のナビゲーションペインで、[Marketplace]を選択し、[App Catalog]を選択します。表示されたページで、ack-knative-initを見つけてクリックします。
「Create」をクリックすると、Custom Resource Definitions(CRD)など、Knativeの初期化に必要なコンテンツがインストールされます。
ステップ5:Knative Servingのデプロイ
Container Service - Kubernetes console
にログオンします。左側のナビゲーションペインで、[Marketplace]を選択し、[App Catalog]を選択します。表示されるページで、ack-knative-servingを見つけてクリックします。
次に、「Parameters」タブをクリックします。Istio Ingress Gatewayのデフォルト設定が用意されています。必要に応じてこれらのパラメータを変更し、「Create」をクリックします。
これで、Knative Servingのインストールに必要な4つのHelmチャートがインストールされました。これはコンソールで確認してください。
Knativeの体験
ステップ1:サンプルのAutoscaleアプリにKnative Serviceを導入する
このステップでは、以下のコマンドを実行して、サンプルのオートスケール・アプリにKnative Serviceをデプロイします。
kubectl create -f autoscale.yaml
autoscale.yamlファイルの内容は以下の通りです。
apiVersion: serving.knative.dev/v1alpha1
kind: Service
metadata:
name: autoscale-go
namespace: default
spec:
runLatest:
configuration:
revisionTemplate:
metadata:
annotations:
# Target 10 in-flight-requests per pod.
autoscaling.knative.dev/target: "10"
autoscaling.knative.dev/class: kpa.autoscaling.knative.dev
spec:
container:
image: registry.cn-beijing.aliyuncs.com/wangxining/autoscale-go:0.1
ステップ2:サンプルのAutoscaleアプリのKnativeサービスへのアクセス
このステップでは、エントリーのホスト名とIPアドレスを見つけて、環境変数としてエクスポートします。
export IP_ADDRESS=`kubectl get svc istio-ingressgateway --namespace istio-system --output jsonpath="{.status.loadBalancer.ingress[*].ip}"`
autoscaleアプリにリクエストを送り、リソースの消費量を確認します。
curl --header "Host: autoscale-go.default.{domain.name}" "http://${IP_ADDRESS?}?sleep=100&prime=10000&bloat=5"
注:{domain.name}は、ドメイン名のサフィックスに置き換えてください。デフォルトの例では、サフィックスはaliyun.com
です。
curl --header "Host: autoscale-go.default.aliyun.com" "http://${IP_ADDRESS?}?sleep=100&prime=10000&bloat=5"
Allocated 5 Mb of memory.
The largest prime less than 10000 is 9973.
Slept for 100.16 milliseconds.
以下のコマンドを実行してロードジェネレーターをインストールします。
go get -u github.com/rakyll/hey
50件の同時リクエストを維持し、30秒間トラフィックを送信します。
hey -z 30s -c 50 \
-host "autoscale-go.default.aliyun.com" \
"http://${IP_ADDRESS?}?sleep=100&prime=10000&bloat=5" \
&& kubectl get pods
30秒の間に、リクエスト数の増加に伴い、Knative Serviceが自動的にスケールアップしていることがわかります。
Summary:
Total: 30.1126 secs
Slowest: 2.8528 secs
Fastest: 0.1066 secs
Average: 0.1216 secs
Requests/sec: 410.3270
Total data: 1235134 bytes
Size/request: 99 bytes
Response time histogram:
0.107 [1] |
0.381 [12305] |°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ°ˆ
0.656 [0] |
0.930 [0] |
1.205 [0] |
1.480 [0] |
1.754 [0] |
2.029 [0] |
2.304 [0] |
2.578 [27] |
2.853 [23] |
Latency distribution:
10% in 0.1089 secs
25% in 0.1096 secs
50% in 0.1107 secs
75% in 0.1122 secs
90% in 0.1148 secs
95% in 0.1178 secs
99% in 0.1318 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0001 secs, 0.1066 secs, 2.8528 secs
DNS-lookup: 0.0000 secs, 0.0000 secs, 0.0000 secs
req write: 0.0000 secs, 0.0000 secs, 0.0023 secs
resp wait: 0.1214 secs, 0.1065 secs, 2.8356 secs
resp read: 0.0001 secs, 0.0000 secs, 0.0012 secs
Status code distribution:
[200] 12356 responses
NAME READY STATUS RESTARTS AGE
autoscale-go-00001-deployment-5fb497488b-2r76v 2/2 Running 0 29s
autoscale-go-00001-deployment-5fb497488b-6bshv 2/2 Running 0 2m
autoscale-go-00001-deployment-5fb497488b-fb2vb 2/2 Running 0 29s
autoscale-go-00001-deployment-5fb497488b-kbmmk 2/2 Running 0 29s
autoscale-go-00001-deployment-5fb497488b-l4j9q 1/2 Terminating 0 4m
autoscale-go-00001-deployment-5fb497488b-xfv8v 2/2 Running 0 29s
概要
この記事で示したように、Alibaba CloudのContainer Service for Kubernetesをベースに、Knative Servingを素早く構築し、自動スケーリングを実装することができます。ぜひ、Alibaba Cloud Container Serviceを使ってKnative Servingを素早く構築し、プロジェクト開発に簡単に組み込んでみてください。
本ブログは英語版からの翻訳です。オリジナルはこちらからご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。
アリババクラウドは日本に2つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ
Author And Source
この問題について(Alibaba Cloud Container Service for KubernetesによるKnative Servingの構築とAutomatic Scalingの実装について), 我々は、より多くの情報をここで見つけました https://qiita.com/KentOhwada_AlibabaCloudJapan/items/4c5a4ed1c18805e5ae62著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .