スタックの構築

対象リージョン:東日本第3/西日本第3

テンプレート(yaml形式)に定義されたリソース群を一括配備します。配備されたリソース一式は、スタックとして管理します。

テンプレートの詳細については、以下を参照してください。

注: 仮想ルータの SNAT通信設定について
  • SNAT通信を行う場合、OS::Neutron::Routerの Optional Propertiesの value_specsパラメータに nuage_underlayを指定する必要があります。
  • デフォルトではSNAT機能が無効です。SNAT機能を有効にするには、external_gateway_infoパラメータ、および SNAT通信可否(nuage_underlay)パラメータの指定が必要です。nuage_underlayパラメータには、SNAT通信なしの場合は「off」、SNAT通信ありの場合は「snat」を指定してください。

設定例

test_router2:
    type: OS::Neutron::Router
    properties:
      external_gateway_info: { network: "fip-net" }
      name: test_router2
      value_specs: { nuage_underlay: "snat" }

nuage_underlayパラメータの詳細については、APIリファレンス(東日本リージョン3/西日本リージョン3)の「API詳細(Routers)」を参照してください。

監視サービスのアラームを利用したオートスケール

監視サービスのアラームをトリガーとして実行されるオートスケールのスタック定義について説明します。

アラームのリソース種別には OS::PMM::Alarm を使用します。テンプレートに定義する項目は以下のとおりです。

注: OS::PMM::Alarm は OpenStack Resource Typesに記述されていない独自のリソース種別です。PMMは監視サービス(Performance Metrics Monitor)の略称です。
表 1. スタック定義の指定項目
項目 必須
name アラームの名前を指定する
description アラームの説明を指定する  
target_type

監視する仮想サーバを指定する

  • project
  • aggregate
  • stack
  • auto_scaling_group
object_id

仮想サーバを識別するリソースIDを指定する

  • target_typeが projectの場合:プロジェクトID

    例){ get_param: "OS::project_id" }

  • target_typeが aggregateの場合:集合体ID

  • target_typeが stackの場合:スタックID

    例){ get_param: "OS::stack_id" }

  • target_typeが auto_scaling_groupの場合:OS::Heat::AutoScalingGroup タイプのリソースのID

    例){ get_resource: scaleup_group }

metric_type

アラームの監視項目を以下から指定する

  • instance.cpu.usage
  • instance.memory.usage
  • network.ingress.bit_rate
  • network.ingress.packet_rate
  • network.ingress.errors
  • network.ingress.drops
  • network.egress.bit_rate
  • network.egress.packet_rate
  • network.egress.errors
  • network.egress.drops
interval_duration 監視項目の監視を実行する(監視項目の値を計測する)間隔(分)を指定する  
from しきい値との比較に使用する監視項目の値を計測する期間(分)を指定する  
aggregation_function

監視項目の測定方法を以下から指定する

仮想サーバごとに監視データを算出する場合

  • avg
  • max
  • min
  • sum

すべての仮想サーバを集計して1つの値を算出する場合

  • grp_avg
  • grp_max
  • grp_min
  • grp_sum
comparison_function

監視項目としきい値の比較方法を以下から指定する

  • below
  • above
threshold 監視項目に設定するしきい値(単位は監視項目に依存する)を指定する
alert_count 監視条件が満たされた状態が何分間続いたらアラートを発するかを指定する  
severity

アラームレベルを指定する(アラームの情報としてだけ利用可能)

  • critical
  • error
  • warning
  • information
  • none
 
enabled

アラームの状態を指定する

  • true
  • false
 
nodata_alert

監視データ取得不可時の通知有無を指定する

  • true
  • false
alarm_actionに mailを設定しており、かつ本項目の設定値が有効の場合、監視対象のすべての仮想サーバから監視条件に合致するデータが取得できない状態を検知するとメール通知を実行します。 また、監視データの取得が再開されたときにもメール通知を実行します。
注: アラームが複数の仮想サーバを監視しており、そのうち一部の仮想サーバからだけ監視データが取得できない場合、通知は実行されません。各仮想サーバごとに監視データが取得できない状態を監視する必要がある場合は、それぞれ個別にアラームを作成し、そのうえで監視データ取得不可通知を有効にしてください。
 
alarm_action

アラームアクションを以下から指定する(複数指定可)

  • mail
  • autoscale
注: アラームをトリガーにオートスケールを実行するためには、アラームアクションにautoscaleを設定する必要があります。
 
notification_url

アラームが有効になったことを通知する先のURLを指定する

アラームをトリガーにオートスケールを実行するためには、スケーリングポリシーの signal_urlを設定する必要があります。

以下の値を固定で設定してください。

{ get_attr: [scaleup_policy, signal_url] }
instances

監視対象とする仮想サーバIDをリスト形式で指定する

例)["22c91117-08de-4894-9aa9-6ef382400985","f5dc173b-6804-445a-a6d8-c705dad5b5eb"]

注: target_typeで「aggregate」を指定した場合に有効です。この項目を設定すると、集合体(aggregate)が自動的に作成されます。object_idと instancesを同時に指定した場合、instancesの内容が優先されます。
 

以下のテンプレートは、CPU使用率に基づいて仮想サーバの数をオートスケールします。

