IDCF テックブログ

IDCF テックブログ

クラウド・データセンターを提供するIDCフロンティアの公式テックブログ

IDCFクラウド コンテナサービス オートスケールについて

こんにちは。事業推進本部SE部の横田です。
今回はIDCFクラウド コンテナサービスにおけるオートスケールについて紹介します。

背景と目的

IDCFクラウド コンピュートではオートスケールの導入は手間がかかりますが、実はコンテナサービスではノードのオートスケール機能が簡単に使えます
本稿では以下の内容について記載していますので、是非ご参考にしてください。

  • ワークロードのオートスケール利用方法
  • Worker ノードのオートスケール利用方法

前提条件

  • Kubernetes のバージョンが 1.19 以上であること
  • クラスタの構成が Master ノードと、Workerノードで分離されていること

構成イメージ

スケールアウト時の状態遷移イメージは以下の流れになります

  1. 基本構成
  2. ワークロード オートスケール
  3. Worker ノード オートスケール
基本構成

初期状態として Podは最小の1台です。

ワークロードのオートスケール時のイメージ

負荷を掛ける事で、Podが自動的にスケールアウトされます。

Workerノードのオートスケール時のイメージ

ワークロードがスケールアウトされる時にノードのリソースが不足した場合、Worker ノードが自動的にスケールアウトされます。

環境確認

オートスケール環境を作っていきます。

クラスタの設定確認

クラスタの構成が前提条件を満たしているか確認します。

  • master ノードと worker ノードで分離されていること
  • Kubernetes のバージョンが [v1.19] 以上であること

※worker ノードは worker の役割のみである必要があります。

クラスタID、ノードプールIDの確認

cluster-autoscaler 設定を行う際に必要な情報を確認します クラスタから「ノード」を開き、worker ノードに割り当てられているIDを確認します。

  • cluster id:c-xxxxx
  • node pool id:np-xxxxx

※今回はノードプールの指定は行いませんが、スケール対象としてノードプールが指定可能です。
 ノードプールを指定する場合はノードプールIDも確認しておきます

環境設定

ここから オートスケールの設定手順を紹介します。
ここでは CPU使用率を元にオートスケールする設定を行っています。

API & キー

画面右上のアイコンから「API & キー」をクリックして APIキーを追加します。

  • 詳細情報:任意の名称
  • 自動での失効日設定:しない
  • スコープ:スコープなし

作成された APIキーの情報をメモ帳等に控えておきます。

カタログの追加

  1. 画面左上から、「Default」プロジェクトを選択
  2. 「ツール」>「カタログ」をクリックします
  3. 「cluster-autoscaler」をクリックします

cluster-autoscaler の設定

cluster-autoscaler カタログの設定を行っていきます。
以下では必要最低限のみ設定を行っています。

名前空間
  • 名前空間:default
  • Helm Wait:変更なし
  • Helm Timeout:変更なし

CLUSTER AUTOSCALER IMAGE REPOSITORY IMAGES SETTINGS
  • Image:変更なし
  • Image Tag:変更なし
  • ImagePullPolicy:変更なし

CLUSTER AUTOSCALER DEPLOYMENTS SETTINGS
  • Deployments Replicas:変更なし
  • Scan Interval:変更なし
  • klog Verbose level:変更なし
  • Rancher Client Debug:変更なし

CLUSTER AUTOSCALER SETTINGS
  • ClusterId:c-xxxxx ※「事前確認」で確認したクラスタIDを入力します
  • API URL:変更なし
  • Token Key:APIキー作成時の "Bearer トークン" ※「API & キー」で作成した「Bearer トークン」を入力します。
  • Min Size(Common):3
  • Max Size(Common):6

※今回は最小台数3,最大台数6 として設定を行います。

CLUSTER AUTOSCALER SETTINGS (TARGETNODEPOOLS)
  • NodePool Name:変更なし
  • Min Size:変更なし
  • Max Size:変更なし

※今回はノードプールでの指定は行いません。

cluster-autoscaler ステータスの確認

cluster-autoscaler 作成完了後、状態が「Active」であることを確認します。

cluster-autoscaler ワークロードの確認

