南网平台虚机跨租户迁移方案

发布时间 2023-04-25 11:18:12作者: XU-NING

南网平台虚机跨租户迁移方案

2021年9月

南网平台虚机跨租户迁移方案 1

1. 目标 3

1.1 目标 3

1.2 现网高可用问题分析 3

2. 解决方案 4

2.1 方案总结 4

3. 操作步骤 5

4. 参考 6

需求分析

目标

需要将虚机从一个项目迁移到另一个项目下。

可行性分析

南网云平台基础云是基于OpenStack实现的,基础云资源都是多租户隔离的。

计算资源多租户隔离

在OpenStack中,计算资源多租户隔离的技术是主机集(HostAggregate),即云管理员事先创建一个主机集,之后将特定的计算节点主机加入这个主机集,再为主机集设置元数据值(filter_tenant_id),这样当该租户创建虚拟机时,Nova的scheduler会将请求调度到与该租户关联的主机集中,主机集以外的计算节点不会被该租户使用。

存储资源多组合隔离

存储资源的隔离在cinder和ceph 中都可以实现。由于cinder支持多后端存储机制,因此云管理员可以为每个后端创建一个队员的volume type,并通过设置volume type的quotas形式将租户的ID与Type关联,这样租户在创建volume时只需指定volume type,则租户的volume就会自动创建在与租户关联的存储后端上。

如果在OpenStack 中使用的是Ceph分布式式存储集群,则通过定制ceph中不同的Crush Rule也可以实现Ceph数据存储的物理隔离。例如将性能要求极高的租户数据存储在SSD组成的池中,将仅对容量有要求的租户数据存储在SATA盘组成的池中。

网络资源多组合隔离

OpenStack中的网络隔离主要采取逻辑隔离的方式,每个租户可以自己创建自己的虚拟网络,不同租户之间的网络通过软件技术实现逻辑隔离。例如VLAN、VXLAN和GRE都是Openstack中最常见的网络隔离模式。

综上所述,需要要实现虚机跨租户迁移,从逻辑角度分析就是就需要把虚机对应的各个资源(系统盘,数据盘,网络,安全组...)等等所有资源的的租户id都替换成新的租户id,但是从平台而言,暴力的修改租户id涉及面非常广,网络的租户id是不可以直接修改的,需要新租户下创建网络重新做绑定的操作。修改租户id这块可行性几乎不存在,最终能操作的还是对卷(系统盘,数据盘)进行迁移,然后通过迁移到新租户下的系统盘创建虚机。如果您需要相同的 IP/MAC,请在新租户创建具有相同 IP/MAC 的网络端口并附加到实例。

解决方案

方案一

  1. 关闭虚机
  2. 把虚机的系统盘创建快照
  3. 把步骤2创建快照新建一个云硬盘
  4. 通过云硬盘传送(cinder transfer)功能修改该云硬盘的租户信息。

# cinder transfer-create VOLUME //VOLUME 是云硬盘的名称或者ID

+------------+---------------------------------------+

| Property | Value |

+------------+---------------------------------------+

| auth_key | f03bf51ce7ead189 |

| created_at | 2014-12-08T03:46:31.884066 |

| id | 3f5dc551-c675-4205-a13a-d30f88527490 |

| name | None |

| volume_id | bcf7d015-4843-464c-880d-7376851ca728 |

+------------+---------------------------------------+

# cinder transfer-accept TRANSFERID TRANSFERKEY
//TRANSFERID和TRANSFERKEY分别是cinder transfer-create命令返回的id和auth_key的值

  1. 如果有其他数据盘,可以通过云硬盘传送方式修改数据盘的租户信息。
  2. 在新租户下通过传送过来的云硬盘创建虚机。
  3. 把数据盘挂载到新创建的虚机中。

方案二

  1. 关闭虚机
  2. 把虚机系统盘制作成镜像
  3. 把步骤2创建的镜像设置成共享
  4. 在新租户下使用步骤3共享的镜像创建虚机
  5. 通过云硬盘传送方式把数据盘的租户信息改成新的租户。
  6. 把数据盘挂载到新创建的虚机中。

以上两种方案都没有考虑网络,如果您需要相同的 IP/MAC,请在新租户创建具有相同 IP/MAC 的网络端口并附加到实例。

操作步骤

方案一需要全部命令操作。

  1. 创建快照
    # cinder snapshot-create --force True --name yy source-volume-id
  2. 通过快照创建卷:
    # cinder create --snapshot-id xxx --name yy
  3. 通过已有卷创建新卷:
    # cinder create --source-volid xxx --name yy
  4. 云硬盘传送
    # cinder transfer-create VOLUME //VOLUME 是云硬盘的名称或者ID
    # cinder transfer-accept TRANSFERID TRANSFERKEY //TRANSFERID和TRANSFERKEY分别是cinder transfer-create命令返回的id和auth_key的值
  5. 通过云硬盘启动虚机
    #nova boot test --flavor 10 --block-device source=image,id=xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx,dest=volume,size=50,bootindex=0  --nic net-id=a86f0f1f-bc02-4a67-8a31-bec7507dc313

方案二除云硬盘传送需要手动操作,其他步骤都可以在页面操作。

参考

https://access.redhat.com/solutions/5118601

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux_openstack_platform/7/html/instances_and_images_guide/manage_volumes