KubernetesとIstioに基づくServerlessフレームワークKnative解析のAutoscaler

6305 ワード

Kubernetesのリソースオブジェクトはautoscalerと呼ばれていることを知っています.このオブジェクトはserverlessアーキテクチャの中でさらに欠かせません.アプリケーションの自動水平伸縮を担当することができます.ユーザーは例の個数とリソース消費に関心を持つ必要はありません.本文はアリババUC事業群基礎研究開発部の陳有坤さんがKnativeの解析に対するautoscaler部分です.また、大量の解析が放出を待っており、当駅の後続内容に注目している.
Knativeは、現代serverlessアプリケーションの構築、導入、管理のためのKubernetesベースのプラットフォームです.このフレームワークは、クラウドの原生応用開発の以下の3つの分野のベストプラクティスを結びつけようとしています.
  • 構築コンテナ(および関数)
  • ワークロードのサービス(および動的拡張)
  • イベント
  • KnativeはグーグルがPivotal、IBM、Red Hat、SAPと緊密に協力して開発した.
    KnativeはKubernetesとIstioの上に構築され、開発者、運営者、プラットフォームプロバイダなど、さまざまな役割がこのフレームワークを通じて相互作用することを考慮して設計されています.
    Knativeに関連するロール(画像はKnative GitHub倉庫から)
    Knativeは、再利用可能な「汎用モードとベストプラクティスの組み合わせ」の実装に力を入れています.現在使用可能なコンポーネントは次のとおりです.
  • Build:ソースからコンテナへの構築編成;
  • Eventing:イベントの管理と配信
  • サービング:ドライバを要求する計算で、ゼロにスケールできます.

  • 以上の内容は、InfoQ|Googleが発表したKnative:Server lessワークロードの構築、導入、管理に使用されるKubernetesフレームワーク
    以上、Knativeの基本的な紹介ですが、Knativeの詳細についてはGitHub:githubに注目してください.我々は...
    まず、サービングのAutoscalingコンポーネントを解析します.このコンポーネントの機能は、ネットワークトラフィックに基づいてアプリケーションインスタンスの数を自動的に伸縮することです.
    Knativeはどのように伸縮容量を作りますか?
    伸縮容量の問題を処理するには、まず解決しなければならない問題は、どのような指標に基づいて伸縮容量を判断するかです.cpu、メモリ、リクエスト数?ここでknativeはリクエスト数を用いている.
    次に伸縮の多少の問題です.
    Knativeの伸縮はdeploymentを修正するreplica数に依存して実現される.
    リクエスト数の収集方法
    revisionのpodを起動すると、autoscalerも起動します(knative revisionはautoscalerが1つしか起動しません).autoscaler自体も要求数統計を受信し、伸縮容量を処理するためにscaleから0になります.
    ビジネスpodにはqueue-proxy sidecarが注入され、リクエストを受信します.ここではコンカレント数を統計し、autoscalerに毎秒報告し、受信したリクエストはビジネスcontainerに転送されます.
    注意:単一テナント・モード次のrevisionでautoscalerを起動し、マルチテナントでautoscalerを共有します.
    計算にはpodの個数が必要ですか?
    Autoscalerが同時統計を受信すると,アルゴリズムに基づいて必要なpod個数が計算される.
    アルゴリズムにはpanicとstableモードの2つのモードがあり,1つは短時間,1つは長時間であり,短時間で要求が急増するシーンを解決するためには高速拡張が必要である.
    ドキュメントに記載されているアルゴリズムは、デフォルトのtarget concurrencyが1であり、revision 35 QPSの場合、要求ごとに0.25秒がかかり、Knative Servicesは9 podが必要であると感じている.
    ceil(35 * .25) = ceil(8.75) = 9
    

    Stable Mode(安定モード)
    安定モードでは、Autoscalerはpodごとに所望の同時性に応じてDeploymentのコピー数を調整する.podの数が増加し、podがサービス可能になり、指標データを提供するのに一定の時間間隔があるため、既存のコピー個数に基づいて計算するのではなく、各podの60秒ウィンドウ内の平均同時計算に基づいて計算する.
    Panic Mode(パニックモード)
    Panicタイムウィンドウのデフォルトは6秒で、6秒以内に所望の2倍の同時に達するとパニックモードに移行します.パニックモードでは、Autoscalerはこの6秒のタイムウィンドウに基づいて計算され、バーストのトラフィック要求にタイムリーに応答することができます.2秒ごとにDeploymentのコピー数を所望のpod個数(または現在のpodの最大10倍)に調整し、pod数の頻繁な変動を避けるためにパニックモードでは増加するしかなく、減少しない.60秒後には安定モードに戻ります.
    Autoscaler単一テナント図
    上図はgithubに基づく.com/knative/ser...描画.
    を選択します.
    const (
       //   pod           
       RevisionRequestConcurrencyModelSingle RevisionRequestConcurrencyModelType = "Single"
       //   pod          
       RevisionRequestConcurrencyModelMulti RevisionRequestConcurrencyModelType = "Multi"
    )
    

    コンフィギュレーション
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: config-autoscaler
      namespace: knative-serving
    data:
      # Static parameters:
    
      #     pod     
      multi-concurrency-target: "1.0"
      #        ,    1.0
      single-concurrency-target: "0.9"
    
      # stable    ,         。    panic   ,  stable        stable
      stable-window: "60s"
    
      #        panic       2     ,autoscaler  panic  。
      #  panic   ,      panic            。
      panic-window: "6s"
    
      #       ,               ,          
      max-scale-up-rate: "10"
    
      #         ,           ,    bucket,       ,
      #      =   bucket       /  bucket ,     1 (hard coded)
      concurrency-quantum-of-time: "100ms"
    
      #        0
      enable-scale-to-zero: "true"
    
      #    :      
      # Requires a VPA installation (e.g. ./third_party/vpa/install-vpa.sh)
      enable-vertical-pod-autoscaling: "false"
     
      #      enable-vertical-pod-autoscaling,       multi-concurrency-target,
      #              
      vpa-multi-concurrency-target: "10.0"
    
      #         
      tick-interval: "2s"
      
      # Dynamic parameters (take effect when config map is updated):
    
      #          0
      scale-to-zero-threshold: "5m"

    www.servicemesher.com/blog/knativ…
    ServiceMesherコミュニティ情報
    コミュニティ公式サイト:www.servicemesher.com
    Slack:servicemesher.slack.comは招待してこそ参加することができ、ServiceMesherコミュニティに参加してServiceMeshに貢献することを志す学生は私に連絡することができます.
    Twitter: twitter.com/servicemesh…
    その他のService Meshコンサルティングは、微信公衆番号ServiceMesherに注目してください.
    作者:ServiceMesher
    リンク:https://juejin.im/post/5b69003df265da0f7c4fea96
    出典:掘金
    著作権は作者の所有である.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.