2022年4月6日
FinOps
AutoStopping再び!Google Compute Engineでの使い方を紹介します。この記事には、ステップごとの手順を紹介しています。今す ぐ試してみてください。
クラウドへの投資は増加傾向にあり、適切に管理されなければ、企業のリソースに負担となりえます。非生産的なワークロードのアイドルリソースをインテリジェントに管理すれば、かなりの部分を節約できると分かっています。アイドルリソースとは、稼働しているがアクティブにトラフィックを受信していないリソース(VMなど)のことです。そのため、これらを稼働させておくことは、クラウドの無駄遣いとみなされます。
これらのリソースを適切に管理すれば、企業は毎月の非生産的なクラウドの計算コストを70%以上削減できることが分かっています。Kubernetesでの実現方法については、以前のブログ「AutoStopping Rules for Kubernetes Clusters」でお話ししました。
Harness Intelligent Cloud AutoStoppingは、クラウドリソースのアイドル時間を効果的に管理して動的に最適化し、非生産的なワークロードの使用をスマートかつ自動的にオーケストレーションする方法です。AutoStoppingは現在、AWS、Azure、GCP、Kubernetesクラスターに対応しています。
これには大きく分けて2つのステップがあります。
カスタムロードバランサー
これには、次のような手順があります。。
これには、次の3つのステップがあります。
ルールが保存され、正常に作成されると、AutoStoppingを利用してCompute Engine VMを管理することができます。設定されたアイドル時間を超えてアイドル状態になると、AutoStoppingは自動的にVMをシャットダウンします。構成されたDNSリンクを使用して次回VMにアクセスがあると、AutoStoppingはリアルタイムでユーザーのためにVMを起動させます。
AutoStoppingの実装には、アイドル状態のリソースを最適化する問題を解決するために、2つのアクションがあります。
これは、設定されたVMにトラフィックをルーティングするカスタムロードバランサーを使用することで最もよく実行されます。VMが停止状態にあるとき、ユーザーはデフォルトの進捗状況表示画面を見ることができ、その間に私たちは「ウォームアップ」と呼びますがVMが起動します。これらはすべて、カスタムのロードバランサーを使用することで可能になります。
自動停止は、以下のコンポーネントの助けを借りて実装されています。
同じVPCに属する複数の自動停止ルールに対して、1つのカスタムロードバランサーを設定することができます。VPCは複数の地域にまたがっているため、1つのカスタムロードバランサーを複数のルールで利用することでコストを削減できます。GCP HTTP(S)のネイティブロードバランサーがベータ版であるため、ネイティブロードバランサーではなく、カスタム実装を選択しました。また、1つのロードバランサーに設定できるルールの数に制限がないカスタムロードバランサーを立ち上げることは、コスト面でも有利です。
このカスタムロードバランサーは、Envoyとその他の独自サービスで構成されています。
Envoyは大規模なサービス指向アーキテクチャーのために設計されたL7プロキシーです。通常、アプリケーションのサイドカーとして実行され、ネットワークトポロジーを抽象化し、Envoyメッシュと呼ばれます。複雑な処理をサポートするために、フィルターチェーンがあらかじめ組み込まれています。フィルターチェーンとは、簡単に言うと、APIサービスのセットアップにおけるミドルウェアのチェーンのようなものです。
これはAutoStoppingで使用されるものではありませんが、以下はポート8080で動作しているサービスがポート80を聴いている場合の静的設定の例です。
static_resources:
listeners:
- name: listener_0
address:
socket_address: { address: 127.0.0.1, port_value: 80 }
filter_chains:
- filters:
- name: envoy.filters.network.http_connection_manager
typed_config:
"@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
stat_prefix: ingress_http
codec_type: AUTO
route_config:
name: local_route
virtual_hosts:
- name: local_service
domains: ["*"]
routes:
- match: { prefix: "/" }
route: { cluster: some_service }
http_filters:
- name: envoy.filters.http.router
clusters:
- name: some_service
connect_timeout: 0.25s
type: STATIC
lb_policy: ROUND_ROBIN
load_assignment:
cluster_name: some_service
endpoints:
- lb_endpoints:
- endpoint:
address:
socket_address:
address: 127.0.0.1
port_value: 8080
Envoyはクラスターとリスナーで構成されています。クラスターは、AWS Application Load Balancerのターゲットグループに相当するものです。Listenersはリクエストが来るポートで、ルート設定とルートパスのマッチングに基づいてクラスターにルーティングされます。リスナーには、特定のアクションを実行するためのフィルターを設定することができます。
Harness Intelligent Cloud AutoStoppingは、設定されたGoogle Compute EngineのVMにトラフィックをルーティングするカスタムロードバランサーにEnvoyとその他の独自サービスを使用しています。
この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁 じます。原文はこちらです。