仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

Packstackで構築したOpenStackをOcataからPikeにアップグレードする

ここ数日、Packstackで構築したOpenStackをOcataからPikeにアップグレードする方法を調べていました。 昔と比べると、そんなに苦労することなくアップグレードできることが確認できました。情報を共有したいと思い、こちらのブログに書かせていただきました。

ちなみに手動インストールで構築した場合でも、CentOS 7でOVSを使ってインストールした環境であれば、同様にアップグレードできると思います。バージョンアップグレードの参考になれば幸いです。

前提条件

今回の環境構築の前提条件は次の通りです。

  • OpenStack Ocata
  • NeutronはOVSを利用
  • OpenStackを標準インストールしたCentOS 7.4上に構築
  • OpenStack OcataバージョンをPikeバージョンにアップグレードする

アップグレードの流れ

OpenStackバージョンのアップグレードの流れは基本的には

  • 新しいOpenStackリリースリポジトリーの有効化
  • 新しいOpenStackパッケージの「インストール」
  • なんちゃらマネージ db sync なんちゃら の実行
  • 関連サービスの再起動

で良いようです。インストールするパッケージや実行するdb syncのコマンドはインストールガイドを確認します。

OpenStack Docs: Install OpenStack services

アップグレードの前に

OpenStackは疎結合なシステムです。従って、コンポーネントごとに別のOpenStackバージョンを使うことも可能です。

実際のアップグレード作業に入る前に、次のサイトの情報を確認し、OpenStackのアップグレードについて理解を深めてください。

superuser.openstack.org

OpenStack Pikeリポジトリーの追加

CentOS 7ではOpenStackパッケージをRDOのリポジトリーか、CentOS Cloud SIGが提供するリポジトリーのパッケージを利用することができます。CentOS Cloud SIGが提供するパッケージを使いますので次のように実行します。

# yum install centos-release-openstack-pike

Keystoneのアップグレード

新しいパッケージをインストールします。

# yum install openstack-keystone httpd mod_wsgi

Keystoneのdb_syncを実行します。

# su -s /bin/sh -c "keystone-manage db_sync" keystone

現在のKeystoneはHTTPバックエンドで動いているため、Apacheを再起動します。

# systemctl restart httpd.service

正常に起動しない場合はKeystoneのログを確認します。

Glanceのアップグレード

新しいパッケージをインストールします。

# yum install openstack-glance

Glanceのdb_syncを実行します。変換が行われます。

# su -s /bin/sh -c "glance-manage db_sync" glance

/usr/lib/python2.7/site-packages/oslo_db/sqlalchemy/enginefacade.py:1328: OsloDBDeprecationWarning: EngineFacade is deprecated; please use oslo_db.sqlalchemy.enginefacade
  expire_on_commit=expire_on_commit, _conf=conf)
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade ocata01 -> pike01, drop glare artifacts tables
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
Upgraded database to: pike01, current revision(s): pike01

関連のサービスを再起動します。

# systemctl restart openstack-glance-api.service openstack-glance-registry.service

正常に起動しない場合はGlanceのログを確認します。

Novaのアップグレード

Packstackで作ったOcata環境はnova-manage.logをroot権限で読み書きしてしまいます。このままだとPikeでは不具合があるため、次のように実行して権限を書き換えてください。

# chown nova.nova /var/log/nova/nova-manage.log

本件に関しては次のバグを参照してください。

bugs.launchpad.net

新しいパッケージをインストールします。

# yum install openstack-nova-api openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy   openstack-nova-scheduler openstack-nova-placement-api

Novaのnova-manageコマンドを各種実行します。

# su -s /bin/sh -c "nova-manage api_db sync" nova
# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
# su -s /bin/sh -c "nova-manage db sync" nova

関連のサービスを再起動します。

# systemctl restart openstack-nova-api.service  openstack-nova-consoleauth.service openstack-nova-scheduler.service   openstack-nova-conductor.service openstack-nova-novncproxy.service

正常に起動しない場合はNovaのログを確認します。

