OpenStack環境のマイグレーションについて

OpenStackやOpenShiftなどのCloud製品を担当しているソリューションアーキテクトの輿水です。

Red Hat OpenStack Platformのライフサイクルについて何度か取り上げていますが、今回は、OpenStack環境のマイグレーションを取り上げます。「新規にRHOSP環境を構築し、ワークロードをマイグレーションする」という考え方です。既存環境をアップグレードするin-placeアップグレードについては過去の記事とRed Hatのカスタマーポータルサイトに掲載されている公式ドキュメントを参照してください。

OS-Migrate

OS-MigrateはふたつのOpenStackクラウド間でリソースとワークロードをエクスポートおよびインポートするためのフレームワークを提供するオープンソースプロジェクトです。Red Hat OpenStack Platformの一部として提供されている訳ではなく、Red Hatが公式にサポートしている訳でもありません。あくまでオープンソースであり、このような取り組みがされていますというご紹介になります。

OS-Migrateとは

  • Ansible Playbookコレクション
  • ユースケースにあわせて、用意されているrolesやmodulesを利用してPlaybookをカスタマイズすることが前提です
  • インポート・エクスポートにはOpenStack APIを使用します。データベースを直接操作することはありません

マイグレーションのおおまかな流れ

  • Destination Cloud(新規環境)作成(これはOS-Migrateの範疇外)
  • Pre-workload("control plane") Migration
    • Source Cloud(既存環境)からリソースをエクスポートしてDestination Cloud(新規環境)にインポート
  • Workload Migration
    • Source Cloud(既存環境)からVMとアタッチされているボリュームをエクスポートしてDestination Cloud(新規環境)にインポート

これらのエクスポート・インポートの操作はMigratorと呼ぶホストで実施します。OpenStack管理者権限ではなくテナント毎に実施することを前提としています。エクスポート・インポートの情報はyamlファイルに記載されるため、移行に不要な情報を削除したり移行先で名前を変更したい場合など、必要に応じて編集することも可能です。


Pre-workload Migrationの対象となるリソース

VMやボリュームなどのワークロードをマイグレーションする前に、Pre-workloadということでOpenStackリソースをマイグレーションします。マイグレーションできるリソースは以下になります。現在の制限としてFloting ipについては、そのまま(=同じIPアドレス)移行はできません。Source CloudとDestination CloudでFloting ipレンジが異なっていると考えられるからです。移行先の新規環境において、新しいFloting ipのレンジから自動的に新しくアサインすることは可能です。同様の観点で、プロバイダーネットワークを使用している環境の移行ではSource CloudとDestination CloudでIPアドレスレンジの重複をどうするか考慮する必要がありますが、これはOS-Migrateの範疇外です。

  • ユーザー
  • プロジェクト
  • ネットワーク
  • サブネット
  • ルーター
  • ルーターのインターフェース
  • セキュリティグループ
  • セキュリティグループのルール
  • glanceイメージ
  • novaフレーバー
  • keyペア

f:id:mkoshimizu:20210327101605p:plain:w700

Workload Migration

ワークロード、すなわちVMとアタッチされているボリュームをマイグレーションします。ワークロードを停止して移行するコールドマイグレーションです。移行の際に、boot diskをコピーするかしないかを指定できます。boot diskのコピーを有効にすると、移行先でのインスタンスはboot-from-volumeになります。


Pre-workload Migration

Migrator

  • 必要なパッケージ
    • Ansible 2.9
    • OpenStack Client
    • OpenStack SDK

この環境にOS-Migrateをインストールします

  • ansible-galaxy collection install os_migrate.os_migrate

インストールで作成されるファイルの一例

├── collections
│   └── ansible_collections
│       ├── community
│       │   ├── crypto
│       │   │   ├── changelogs
│       │   │   ├── meta
│       │   │   ├── plugins
│       │   │   └── tests
│       │   └── general
│       │       ├── changelogs
│       │       ├── meta
│       │       ├── plugins
│       │       ├── scripts
│       │       └── tests
│       ├── openstack
│       │   └── cloud
│       │       ├── docs
│       │       ├── meta
│       │       ├── plugins
│       │       └── scripts
│       └── os_migrate
│           └── os_migrate
│               ├── playbooks
│               ├── plugins
│               ├── roles
│               └── tests
└── tmp

# os_migrate以下

