Nova 19.0.0.0rc1 リリースノート抜粋

OpenStack Stein のリリースを前に、Nova の新バージョン 19.0.0 の RC1 版が公開されました。これ以上 Stein リリースで新機能は入らないので、Nova のリリースノートのうちバグフィクス以外を意訳してみました。

なお、原文で「はじめに」の各項目は「新機能」等にも含まれており、こちらの訳でも同様にしてあります。

## はじめに

- Compute API の最新バージョンは [v2.72](https://docs.openstack.org/nova/latest/reference/api-microversion-history.html)

- 従来 Nova リポジトリの一部であった Placement API が Nova 本体から独立したリポジトリを持つようになった。但し、独立版の Placement API に完全対応したインストールツールはまだない。詳細は[インストール](https://docs.openstack.org/placement/latest/install/index.html)/[アップグレード](https://docs.openstack.org/placement/latest/upgrade/to-stein.html)ドキュメント参照。
  但し Stein リリースでは移行段階として Nova のリポジトリの中にも Placement API のソースコードが残されているが、次の Train リリースでは削除される予定。

- サーバインスタンス作成時にボリューム作成を指示した際、ボリュームタイプを指定できるようになった(API v2.67)。

- 複数セル環境下で、ダウンしていたり性能の低い(=レスポンスが悪い)セルに置かれたサーバの詳細情報のハンドリングが追加された(API v2.69)。

- サーバインスタンス作成時、Neutron のネットワークポートの QoS で最小帯域を指定できるようになった(API v2.72)。

- 運用者が Nova のオーバーコミット率(CPU/RAM/ディスク容量における仮想/物理比)を Nova の設定ファイルと Placement API のどちらかで設定できるようになった。

- Placement API で Compute のケーパビリティ(細かな機能仕様)が Trait として公開されるようになった。

- 設定オプション `[compute]resource_provider_association_refresh` で 0 を指定する事でこの機能を無効化できるようになった。大規模環境で便利。

- VMware ドライバが VM のライブマイグレーションに対応。

- Nova が２つのケースでネストした(=入れ子の)リソースプロバイダに対応した。
  - 最初からネストしたリソースプロバイダ上で QoS が有効なポートにインベントリや関連付けを付与できるようになる。
  - Libvirt コンピュートノードがレポートする VGPU インベントリに、子リソースプロバイダ上の VGPU インベントリと関連づけを付与する事ができる(Stein リリースの nova-compute サービスにアップグレード後)
  どちらのケースもリソースプロバイダを参照した際、シナリオに基づいて、元々は Compute サービス単位で１階層の compute ノードとして見えていた複数のプロバイダを参照する事ができる。

## 新機能

- 下記バージョン付通知に instance_name フィールドを追加。
  - `instance.create.start`
  - `instance.create.end`
  - `instance.create.error`
  
- 新ポリシールール `os_compute_api:servers:allow_all_filters` 追加。ユーザがサーバ一覧表示で全てのフィルタを使えるかどうかを制御する。

- volume_type オプションパラメータ追加(API v2.67)

- Libvirt network ボリュームドライバ使用時、接続状態の RBD ボリュームの拡張に対応。

- `GET /servers`, `GET /servers/detail`, `GET /servers/{server_id}`, `GET /os-services` にて、セルがダウンしている間に不足したキーを含めるよう変更。

- `[compute]/max_concurrent_disk_ops` 設定パラメータ追加。nova-compute 単位でディスク I/O を伴う操作の最大同時実行数を設定可能に。デフォルト値は 0（制限しない）。

- Libvirt ドライバでイメージプロパティ `hypervisor_type=qemu` 設定時、x86 ゲストで HPET が利用可能に。イメージプロパティ `hw_time_hpet=True` で有効。デフォルトは False (無効)。

- [compute]/max_disk_devices_to_attach オプション追加。単一サーバへ同時接続するボリュームの最大数を定義できるように。デフォルトは -1 (無制限)

- `[compute]resource_provider_association_refresh` オプションで、0 (無効)が設定可能に。Placement サーバへの通信削減に有用。

- Placement API の traits 経由で Compute ドライバがサーバの capabilities を公開可能に。capabilities は os-traits プロジェクト内で定義されている必要がある。現時点で対応している capabilities は以下の通り。
  * COMPUTE_NET_ATTACH_INTERFACE
  * COMPUTE_DEVICE_TAGGING
  * COMPUTE_NET_ATTACH_INTERFACE_WITH_TAG
  * COMPUTE_VOLUME_ATTACH_WITH_TAG
  * COMPUTE_VOLUME_EXTEND
  * COMPUTE_VOLUME_MULTI_ATTACH
  * COMPUTE_TRUSTED_CERTS

- クエリのバッチ化によりセル横断のサーバ一覧操作が効率的に。

- `[ironic]/partition_key` パラメータ追加。Ironic 環境において compute サービスが同パラメータ値と一致する conductor_group を持つ Ironic ノード群の一部(サブセット)のみを管理可能に。また、`[ironic]/peer_list` パラメータでこのサブセットの管理を compute サービス間で分散可能に。
  ironic-conductor と nova-compute が同居している構成で障害の影響を最小限にする事ができる。

- `[libvirt]/live_migration_timeout_action` パラメータ追加。デフォルト値の abort と force_complete のいずれかを設定可能。
  `live_migration_completion_timeout` で設定されたライブマイグレーションの制限時間を越えた場合の挙動を設定。force_complete は post-copy が利用可能な場合は post-copy、それ以外の場合は VM を一時停止してライブマイグレーションを強行する。

- Compute API 2.70 で、接続されたボリュームや仮想インターフェースのタグを公開可能に。

  * `GET /servers/{server_id}/os-volume_attachments` (list)
  * `GET /servers/{server_id}/os-volume_attachments/{volume_id}` (show)
  * `POST /servers/{server_id}/os-volume_attachments` (attach)
  * `GET /servers/{server_id}/os-interface` (list)
  * `GET /servers/{server_id}/os-interface/{port_id}` (show)
  * `POST /servers/{server_id}/os-interface` (attach)

- nova.conf 内で設定されたフィルタスケジューラの設定を Aggregate のメタデータを使用して上書き可能に。
  
- Placement API 1.30 で `POST /reshaper` に対応。これにより、親子リソースプロバイダ間など、リソースプロバイダ間でいくつかのインベントリを移動する際、そのインベントリと関連割当をアトミックにマイグレーション可能に。

- `[api]/local_metadata_per_cell` オプション追加。セル単位で nova-api-metadata サービスを実行可能に。詳細は[こちら](https://docs.openstack.org/nova/latest/user/cellsv2-layout.html#nova-metadata-api-service)。

- Compute API 2.71 で以下の API のレスポンスボディの `server_groups` パラメータで各サーバが所属するサーバグループを表示するように。
  * `GET /servers/{server_id}`
  * `PUT /servers/{server_id}`
  * `POST /servers/{server_id}/action` (rebuild)

- Compute API 2.72 で、リソース要求付きの Neutron ポート(QoS 最小帯域ルール付き等)付きのサーバ作成に対応。但し以下は出来ない。
  * QoS最小帯域ルールのある Neutron ネットワークとポート付きサーバの作成
  * QoS最小帯域ルールのある Neutron ネットワークとポートの接続
  * リソース要求付きポートを持つサーバの移動(リサイズ、コールド／ライブマイグレーション、エバキュエート、shelve オフロード後の unshelve）
	
- `[libvirt]/live_migration_with_native_tls` パラメータ追加。Libvirt ドライバでライブマイグレーション時の QEMU ネイティブ TLS 転送に対応。
  
- Compute API 2.66 で、以下の API に `changes-before` フィルタパラメータ追加。リソースの最終更新が指定した日時以前のリソースのみ取得可能に。
  * `GET /servers`
  * `GET /servers/detail`
  * `GET /servers/{server_id}/os-instance-actions`
  * `GET /os-migrations`
  
- Nova のバージョン付通知インターフェースが完成し、旧インターフェースと互換性を確保。
  
- VMware vCenter ドライバで、VM イメージのビデオ RAM 設定用パラメータ `hw_video_ram` を追加。フレーバーの `hw_video:ram_max_mb` で指定された最大許容 RAM サイズに対してチェックされる。
  
- VMware compute ドライバがライブマイグレーションに対応。複数 compute ノードで vMotion が有効化された同一の vCenter と ESX ホストを管理する必要がある。
  
- `vrouter` VIF タイプに対する `direct` `virtio-forwarder` VNIC タイプを追加。VNIC 使用の為、ハードウェア対応と同様、インストールされた OpenContrail, Contrail, Tungsten Fabric のバージョン対応が必要。

## 既知の問題

- `[compute]/max_disk_devices_to_attach` は現在ボリュームが接続されたサーバで最多のボリューム数より大きくなければならない。でないとサーバのリビルドに失敗する。また、コールドマイグレーション時、接続ボリューム数は転送先ホストでチェックされない。また、この制限は shelve offload されたサーバには適用されない為、この制限を付与する事によりサーバが unshelve できなくなるケースがある。
  
- 以下の操作中、定期処理で migration_uuid が同時に変更される事でリソース割当が保持される場合、Nova の Placement におけるリソース割当がリークする。
  * `POST /servers/{server_id}/action` (revertResize Action)
  * `POST /servers/{server_id}/action` (confirmResize Action)
  * `POST /servers/{server_id}/action` (os-migrateLive Action)

- 接続された QoS 最小帯域ルール付ポートがサーバから論理的に削除される前に Neutron がポートを削除した場合、Nova の帯域リソースがリークする。
  これを避ける為には、Neutron 側でポート削除する前に Nova 側でサーバからポートをデタッチしておく必要がある。Nova API によるポートデタッチが不可能な場合、帯域リソースはサーバ削除時にリリースされる。

## バージョンアップ時の注意

* ARMv7 アーキテクチャ用 QEMU マシンタイプのデフォルトが `vexpress-a15` から `virt` に変更された。`virt` ボードは仮想マシン用に設計された ARMv7 用マシンタイプの推奨デフォルトである。

- 以下のパラメータが追加された。
  * `initial_cpu_allocation_ratio` デフォルト値＝16.0
  * `initial_ram_allocation_ratio` デフォルト値＝1.5
  * `initial_disk_allocation_ratio` デフォルト値＝1.0
  これらの新オプションは新しく nova-compute ノードが DB に登録される際にのみ使用される。
  一方、`cpu_allocation_ratio`, `ram_allocation_ratio`,   `disk_allocation_ratio` 設定パラメータのデフォルト値が 0.0 から `None` になった。DB 上の既存の nova-compute ノード情報でこれらの値が 0.0 または None の場合、nova-compute がアクセスする際か、`nova-manage db online_data_migrations` コマンド実行時にマイグレーションされる。
  
- virt ドライバ `get_info` メソッドに `use_cache` パラメータが追加された。ベンダドライバはこの変更に対応したほうが良い。  

- 新パラメータ `[compute]/max_disk_devices_to_attach` のデフォルト値は -1 (無制限)である。Libvirt ドライバを使用している場合、Stein にアップグレードした上で非 IDE ディスクバスは 26 から無制限に変更すべきである。`ide`ディスクバスは１サーバ４接続デバイスに制限される。
  
- ポリシールール `os_compute_api:servers:create:zero_disk_flavor` のデフォルト値が `rule:admin_or_owner` から `rule:admin_api` に変更される。これにより、admin ロールのないユーザはボリューム付きサーバでない限り disk=0 のフレーバを使用してサーバを作成する事ができなくなる。
  
- Libvirt ドライバ使用時、NUMA トポロジを持つインスタンスのライブマイグレーションがデフォルトで無効化された。これには CPU pinning や hugepage を持つインスタンスのライブマイグレーションも含まれる。

- Newton リリースで追加されたオンラインデータマイグレーション `migrate_instances_add_request_spec` が今回削除された。nova-api DB における `request_specs` エントリに一致しない古いインスタンス用の Controller サービスにおける互換コードも同様に削除された。Nova Stein リリースにアップグレードする前に `nova-status upgrade check` コマンドで `Request Spec Migration` を必ずチェックする事。
  
- `nova-manage db online_data_migrations` コマンドは Newton リリース以前に作成されたインスタンスの `virtual_interfaces` レコードを補完するようになった。
  
- フレーバーの extra-spec とイメージ属性の検証機能追加により、サーバ作成／リサイズ／再作成用 Compute API はこれらの値が適切にフォーマットされていないか互換性がない場合に 400 エラーを返すようになった。
  
- `resource_class` フィールドが設定されている Ironic ノードのみスケジュールされるようになった。CPU, RAM, ディスクはリソーストラッカーにレポートされない。Stein へのアップグレード前に Ironic ノードに `resource_class` フィールドを設定する必要がある。
  
- Libvirt ドライバは、`nova-compute` サービス再起動時に VGPU インベントリと割当を reshape する。これにより、VGPU インベントリと関連する割当はルート compute ノードリソースプロバイダから、ツーリー中の子リソースプロバイダに移動される。これは Stein において起動時に１会だけ実施され、エンドユーザからは認識されない。
  
- `[libvirt]/live_migration_progress_timeout` は Ocata リリースで廃止予定になり、Stein で削除された。また、現在のライブマイグレーション関連コードで進捗情報を元に post-copy を自動的に行う部分も削除された。
  
- `[compute]/live_migration_wait_for_vif_plug` 設定オプションのデフォルト値が True に変更された。このオプションが True に設定されていると、いくつかのネットワークバックエンドは機能しなくなるが、OVS, linuxbridge は機能する。
  
- `maximum_instance_delete_attempts` 設定オプションの最小値が制限され、1 未満の場合はエラーが出るようになった。
  
- `vrouter` VIF plug/unplug コードが `contrail-nova-vif-driver` と呼ばれるパッケージに分離された。このパッケージは Neutron プラグインとして Contrail, OpenContrail, Tungsten Fabric の使用時に Compute ノードにインストールする必要がある。このパッケージは現在 [OpenContrail 側でホスティングされている](https://github.com/Juniper/contrail-nova-vif-driver)が、将来 Tungsten Fubric に移管されると見られる。
  
- `nova-manage db online_data_migrations` コマンドは最後のバッチ試行でいくつかのマイグレーションが失敗し(例外が発生)、他に成功したマイグレーションがない場合に終了ステータス 2 を返すようになった。
  
- `nova-status upgrade check` コマンドは `nova-consoleauth` サービス使用をチェックし、使用していればライブ／ローリングアップグレード実行中に `[workarounds]enable_consoleauth = True` を設定する為の警告を出力するよう変更された。

- `[libvirt]/sysinfo_serial` 設定パラメータの設定値(選択肢)に `unique` 値を追加した。これはゲストのシリアルナンバーに `instance.uuid` を設定する。今回この値がデフォルトとなった。この値は、インスタンスがホスト間をマイグレーションした際にゲストのシリアルが同一である事を保証する。

- Pike リリースで廃止予定になった `caching_scheduler` スケジューラドライバが今回削除された。`nova-manage placement heal_allocations` コマンドで CacheSchedulerを FilterScheduler にマイグレーションできる。いまだに `USES_ALLOCATION_CANDIDATES = False` を設定して Placement サービスを回避している独自のスケジューラを使用している場合、openstack-dev ML か Freenode IRC の #openstack-nova チャネルで Nova 開発チームに連絡をとってほしい。

- Queens リリースで廃止予定になった以下のポリシールールが削除された。
  * `os_compute_api:os-config-drive`
  * `os_compute_api:os-extended-availability-zone`
  * `os_compute_api:os-extended-status`
  * `os_compute_api:os-extended-volumes`
  * `os_compute_api:os-keypairs`
  * `os_compute_api:os-server-usage`
  * `os_compute_api:os-security-groups` (only from /servers APIs)
  * `os_compute_api:os-flavor-rxtx`
  * `os_compute_api:os-flavor-access` (only from /flavors APIs)
  * `os_compute_api:image-size`
  
- Pike リリースで廃止予定になった以下のポリシールールが削除された。
  * `os_compute_api:flavors`
  * `os_compute_api:os-server-groups`
  
- Pike リリースで廃止予定になった以下のポリシールールが削除された。
  * `os_compute_api:os-flavor-manage`
  代わりに以下のルールを使用する事。
  * `os_compute_api:os-flavor-manage:create`
  * `os_compute_api:os-flavor-manage:delete`
  
- ライブマイグレーションと evacuation で移行先ホストを強制する機能が廃止された。理由は、複雑なリソース割当付きのサーバでこうしたリクエストをサポートできないからである。移行先ホスト指定のライブマイグレーションと evacuation リクエストは可能で、スケジューラにより検証される。
  
- Queens リリースで廃止予定になった `quota` グループの以下の設定オプションが削除された。
  * `reservation_expire`
  * `until_refresh`
  * `max_age`
  
- Pike リリースで廃止予定になった `chance_scheduler` が削除された。同様のスケジューリングが必要な場合、`filter_scheduler` で `AllHostsFilter` を有効にし、`[filter_scheduler]/host_subset_size` を調整する事で同様の動作が実現される。

- `[filter_scheduler]/soft_affinity_weight_multiplier`,  `[filter_scheduler]/soft_anti_affinity_weight_multiplier` 設定オプションは最小値が 0.0 になった。また、廃止予定の `[DEFAULT]` グループへのエイリアスが削除された。このため、これらのオプションは `[filter_scheduler]` グループに含まれていなければならない。
  
- Rocky リリースから `nova-consoleauth` サービスが廃止予定になり、新しいコンソールは `nova-consoleauth` バックエンドの DB に加えて セル DB にも認証トークンが保存される。これにより、コンソールプロキシーはセル単位で動かす必要がある。
  
## 廃止予定

- `config_drive_format` 設定オプションが廃止予定になった。これは Libvirt 1.2.17 移行における問題を回避する為のものである。 

- `CoreFilter`, `DiskFilter`, `RamFilter` が廃止予定になった。`filter_scheduler` ドライバ使用時、VCPU, DISK_GB, MEMORY_MB フィルタリングは Placement サービスを使用して処理される。`caching_scheduler` ドライバは以前これらのフィルタに依存するが、`caching_scheduler` ドライバ自体が廃止予定である。
  
- `[workarounds] disable_libvirt_livesnapshot` 設定オプションが廃止予定になった。これは Libvirt 1.2.2 の問題を回避する為のものであり、Nova は既にこのバージョンをサポートしていない。
  
- `nova-consoleauth` サービスが廃止予定になった。コンソールトークン認証ストレージは Rocky リリースで nova-consoleauth サービスバックエンドから DB バックエンドへの移行が始まった。Stein リリースでは DB バックエンドのみが使用される。
  
- `nova-xvpvncproxy` サービスは Xen 専用であるため廃止予定になった。この機能は noVNC と `nova-novncproxy` サービスで代替される。

- `nova-network` サービスのみが使用していた `[DEFAULT]defer_iptables_apply` が `nova-network` と同様廃止予定にあった。