Nova-Computeのアップグレード

新しいパッケージをインストールします。

# yum install openstack-nova-compute

関連のサービスを再起動します。

# systemctl restart libvirtd.service openstack-nova-compute.service

正常に起動しない場合はNova-Computeのログを確認します。

Neutron のインストール前に

公式のインストール手順書はLinux Bridgeを利用しています。 PackstackはOpenvSwitchを使うため、linuxbridgeをopenvswitchに置き換える必要があります。

Neutron (controller)側の設定

コントローラー側に必要なNeutronパッケージをインストールします。

# yum install openstack-neutron openstack-neutron-ml2 \
  openstack-neutron-openvswitch ebtables

neutron-db-manageを実施してNeutronデータベースを上書きします。

# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
  --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron

INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
  Running upgrade for neutron ...
INFO  [alembic.runtime.migration] Context impl MySQLImpl.
INFO  [alembic.runtime.migration] Will assume non-transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade a9c43481023c -> 804a3c76314c, Add data_plane_status to Port
INFO  [alembic.runtime.migration] Running upgrade 804a3c76314c -> 2b42d90729da, qos add direction to bw_limit_rule table
INFO  [alembic.runtime.migration] Running upgrade 2b42d90729da -> 62c781cb6192, add is default to qos policies
INFO  [alembic.runtime.migration] Running upgrade 62c781cb6192 -> c8c222d42aa9, logging api
INFO  [alembic.runtime.migration] Running upgrade c8c222d42aa9 -> 349b6fd605a6, Add dns_domain to portdnses
INFO  [alembic.runtime.migration] Running upgrade 349b6fd605a6 -> 7d32f979895f, add mtu for networks
  OK

nova-apiサービスを再起動します。

# systemctl restart openstack-nova-api.service

Neutronの関連サービスを再起動します。

# systemctl restart neutron-server.service \
  neutron-openvswitch-agent.service neutron-dhcp-agent.service \
  neutron-metadata-agent.service

Neutron L3サービスを再起動します。

# systemctl restart neutron-l3-agent.service

ステータスを確認します。

# systemctl status neutron-server.service \
  neutron-openvswitch-agent.service neutron-dhcp-agent.service \
  neutron-metadata-agent.service neutron-l3-agent.service

Neutron (compute)側の設定

次にコンピュート側のOVSエージェントプラグイン側のアップグレードをします。

関連するパッケージをインストールします。

# yum install openstack-neutron-openvswitch ebtables ipset

関連サービスを再起動します。

# systemctl restart openstack-nova-compute.service
# systemctl restart neutron-openvswitch-agent.service

CentOS 7+CentOS Cloud SIG版で構成するOpenStackのOcataバージョンからPikeバージョンへの最低限のアップグレードは以上で完成です。

その他のパッケージの更新

現在はRabbitMQ、MariaDB、OVS、openstack-dashboard、python-memcachedなどが古いバージョンの状態です。 弊社環境では全てアップグレードして関連サービスを再起動するだけでアップグレードがうまくできましたが、少しずつコンポーネント単位でアップグレードするにはYUMプラグインのversionlockを使うと便利です。

まず、次のようにコマンドを実行して、アップグレードの影響がありそうなパッケージをバージョンロックします。

# yum versionlock add openvswitch openstack-dashboard python-django-horizon python-memcached
# yum update

まずはDashboardを更新してみましょう。 yum versionlock deleteコマンドでバージョンロックしたパッケージをロック解除できます。

# yum versionlock delete openstack-dashboard python-django-horizon python-memcached
# yum update
# systemctl restart httpd.service memcached.service

最後にOVSを更新します。この手順で問題なく更新できましたが、正直言うと無理にアップグレードしないでも良いのかなと思っています。OVSサービスを再起動すると、ovs-vsctl statusの結果が新しいバージョンに更新されます。

# yum versionlock delete openvswitch
# yum update
# systemctl restart openvswitch

無事にアップグレードが成功することを祈っています。