OpenStack NovaのUtilization aware Schedulingを利用する

Nova ComputeはNova Schedulerに対して定期的に構成情報を送信しています。Compute Node上の</var/log/nova/nova-compute.log>を見ると確認出来ますが送信している値はFree RAM/Free Disk/Free vCPUSになります。NovaのFilter Schedulerはその値を元にしてホストを決定しています。

Icehose(2014.1)からユーザー側で上記の値以外に自由にSchedulerで利用できる値を送信出来るようになりました。それがUnitization aware schedulingです。Blueprintは以下になります。

https://blueprints.launchpad.net/nova/+spec/utilization-aware-scheduling

CPUの利用率を送信するスクリプトがサンプルとして提供されていますが、コンピュートホスト側のnova/compute/monitorsにスクリプトを配置して、正しくnova.confを設定すればnova-computeプロセスが定期的にスクリプトを実行して必要な値を送信してくれます。

nova.computeからmonitorsをimportしてrmonitors.Resouce MonitorBaseを継承してPythonスクリプトを書く事になります。returnする値はfloat型である必要があります。

サンプルPythonスクリプト

以下のように値を返します。ここでは固定値の99.0を返していますが、各種値を返す事が出来ます。

class MetricMonitor(monitors.ResourceMonitorBase):
     def __init__(self,parent):
        super(MetricMonitor, self).__init__(parent)
        self.source = “Test”
     def _get_metric_score(self, **kwargs):
        #Return value for metric
        return 99.0, None

Compute Node側のnova.confの設定

Compute Node側のnova.confは以下の値を設定します。compute_available_monitorsには先程のPythonスクリプトをしてします。compute_monitorsにはスクリプト中で値をReturnするClass名を入れておきます。

#
 # Options defined in nova.compute.monitors
 #
 # Monitor classes available to the compute which may be
 # specified more than once. (multi valued)
 #利用するPythonのスクリプト。先ほどのスクリプトのパスとファイル名をしてこの例ではall_monitors.pyが指定されている。
 compute_available_monitors=nova.compute.monitors.all_monitors
 # A list of monitors that can be used for getting compute
 # metrics. (list value)
 # スクリプト中で値を返すクラスの指定。MetricMonitorクラスを指定。
 compute_monitors=MetricMonitor

これでnova-computeを再起動すると値のレポートが行われます。
反映されているかはLogとDatabaseを確認するとわかります。

NovaのDatabaseを参照すると、nova.compte_nodesテーブルのmetricsにレポートされた値が入ってます。

Scedulerが動作しているController Nodeのnova.confの設定

Sceduler側のnova.confは以下のように設定します。レポートされないホストにペナルティを課すと動作の確認がやりやすくなります。

[metrics]
  # Multiplier used for weighing metrics. (floating point value)
  weight_multiplier=1.0
  # metric名とWeightの設定
  weight_setting=metric_score=1.0
  # falseとすると値が無い場合にはペナルティが課される。TrueとするとErrorとなり動作しない
  required=false
  # 値が無い場合に返されるWeight
  weight_of_unavailable=-10000.0
広告
OpenStack NovaのUtilization aware Schedulingを利用する

OpenStack NovaのUtilization aware Schedulingを利用する」への1件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中