ワークロードから cluster-autoscaler のワークロードが作成されている事を確認します。

HPA(Horizontal Pod Autoscaler)設定

テスト用ワークロードのデプロイ

テスト用に phpinfo が確認出来る pod を用意します。

作成時に詳細設定から 「CPU予約」を 1000 ミリCPU としてデプロイします。 ※1000ミリCPU を指定することで 1コア予約されます。

HPA設定

プロジェクト「Defautl」から「リソース」>「HPA」をクリックします。

「HPA を追加」をクリックします。

「水平ポッドオートスケーリングを編集」から設定を行います。
※今回はHPAの対象として、先ほど作成した「テスト用ワークロード」を指定しています

  • 名前:phpinfo ※任意の名称
  • 名前空間:deault ※オートスケールさせたいワークロードが存在する名前空間を指定
  • ワークロード:phpinfo ※オートスケールさせたいワークロードを指定
  • 最小レプリカ数:1
  • 最大レプリカ数:20

メトリック値を設定します

  • メトリックタイプ:リソース
  • メトリック名:CPU
  • ターゲットタイプ:平均使用率
  • 数量:10 ※今回スケールアウトしやすいように特別小さい値「10%」としていますが、実際のシステムでは、どれくらい余裕を持たせてスケールさせるか値を設定してください

作成したHPA設定が「Active」であることを確認します。

動作テスト

負荷を掛け、Podがスケールアウトし、リソースが足りずノードがスケールアウトされることを確認していきます。

宛先アドレスの確認

デプロイしたワークロードから宛先アドレスを確認します。

負荷テスト

クラスター環境外にある仮想マシンから wrk コマンドを利用した負荷テストを行っていきます。
※wrk コマンドのインストールについては本稿では言及していません。

以下のパラメータで負荷を与えます。
※環境によってはパラメータを適宜変更してテストしてください。

  • スレッド数:4
  • コネクション数:100
  • タイムアウト:300
  • URL:http://xxx.xxx.xxx.xxx
wrk -t 4 -c 100 -d 300 http://xxx.xxx.xxx.xxx/
Running 5m test @ http://xxx.xxx.xxx.xxx/
  4 threads and 100 connections

ワークロードのスケールアウト

ワークロードに負荷を掛ける事で、Podがスケールアウトされることを確認します。

ステータス確認

Pod が一定数スケールアウトされると、途中からスケールアウトされる Pod のステータスが「Scheduling」になることを確認します。
※cluster-autoscaler では「Scheduling」ステータスをトリガーに、ノードのスケールアウトを行います。

Workerノードのスケールアウト

「クラスタ」>「ノード」から、worker ノードが追加されている事を確認します。
※以下イメージ図では、worker-4,5,6 が追加され、環境準備中の状態となります。

順次、ステータスが「Active」になることを確認します。

ワークロードの確認

リソースが足りず、スケールアウトできなかった Pod が正常にデプロイ、起動している事を確認します。

ワークロードのスケールイン

5分後 wrk コマンドが完了している事を確認します。

wrk -t 4 -c 100 -d 300 http://xxx.xxx.xxx.xxx/
Running 5m test @ http://xxx.xxx.xxx.xxx/
  4 threads and 100 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency   187.79ms  220.17ms   2.00s    84.12%
    Req/Sec   125.13     64.59   474.00     63.47%
  124746 requests in 5.00m, 51.43GB read
  Socket errors: connect 0, read 185, write 3, timeout 256
Requests/sec:    415.67
Transfer/sec:    175.50MB

wrk コマンドが完了すると、ワークロードの負荷が下がり、スケールインが行われます。
Pod の数が元の「1」個になっている事を確認します。

Worker ノードのスケールイン

一定時間後、Worker ノードがスケールインされます。
※スケールインが開始されるまで約10分程度かかります。
Worker ノードが元の状態 [3台] になっている事を確認します。

まとめ

今回は コンテナサービスにおけるオートスケールの利用法について紹介させていただきました。
IDCFクラウドも早くオートスケールが利用できるようになればいいですね!

コンテナサービスの利用、活用法については 他のメンバーからも投稿予定がありますのでご期待ください!

Copyright © IDC Frontier Inc.