LoginSignup
0
0

More than 3 years have passed since last update.

Alibaba Cloud Container Service for KubernetesによるKnative Servingの構築とAutomatic Scalingの実装について

Posted at

Alibaba Cloud Container Service for KubernetesKnativeを体験する方法をご紹介します。

Knative Servingは、サーバーレスアプリケーションと機能のデプロイとサービングをサポートするために、KubernetesIstio上に構築されたゼロスケールのリクエスト駆動型コンピューティングランタイム環境です。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の順に選択してください。

image.png

「Deploy Istio」のページに表示されるパラメータを設定し、完了したら「Deploy Istio」をクリックします。数秒から1分ほどで、Istio環境がデプロイされます。実際にデプロイされたことを確認するには、コンソールでポッドの状態を確認します。下図のような画面が表示されます。

image.png

ステップ3:Istio Ingress Gatewayの導入

このステップでは、Container Service - Kubernetes consoleにログオンします。左側のナビゲーションペインで、「Marketplace」を選択し、「App Catalog」を選択します。表示されたページで、ack-istio-ingressgatewayを見つけてクリックします。下の赤い四角で囲ったものがそれです。

image.png

「Parameters」タブをクリックします。Istio Ingress Gatewayのデフォルト設定が提供されます。特定の要件に基づいてこれらのパラメータを変更し、「作成」をクリックします。

image.png

istio-system名前空間のポッドリストを見て、稼働状況を確認します。以下のように表示されているはずです。

image.png

ステップ4:Knative CRDのデプロイ

Container Service - Kubernetes consoleにログオンします。左側のナビゲーションペインで、[Marketplace]を選択し、[App Catalog]を選択します。表示されたページで、ack-knative-initを見つけてクリックします。

image.png

「Create」をクリックすると、Custom Resource Definitions(CRD)など、Knativeの初期化に必要なコンテンツがインストールされます。

image.png

ステップ5:Knative Servingのデプロイ

Container Service - Kubernetes consoleにログオンします。左側のナビゲーションペインで、[Marketplace]を選択し、[App Catalog]を選択します。表示されるページで、ack-knative-servingを見つけてクリックします。

image.png

次に、「Parameters」タブをクリックします。Istio Ingress Gatewayのデフォルト設定が用意されています。必要に応じてこれらのパラメータを変更し、「Create」をクリックします。

image.png

これで、Knative Servingのインストールに必要な4つのHelmチャートがインストールされました。これはコンソールで確認してください。

image.png

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ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
アリババクラウドジャパン公式ページ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0