└── os_migrate
    ├── FILES.json
    ├── MANIFEST.json
    ├── README.md
    ├── localhost_inventory.yml
    ├── playbooks
    │   ├── delete_conversion_hosts.yml
    │   ├── deploy_conversion_hosts.yml
    │   ├── export_flavors.yml
    │   ├── export_images.yml
    │   ├── export_keypairs.yml
    │   ├── export_networks.yml
    │   ├── export_projects.yml
    │   ├── export_router_interfaces.yml
    │   ├── export_routers.yml
    │   ├── export_security_group_rules.yml
    │   ├── export_security_groups.yml
    │   ├── export_subnets.yml
(略)

MigratorはOpenStack APIを利用するので、認証のための情報をyamlファイルを作成し設定します。リソースが管理者に所属している場合を除いて、プロジェクト/テナント毎にcredentialを利用してOS-migrateを使用することを推奨してます。

  • 必要な認証情報
    • Source project
    • Destination project
    • Source admin
    • Destination admin

設定例:os-migrate-vars.yml

os_migrate_src_auth:
  auth_url: http://192.168.0.13.199/v3
  password: srcpassword
  project_domain_name: Default
  project_name: src
  user_domain_name: Default
  username: src
os_migrate_src_region_name: regionOne
os_migrate_dst_auth:
  auth_url: http://192.167.0.16:5000/v3
  password: dstpassword
  project_domain_name: Default
  project_name: dst
  user_domain_name: Default
  username: dst
os_migrate_dst_region_name: regionOne

os_migrate_data_dir: /home/migrator/os-migrate-data

Migratorの準備ができたところで、各種リソースをエクスポート・インポートします。コマンドでよく利用する値は環境変数で設定しておきます。

例として、ネットワークをエクスポートして、それをインポートするためにはMigratorで下記のコマンドを実行します。なお、Migrator はSource CloudとDestination Cloud両方に対してアクセス可能である必要があります。

OSM_COL=/home/migrator/.ansible/collections/ansible_collections/os_migrate/os_migrate

ansible-playbook -v \    
  -i $OSM_COL/localhost_inventory.yml \    
  -e @os-migrate-vars.yml \   
  $OSM_COL/playbooks/export_networks.yml

ansible-playbook -v \    
  -i $OSM_COL/localhost_inventory.yml \    
  -e @os-migrate-vars.yml \   
  $OSM_COL/playbooks/import_networks.yml
Workload Migration

Conversion Host

ワークロードのマイグレーションではConversion Hostというものを利用します。これは、Source CloudとDestination Cloud両方で稼働する仮想マシンで、バイナリーボリュームデータをSource CloudからDestination Cloudに転送する処理を行います。Conversion Hostはv2v-conversion-host-appliance-devel.qc2というイメージで提供されており、このイメージをSource CloudとDestination Cloudにアップロードしておき、Source CloudとDestination Cloudの移行対象のテナントでインスタンスを起動します。

f:id:mkoshimizu:20210327142527p:plain:w400

  • Source Cloudでの処理

    • 移行対象の仮想サーバからボリュームをデタッチします
    • Source CloudのConversion Hostにボリュームをアタッチします
    • ボリュームをブロックデバイスとしてエクスポートして、Destination CloudのConversion Hostからの接続を待ちます
  • Destination Cloudでの処理

    • Destination CloudのConversion Host上に新しいボリュームを作成します
    • Source CloudのConversion Hostによってエクスポートされたブロックに接続し、新しくアタッチされたボリュームにデータをコピーします
    • Destination CloudのConversion Hostからボリュームをデタッチします
    • 新しいボリュームから新しい仮想サーバを作成します

Workloadについてもエクスポート・インポートのコマンドはPre-workloadと同様にMigratorで実行します。

ansible-playbook -v \    
  -i $OSM_COL/localhost_inventory.yml  \    
  -e @os-migrate-vars.yml  \    
  $OSM_COL/playbooks/export_workloads.yml

ansible-playbook -v \    
  -i $OSM_COL/localhost_inventory.yml  \    
  -e @os-migrate-vars.yml  \    
  $OSM_COL/playbooks/import_workloads.yml

これらの処理をテナント毎にひたすら実行します。リソースはネットワーク、サブネット、ルーター、ルーターインターフェース等々たくさんありますが、クラウドが稼働中でもエクスポート・インポート処理はできるので問題ないと思います。ワークロードについては停止を伴うため、移行タイミングに考慮が必要です。そのため、実際にマイグレーションするとなると、テナントの数やVMの数、使用しているボリュームのサイズ等考慮すべき点は多数ありますので、このOS-Migrateというツールが即使えるという訳ではありませんが、マイグレーションの方法の一例として紹介させていただきました。

↓OS-Migrateを開発している方々の記事 www.redhat.com

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。