おうち OpenStack のバージョン選定について

## バージョン選定で躓く部分

いざ 「OpenStack を導入しよう！」となったとき、まず、

- どのバージョンにしようか
- どんなバージョンがあって
- どのようなインストールがあるのか

という点で悩むと思います。
以下は、その時の備忘録として書いたものです。

## まずやったこと

2023/12/03 14:00 現在 `openstack release` で検索して、
OpenStack は どんな種類のバージョンがあって、
開発が続いているバージョンはどれで、保守がどれくらい続いてるのか調べた

`openstack <series> installation` で検索して、
どんなインストール方法があるか調べた

## OpenStack Releases

### リリースやライフサイクルについて

- [OpenStack Releases](https://releases.openstack.org/)
- [Stable Branches](https://docs.openstack.org/project-team-guide/stable-branches.html)

を見ると、

- OpenStackは6ヶ月サイクルで開発され、リリースされる
- 初リリース後、各シリーズで追加の安定ポイントがリリースされる

ことが分かり、
各リリースシリーズの詳細は、各シリーズのページで確認できて、
Series, Status, Initial Release Date, Next Phase, EOL Date
といった情報があった

| Series | Status | Initial Release Date | Next Phase | EOL Date |
| :--- | :--- | :--- | :--- | :--- |
| 2024.1 Caracal (SLURP) | Development | 2024-04-03 estimated (schedule) | Maintained estimated 2023-04-03 | -- |
| 2023.2 Bobcat | Maintained | 2023-10-04 | Extended Maintenance estimated 2025-04-04 | -- |
| 2023.1 Antelope (SLURP) | Maintained | 2023-03-22 | Extended Maintenance estimated 2025-04-04 | -- |
| 2022.3 Zed | Maintained | 2022-10-05 | Extended Maintenance estimated 2024-04-05 | -- |
| 2022.2 Yoga | Maintained | 2022-03-30 | Extended Maintenance estimated 2023-11-02 | -- |
| 2022.1 Xena | Extended Maintenance (see note below) | 2021-10-06 | Unmaintained TBD | -- |
| 2021.4 Wallaby | Extended Maintenance (see note below) | 2021-04-14 | Unmaintained TBD | -- |
| 2021.3 Victoria | Extended Maintenance (see note below) | 2020-10-14 | Unmaintained TBD | -- |

### Release Cadence Adjustment

- [2022-02-10 Release Cadence Adjustment](https://governance.openstack.org/tc/resolutions/20220210-release-cadence-adjustment.html)

を見ると、
OpenStack は 6ヶ月ごとにリリースされており、
アップグレードは隣接する2つの調整リリース間でのみテストされ、サポートされていた

そのため デプロイヤー と ディストリビューション は

- 最新の状態を維持するために *6カ月ごとにアップグレードする* か
- 実行時に非隣接リリース間を移動するために *Fast Forward Upgrades (FFUs)する* か

という、どちらかの対応が必要だった

Fast Forward Upgrades (FFUs) は、
長期間にわたるバージョンアップを一度に効率的に行うための手法で、
複数のリリースを一度にスキップしてアップグレードするイメージ

2022.3 Zed => 2023.1 Antelope (SLURP) でなく、
2022.3 Zed をスキップして 2022.2 Yoga => 2023.1 Antelope (SLURP) に一気に上げる感じ

OpenStack は 隣接する2つの調整リリース間しかテストされていないので、
一度に多くの変更を適用すると、予期せぬ互換性の問題等が発生しやすくなる

### 課題と解決策

一部の デプロイヤー と ディストリビューション は
6ヶ月のアップグレードは困難、不可能、または望ましくないと指摘されている
特に大規模な環境では、プロセス自体に十分な時間がかかり、アップグレードが常に発生する

FFUsプロセスは手間のかかるものであり、
公式でテストされてないため、自力でテストする必要がある
(つまり、アップデート大変...)

- [2022-02-10 Release Cadence Adjustment > Proposed Solution](https://governance.openstack.org/tc/resolutions/20220210-release-cadence-adjustment.html#proposed-solution)

を見ると、
その解決策として、SLURPリリースを導入することが提案されている

SLURP というのは Skip Level Upgrade Release Process の略で、
隣接するリリース間のみをサポートするのではなく、
隣接するリリース間をスキップしてアップグレードすることをサポートするというもの

これにより、SLURPリリース => SLURPリリース はアップグレード可能になった

| Series | Status | Initial Release Date | Next Phase | EOL Date |
| :--- | :--- | :--- | :--- | :--- |
| 2024.1 Caracal (SLURP) | Development | 2024-04-03 estimated (schedule) | Maintained estimated 2023-04-03 | -- |
| 2023.2 Bobcat | Maintained | 2023-10-04 | Extended Maintenance estimated 2025-04-04 | -- |
| 2023.1 Antelope (SLURP) | Maintained | 2023-10-04 | Extended Maintenance estimated 2025-04-04 | -- |

2023.1 Antelope (SLURP) => 2024.1 Caracal (SLURP) の間には、
2023.2 Bobcat があり、隣接していないが、
SLURPリリース間は、OpenStackによりテストされ、サポートされているので、
2023.2 Bobcat をスキップして、アップグレード可能になる(FFUsではない)

## 今回のバージョン

2023.2 Bobcat が最新の安定版で、これに決めようと思ったが、
ドキュメントがまだリリースされていなかった

上記の理由で、今回は
2023.1 Antelope (SLURP) でもよくて、
ドキュメントもリリースされていたので、
2023.1 Antelope (SLURP) に決めた

- [OpenStack Docs: 2023.2](https://docs.openstack.org/2023.2/index.html)
  - [OpenStack 2023.2 Deployment Guides](https://docs.openstack.org/2023.2/deploy/)
    - This is documentation in progress for the next release.

- [OpenStack Docs: 2023.1](https://docs.openstack.org/2023.1/index.html)
  - [OpenStack 2023.2 Deployment Guides](https://docs.openstack.org/2023.1/deploy/)
    - [OpenStack Charms Deployment Guide](https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/2023.1/)
    - [Deploying OpenStack using Ansible in Docker Containers (kolla) Guide](https://docs.openstack.org/project-deploy-guide/kolla-ansible/2023.1/)
    - [OpenStack-Ansible Deployment (in LXC Containers or on Bare Metal) Guide](https://docs.openstack.org/project-deploy-guide/openstack-ansible/2023.1/)

## インストール方法について

- [OpenStack 2023.2 Deployment Guides](https://docs.openstack.org/2023.1/deploy/)

を見ると、

- [OpenStack Charms Deployment Guide](https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/2023.1/)
- [Deploying OpenStack using Ansible in Docker Containers (kolla) Guide](https://docs.openstack.org/project-deploy-guide/kolla-ansible/2023.1/)
- [OpenStack-Ansible Deployment (in LXC Containers or on Bare Metal) Guide](https://docs.openstack.org/project-deploy-guide/openstack-ansible/2023.1/)

という3つのインストール方法が紹介されていた

### Deploying OpenStack using Ansible in Docker Containers (kolla) Guide について

[Host machine requirements](https://docs.openstack.org/project-deploy-guide/kolla-ansible/2023.1/quickstart.html#host-machine-requirements) を見ると、

The host machine must satisfy the following minimum requirements:

- 2 network interfaces
- 8GB main memory
- 40GB disk space

と書いてあった

今回、自分の手持ちのリソースは
DeskMini x 2台 と NUC x 3台 なので、
2 network interfaces は無理である、困った

### OpenStack Charms Deployment Guide

[OpenStack Charms Deployment Guide](https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/2023.1/)

によると、
OpenStack Charmsデプロイメントガイドは、
OpenStack Charmsプロジェクトが提供するツールを活用してOpenStackクラウドを構築する方法を示します
このガイドの目的は、Jujuチャームを手動でデプロイして設定することで、
クラウドがどのように構築されるかをしっかりと理解することです
とのこと

[Install MAAS](https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/2023.1/install-maas.html)

に進むと、
Here are the hardware requirements:

- 1 x MAAS system: 8GiB RAM, 2 CPUs, 1 NIC, 1 x 40GiB storage
- 1 x Juju controller node: 4GiB RAM, 2 CPUs, 1 NIC, 1 x 40GiB storage
- 4 x cloud nodes: 8GiB RAM, 2 CPUs, 1 NIC, 3 x 80GiB storage

と書いてあった

6ノード 用意すればよく、
全てのノードが1つのNICを搭載していればよさそうだったので、
こちらの方法でインストールすることにした

#### OpenStack Charms が 単一のNICで動作する理由について

Requirements の Note によると、
MAAS 2.9.2 以降は、ovs-bridge をサポートしていて、
2つのNICが必要とする従来の要件は廃止されたとのこと

``` log
The legacy requirement for two network interfaces on each of the four cloud nodes has been dropped since MAAS (v.2.9.2) added support for Open vSwitch bridges.
This bridge type supports more sophisticated network topologies than the Linux Bridge, and for Charmed OpenStack in particular,the ovn-chassis unit no longer needs a dedicated network device.
```

## 参考

- [OpenStack Releases](https://releases.openstack.org/)
- [Stable Branches](https://docs.openstack.org/project-team-guide/stable-branches.html)

- [2022-02-10 Release Cadence Adjustment](https://governance.openstack.org/tc/resolutions/20220210-release-cadence-adjustment.html)
  - [2022-02-10 Release Cadence Adjustment > Proposed Solution](https://governance.openstack.org/tc/resolutions/20220210-release-cadence-adjustment.html#proposed-solution)
- [OpenStack Docs: 2023.1](https://docs.openstack.org/2023.1/index.html)
  - [OpenStack 2023.2 Deployment Guides](https://docs.openstack.org/2023.1/deploy/)
    - [OpenStack Charms Deployment Guide](https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/2023.1/)
      - [Install MAAS](https://docs.openstack.org/project-deploy-guide/charm-deployment-guide/2023.1/install-maas.html)
    - [Deploying OpenStack using Ansible in Docker Containers (kolla) Guide](https://docs.openstack.org/project-deploy-guide/kolla-ansible/2023.1/)
      - [Host machine requirements](https://docs.openstack.org/project-deploy-guide/kolla-ansible/2023.1/quickstart.html#host-machine-requirements)
    - [OpenStack-Ansible Deployment (in LXC Containers or on Bare Metal) Guide](https://docs.openstack.org/project-deploy-guide/openstack-ansible/2023.1/)

- [devstack](https://docs.openstack.org/devstack/latest/)
- [microstack](https://microstack.run/)
  - [microstack / Single-node / Installation](https://microstack.run/docs/single-node)
- [OpenStackの各コンポーネント](https://news.mynavi.jp/techplus/article/openstack-1/)