こんにちは。事業推進本部SE部の横田です。
今回はIDCFクラウド コンテナサービスにおけるオートスケールについて紹介します。
- 背景と目的
- 環境確認
- 環境設定
- 動作テスト
- まとめ
背景と目的
IDCFクラウド コンピュートではオートスケールの導入は手間がかかりますが、実はコンテナサービスではノードのオートスケール機能が簡単に使えます。
本稿では以下の内容について記載していますので、是非ご参考にしてください。
- ワークロードのオートスケール利用方法
- Worker ノードのオートスケール利用方法
前提条件
- Kubernetes のバージョンが 1.19 以上であること
- クラスタの構成が Master ノードと、Workerノードで分離されていること
構成イメージ
スケールアウト時の状態遷移イメージは以下の流れになります
- 基本構成
- ワークロード オートスケール
- 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キーの情報をメモ帳等に控えておきます。
カタログの追加
- 画面左上から、「Default」プロジェクトを選択
- 「ツール」>「カタログ」をクリックします
- 「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クラウドも早くオートスケールが利用できるようになればいいですね!
コンテナサービスの利用、活用法については 他のメンバーからも投稿予定がありますのでご期待ください!