スタック定義の記述例:

heat_template_version: 2017-02-24
description: Example auto scale group, policy and alarm 
resources:
  scaleup_group:
    type: OS::Heat::AutoScalingGroup
    properties:
      cooldown: 60
      desired_capacity: 1
      min_size: 1
      max_size: 3
      resource:
        type: OS::Nova::Server
        properties:
          key_name: sample_key
          block_device_mapping_v2:
            [{boot_index: '0', device_name: '/dev/vda', volume_size: 10, image: 'sample_images', delete_on_termination: true}] 
          flavor: S3-1
          name: "test_vm"
          networks: 
            - network : test-net

  scaleup_policy:
    type: OS::Heat::ScalingPolicy
    properties:
      adjustment_type: change_in_capacity
      auto_scaling_group_id: {get_resource: scaleup_group}
      cooldown: 60
      scaling_adjustment: 1

  alarm:
    type: OS::PMM::Alarm
    properties:
      name: 'alarm_vm_cpu'
      target_type: 'stack'
      object_id: { get_param: "OS::stack_id" }
      metric_type: 'instance.cpu.usage'
      interval_duration: '1m'
      from: '1m'
      aggregation_function: 'avg'
      comparison_function: 'above'
      threshold: 80
      alert_count: 1
      alarm_action: ['autoscale']
      autoscale_url: { get_attr: [scaleup_policy, signal_url] }

監視サービスのアラーム(旧版)を利用したオートスケール

アラームをトリガーとして実行されるオートスケールのスタック定義について説明します。

アラームのリソース種別には OS::AppFormix::Alarmを使用します。テンプレートに定義する項目は以下のとおりです。

注: OS::AppFormix::Alarmは OpenStack Resource Typesに記述されていない独自のリソース種別です。
表 2. スタック定義の指定項目
項目 必須
alarm_name アラームの名前を指定する
alarm_metric

アラームの監視項目を以下から指定する

  • cpu.usage
  • memory.usage
  • network.ingress.bit_rate
  • network.ingress.packet_rate
  • network.ingress.errors
  • network.ingress.drops
  • network.egress.bit_rate
  • network.egress.packet_rate
  • network.egress.errors
  • network.egress.drops
threshold 監視項目に設定するしきい値(単位は監視項目に依存する)を指定する
aggregation_function

監視項目の測定方法を以下から指定する

  • average
  • max
  • min
  • sum
comparison_function

監視項目としきい値の比較方法を以下から指定する

  • below
  • equal
  • above
duration しきい値との比較に使用する監視項目の値を計測する秒数を指定する
num_intervals 監視項目の監視を実行する(監視項目の値を計測する)間隔を指定する
num_exception_intervals アラームが有効になった場合、アラームを有効状態に設定し続ける間隔を指定する
project_id

アラームを適用する仮想サーバのプロジェクトIDを指定する

注: project_id か aggregate_id のどちらか一方を必ず指定してください。
 
aggregate_id

テンプレートで作成された仮想サーバを指定する

以下の値を固定で設定してください。

{ GET_PARAM: "OS::STACK_ID" }
注: project_id か aggregate_id のどちらか一方を必ず指定してください。
 
notification_url

アラームが有効になったことを通知する先のURLを指定する

アラームをトリガーとしたオートスケールのためには、スケーリングポリシーのsignal_urlを設定する必要があります。

以下の値を固定で設定してください。

{ get_attr: [scaleup_policy, signal_url] }

以下のテンプレートは、CPUの応答有無に基づいて仮想サーバの数をオートスケールします。

スタック定義の記述例:

description: Example auto scale group, policy and alarm 
resources:
  scaleup_group:
    type: OS::Heat::AutoScalingGroup
    properties:
      cooldown: 60
      desired_capacity: 1
      min_size: 1
      max_size: 3
      resource:
        type: OS::Nova::Server
        properties:
          key_name: sample_key
          block_device_mapping_v2:
            [{boot_index: '0', device_name: '/dev/vda', volume_size: 10, image: 'sample_images', delete_on_termination: true}] 
          flavor: S3-1
          name: "test_vm"
          networks: 
            - network : test-net

  scaleup_policy:
    type: OS::Heat::ScalingPolicy
    properties:
      adjustment_type: change_in_capacity
      auto_scaling_group_id: {get_resource: scaleup_group}
      cooldown: 60
      scaling_adjustment: 1

  alarm:
    type: OS::AppFormix::Alarm
    properties:
      alarm_name: 'alarm_vm_cpu'
      alarm_metric: 'cpu.usage'
      aggregation_function: 'average'
      comparison_function: 'above'
      duration: 60
      num_intervals: 1
      num_exception_intervals: 1
      threshold: 80
      aggregate_id: { get_param: "OS::stack_id" }
      notification_url: { get_attr: [scaleup_policy, signal_url] }
ヒント:
  • スタックが配備されると、仮想サーバ(test_vm)が作成されます。
  • アラーム(alarm_vm_cpu)は仮想サーバのCPU使用率(しきい値は80%)を監視します。
  • アラームが有効の場合、scaleup_policyは60秒ごとに1台仮想サーバを追加します。
  • Max_sizeに指定した値まで仮想サーバが追加されると、scaleup_policyは停止します。