虚拟机的创建
虚拟机创建流程
对于nova来说,它最主要的功能就是维护虚拟机的生命周期。以虚拟机创建为例。在创建虚拟机时,它会与其他组件配合,共同完成虚拟机的创建工作。如创建虚拟机所需要的镜像文件,Nova需要通过HTTP方式向glanceclient发送请求,从而获取虚拟机的镜像文件;创建虚拟机网络时,Nova需要通过HTTP方式向neutronclient,从而创建并绑定虚拟机所需要的网络资源;如果需要创建存储磁盘,Nova需要通过Http方式向cinderclient发送请求,创建虚拟机所需要的磁盘。
以上是Nova与其他组件的交互,从以上分析可以看出,Nova与其他组件的交互主要是使用HTTP的方式,在虚拟机的创建时,Nova内部服务之间的流程可以归纳为如下几点:
1.nova-api:主要接受外部(CLI/dashboard)发送来的HTTP请求,进行一系列认证后,再将其转换成内部请求,并通过oslo_message与nova-conductor/nova-compute交互;
2.nova-conductor:主要作为一个数据库代理存在,是nova-compute读写数据库的桥梁,这样做的主要目的是避免nova-compute直接操作数据库而引发安全性问题
3.nova-compute:主要借助计算节点上的Hypervisor对虚拟机进行创建,删除和挂起等操作
4.nova-scheduler:用来筛选计算节点,然后筛选出的计算节点告诉nova-compute,nova-compute就会在这个计算节点上生成libvirt.xml,交由相应的Hypervisor(比如kvm)来创建虚拟机
虚拟机创建的命令行操作
启动一个虚拟机必要的资源是镜像(image),规格(flavor),网络(network)。我们需要首先创建这三种资源
上传镜像
本教程创建虚拟机所使用的镜像为cirros镜像,该镜像所对应的操作系统为一个专门适用于云中搭建虚拟机的微型操作系统,其下载地址为http://download.cirros-cloud.net/,下载镜像之后,在命令行中使用如下命令上传镜像
openstack image create "cirros" --file cirros-0.3.5-x86_64-disk.img --disk-format qcow2 --container-format bare --public
其中 “cirros”为镜像创建后在openstack中的镜像名称,–file后面为镜像文件的地址和镜像文件的名称(若镜像文件在命令行当前目录下,则只需要输入镜像文件名称),–disk-format后面为镜像格式,–container-format后面为图片的容器格式bare,–public表示共享此镜像使所有用户可见
操作完成之后,通过openstack image list命令可以查看到刚才上传的镜像
创建虚拟机flavor(规格)
创建flavor的命令行命令如下所示:
openstack flavor create myflavor --ram 512 --disk 5 --vcpu 1 --public
其中myflavor为flavor名称,–ram后面为虚拟机内存大小(单位MB),–disk后面为硬盘容量(单位GB),–vcpu为vcpu的数量,–public表示共享该规格为所有用户可见
创建网络
openstack中网络的创建分为两个部分。首先创建一个网络,外部网络(external)或者是私网(internal);然后创建子网,虚拟机所能够使用的网络必须有一个或多个子网。为了简单起见,我们创建一个外部网络(external),其命令行命令如下:
openstack network create mynetwork --external
然后在mynetwork种创建子网
openstack subnet create mynetwork_subnet --allocation-pool start=192.168.1.100,end=192.168.1.110 --subnet-range 192.168.1.0/24 --gateway 192.168.1.1 --network mynetwork
各参数的意义如下:
1.–allocation-pool start=X.X.X.X,end=X.X.X.X。分配的运营商地址范围。该范围中的ip都能上网。
2.–subnet-range 子网的范围。
3.–gateway 网关地址。
4.–network 指定子网附属的网络。
创建网络成功之后,通过openstack network list 可以看到mynetwork及其附属子网mynetwork_subnet均已创建成功
创建虚拟机
成功创建完镜像cirros,flavor规格myflavor以及网络mynetwork之后,便可以进行虚拟机的创建工作,由于nova-compute部署于两个计算节点,所以在对应的计算节点创建虚拟机之前,需要打开该节点所在的物理主机host,在控制节点使用openstack compute service list命令确认该host上的计算服务已经开启,之后便可以使用如下命令创建虚拟机,参数分别为镜像 --image、规格 --flavor、网络 --nic net-id,虚拟机名称为myinstance:
openstack server create myinstance --image cirros --flavor myflavor --nic net-id=mynetwork
创建成功之后便可通过openstack server show myinstance 查看虚拟机状态,当status为active时表示虚拟机创建成功并启动,通过如下命令,便可获得可以登陆虚拟机控制台的url,复制url到浏览器中即可控制虚拟机
openstack console url show myinstance
虚拟机在不同计算节点之间的冷迁移和热迁移
在openstack中,迁移主要分为2种方式:冷迁移和热迁移。冷迁移(cold migration),也叫静态迁移。关闭电源的虚拟机进行迁移。通过冷迁移,可以选择将关联的磁盘从一个数据存储移动到另一个数据存储。热迁移(Live Migration),又叫动态迁移、实时迁移,即虚拟机保存/恢复,通常是将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。在迁移之前,需要在控制节点和计算节点进行一些配置准备工作。
控制节点调度服务配置
为了能够实现虚拟机在不同计算节点之间的迁移,需要在控制节点进行调度服务相关的配置,修改控制节点的配置文件/etc/nova/nova.conf如下:
scheduler_default_filters=AggregateInstanceExtraSpecsFilter,AvailabilityZoneFilter,RamFilter,ComputeFilter
重启控制节点上的计算服务
systemctl restart openstack-nova-api.service openstack-nova-scheduler.service openstack-nova-conductor.service
配置两个计算节点之间互信(能通过ssh免密码互相登陆)
计算节点1,2设置nova用户可以登陆
usermod -s /bin/bash nova //更改nova用户的shell
passwd nova //设置nova的密码
计算节点1生成密钥对
su - nova //切换到nova
ssh-keygen //生成密钥对,之后一路默认回车
ssh-copy-id -i /var/lib/nova/.ssh/id_rsa.pub compute2 //把公钥写入到目标计算节点的/var/lib/nova/.ssh/authorized_keys
设置计算节点2部分文件的权限(注意只能是这个权限,过多或过少的权限都会导致互信失败)
chmod 700 -R .ssh
chmod 600 .ssh/authorized_keys
计算节点1添加私钥
su - nova
ssh-agent bash
ssh-add /var/lib/nova/.ssh/id_rsa
ssh 计算节点2主机名
此时便可无密码登陆计算节点2控制台,节点2免密登陆节点1则再执行步骤2之后的内容
完成上述配置之后便可进行计算节点之间虚拟机冷迁移操作
虚拟机冷迁移操作
假设想要将计算节点1上运行的instance1迁移到计算节点2上,操作的大致流程如下所示:
计算节点1的实例关机——>将/var/lib/nova/instances/下对应的实例使用scp命令配合 -r 参数传输到计算节点2的/var/lib/nova/instances/——>使用chown命令修改文件所有者——>手动修改nova数据的的instances表的host与node字段——>将虚拟机开机——>冷迁移完成
利用openstack server list 获取instance1对应的ID(假设为02e0808d-dae1-42e9-ae91-0e0a00f0f555),然后将该实例通过scp命令传输到目的主机
scp -r /var/lib/nova/instances/02e0808d-dae1-42e9-ae91-0e0a00f0f555/ 计算节点2主机名:/var/lib/nova/instances/
在计算节点2修改实例文件夹的权限所有者
chown nova:nova /var/lib/nova/instances/02e0808d-dae1-42e9-ae91-0e0a00f0f555/
chmod +777 -R /var/lib/nova/instances/02e0808d-dae1-42e9-ae91-0e0a00f0f555/
在控制节点数据库中修改instances表的host与node字段
update nova.instances set host='计算节点2主机名',node='计算节点2主机名' where uuid='02e0808d-dae1-42e9-ae91-0e0a00f0f555';
在计算节点2重启计算服务并开启虚拟机
systemctl restart openstack-nova-compute
openstack server start 02e0808d-dae1-42e9-ae91-0e0a00f0f555
虚拟机热迁移设置
要想能够在两个计算节点之间进行虚拟机热迁移操作,除了上述配置之外,还需要在两个计算节点进行如下配置
计算节点更新组件
yum install libvirt qemu-* -y
修改/etc/sysconfig/libvirtd 文件
LIBVIRTD_ARGS="--listen"
在/etc/libvirt/libvirtd.conf 文件中做如下配置
listen_tls=0
listen_tcp=1
auth_tcp="none"
修改/etc/ssh/sshd_config文件
PubkeyAuthentication yes
修改/etc/nova/nova.conf文件
[libvirt]
virt_type = qemu
重启计算节点主机
reboot
设置setenforce为0
setenforce 0
虚拟机热迁移操作
操作之前,首先测试两台计算节点之间是否可以进行virsh通信
virsh -c qemu://另一个计算节点主机名/system
使用如下命令便可以进行虚拟机热迁移
openstack server migrate --live 计算节点2 instance1
来源:CSDN
作者:星风雪宇
链接:https://blog.csdn.net/weixin_41977332/article/details/104130967