2022年4月6日

FinOps

Google Compute Engineのためのインテリジェントなクラウド自動停止機能

AutoStopping再び!Google Compute Engineでの使い方を紹介します。この記事には、ステップごとの手順を紹介しています。今すぐ試してみてください。

money.webp

クラウドへの投資は増加傾向にあり、適切に管理されなければ、企業のリソースに負担となりえます。非生産的なワークロードのアイドルリソースをインテリジェントに管理すれば、かなりの部分を節約できると分かっています。アイドルリソースとは、稼働しているがアクティブにトラフィックを受信していないリソース(VMなど)のことです。そのため、これらを稼働させておくことは、クラウドの無駄遣いとみなされます。

これらのリソースを適切に管理すれば、企業は毎月の非生産的なクラウドの計算コストを70%以上削減できることが分かっています。Kubernetesでの実現方法については、以前のブログ「AutoStopping Rules for Kubernetes Clusters」でお話ししました。 

Harness Intelligent Cloud AutoStoppingは、クラウドリソースのアイドル時間を効果的に管理して動的に最適化し、非生産的なワークロードの使用をスマートかつ自動的にオーケストレーションする方法です。AutoStoppingは現在、AWS、Azure、GCP、Kubernetesクラスターに対応しています。 

自動停止ルールのメリット

  • アイドル時間を自動的に検出し、アイドル状態のリソースをシャットダウンします。
  • 非ピーク時にリソースをスケジュールし、無駄を省くためのルールを設定できます。
  • トラフィックを検知すると自動的にリソースがONになるため、工数削減とクラウドコストの削減が可能です。
  • 特定の目的を果たすインフラを管理するために、ルール間の依存関係を作成します。

Google Compute EngineのVMに自動停止ルールを作成する方法

これには大きく分けて2つのステップがあります。

  1. 管理対象となる仮想マシンへのトラフィックをルーティングし、検出するために使用するロードバランサーを作成します。
  2. 前のステップで作成したロードバランサーで管理する仮想マシンをマッピングするルールを作成します。

カスタムロードバランサー

これには、次のような手順があります。

  • ドメイン名を指定します。これはロードバランサーにトラフィックをルーティングするために使用されます。DNSをカスタムロードバランサーにマッピングする際にさらに役立つCloud DNSとのファーストクラス統合が進行中です。カスタムロードバランサーは、自社のインフラ内のトラフィックの経路に配置することも可能です。 
  • カスタムロードバランサーを設定します。カスタムロードバランサーはHarnessによって作成・管理されるため、好みのインスタンスタイプを選択することができます。ロードバランサーは、管理する仮想マシンと同じVPC内にある必要があります。1つのロードバランサーを複数の自動停止ルールで利用することで、同じVPC内で異なる地域やゾーンにある仮想マシンを管理することができます。

load_balancer.webp

自動停止ルール

これには、次の3つのステップがあります。

  • 自動停止ルールの設定。未使用時に仮想マシンを自動的にシャットダウンするために、任意の理想的なアイドル時間を選択します。管理する仮想マシンを選択します。これらは同じゾーンにある必要があります。 

define_rule.webp

  • DNSリンクの設定。ルールに使用するロードバランサーを選択します。また、ロードバランサーのルーティングとヘルスチェックの設定を行います。ルーティングに使用するカスタムドメインを入力することもできます。

dns

  • 設定内容の確認。すべての内容が正しいことを確認し、ルールの作成を確定します。

cloud_account.webp

ルールが保存され、正常に作成されると、AutoStoppingを利用してCompute Engine VMを管理することができます。設定されたアイドル時間を超えてアイドル状態になると、AutoStoppingは自動的にVMをシャットダウンします。構成されたDNSリンクを使用して次回VMにアクセスがあると、AutoStoppingはリアルタイムでユーザーのためにVMを起動させます。

Google Compute Engineの自動停止の仕組み

AutoStoppingの実装には、アイドル状態のリソースを最適化する問題を解決するために、2つのアクションがあります。 

  1. ホストVMを起動/停止する。
  2. ホストへのトラフィックを検出する。

これは、設定されたVMにトラフィックをルーティングするカスタムロードバランサーを使用することで最もよく実行されます。VMが停止状態にあるとき、ユーザーはデフォルトの進捗状況表示画面を見ることができ、その間に私たちは「ウォームアップ」と呼びますがVMが起動します。これらはすべて、カスタムのロードバランサーを使用することで可能になります。

自動停止は、以下のコンポーネントの助けを借りて実装されています。

  • カスタムロードバランサー
  • Envoy
  • ベンダー製品
  • Harness SaaS

カスタムロードバランサー

同じVPCに属する複数の自動停止ルールに対して、1つのカスタムロードバランサーを設定することができます。VPCは複数の地域にまたがっているため、1つのカスタムロードバランサーを複数のルールで利用することでコストを削減できます。GCP HTTP(S)のネイティブロードバランサーがベータ版であるため、ネイティブロードバランサーではなく、カスタム実装を選択しました。また、1つのロードバランサーに設定できるルールの数に制限がないカスタムロードバランサーを立ち上げることは、コスト面でも有利です。

このカスタムロードバランサーは、Envoyとその他の独自サービスで構成されています。

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とその他の独自サービスを使用しています。

Google Compute EngineのAutoStoppingを始めよう


この記事はHarness社のウェブサイトで公開されているものをDigital Stacksが日本語に訳したものです。無断複製を禁じます。原文はこちらです。

Harnessに関するお問い合わせはお気軽にお寄せください。

お問い合わせ