前提:需要物理机器支持Intel VT or AMD-V
1、在计算节点安装kvm等虚拟化组件
apt -y install qemu-kvm libvirt-bin virtinst bridge-utils libosinfo-bin libguestfs-tools virt-top
插曲:
在上面的包安装完成后,本地为生成一个virbr0网桥;启用了 libvirt 服务后生成的,libvirt 在服务器(host)上生成一个 virtual network switch (virbr0),host 上所有的虚拟机通过这个 virbr0 连起来。默认情况下 virbr0 使用的是NAT 模式(采用 IP Masquerade),所以这种情况下虚拟机通过 host 才能访问外部。但是在我们的环境中,虚拟机使用的是 bridge(网桥)直接连到局域网里,所以这个 virbr0 不是必须的(注:不要搞混淆了,bridge 和这里的 virbr0 网桥是互不相干的),为了使得网络清晰和查看不易混淆,此处删除virbr0网桥。(此段话借鉴别人的,是当时出现问题时查找的)
virsh net-list # 查看,存在default
virsh net-destroy default # 移除virbr0 bridge,终止dnsmasq 进程, 移除iptables rules
#virsh net-undefine default
virsh net-autostart --network default --disable # 阻止重启后网络自动启动
systemctl restart libvirtd # 记得重启服务
brctl show # 确认是否删除
virsh net-list # 确认是否删除,选一个查看的方式
2、在计算节点开启vhost-net
modprobe vhost_net
lsmod | grep vhost
echo vhost_net >> /etc/modules
3、在计算节点安装nova组件
apt -y install nova-compute nova-compute-kvm
mv /etc/nova/nova.conf /etc/nova/nova.conf.org # 备份官方的
# 配置文件
vi /etc/nova/nova.conf
# create new
[DEFAULT]
# allow resize to same host
allow_resize_to_same_host = True
# block allocate time
block_device_allocate_retries = 600
block_device_allocate_retries_interval = 6
max_concurrent_live_migrations = 10
use_neutron = True
linuxnet_interface_driver = nova.network.linux_net.LinuxBridgeInterfaceDriver # LinuxBridge桥接
firewall_driver = nova.virt.firewall.NoopFirewallDriver
vif_plugging_is_fatal = True
vif_plugging_timeout = 300
debug = True # 打开调试功能
# define own IP address
my_ip = 192.168.222.27 # API IP
state_path = /var/lib/nova
enabled_apis = osapi_compute,metadata
log_dir = /var/log/nova
# RabbitMQ connection info
transport_url = rabbit://openstack:password@192.168.222.29
[api]
auth_strategy = keystone
# Glance connection info
[glance]
api_servers = http://192.168.220.29:9292 # 这里配置存储网的IP,也可以API网
# enable VNC
[vnc]
enabled = True
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://192.168.222.29:6080/vnc_auto.html
[oslo_concurrency]
lock_path = $state_path/tmp
# Keystone auth info
[keystone_authtoken]
www_authenticate_uri = http://192.168.222.29:5000
auth_url = http://192.168.222.29:5000
memcached_servers = 192.168.222.29:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = nova
password = servicepassword
[placement]
auth_url = http://192.168.222.29:5000
os_region_name = RegionOne
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = placement
password = servicepassword
[wsgi]
api_paste_config = /etc/nova/api-paste.ini
[neutron]
auth_url = http://192.168.222.29:5000
auth_type = password
project_domain_name = default
user_domain_name = default
region_name = RegionOne
project_name = service
username = neutron
password = servicepassword
service_metadata_proxy = True
metadata_proxy_shared_secret = metadata_secret
[cinder]
os_region_name = RegionOne
[libvirt]
virt_type = kvm
# vmotion function,所有计算节点之间 创建nova无密码登录账号
live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_TUNNELLED
# 修改文件权限
chmod 640 /etc/nova/nova.conf
chgrp nova /etc/nova/nova.conf
# 重启服务
systemctl restart nova-compute # 服务已经开机自启动
插曲:
在这里实现虚拟机的迁移功能;上面配置文件的末尾也说明了,要在所有计算节点之间 创建nova无密码登录账号,并进行以下配置。
# 创建nova账号免密码登录
cat /etc/passwd|grep nova
usermod -s /bin/bash nova
cat /etc/passwd|grep nova # 确认
passwd nova # 输入admin123,作为密码
# 以上动作创建账号行为,现在各个节点上进行完成后,再继续
su - nova
ssh-keygen -t rsa -P '' -f ~/.ssh/id_dsa >/dev/null 2>&1
ssh-copy-id -i .ssh/id_dsa.pub nova@192.168.220.27 # 有几个节点就传几个节点,相互传送
ssh 192.168.220.27 # 验证所有节点,无需密码登录(这个IP是为了在存储网上迁移)
# 配置文件
vi /etc/default/libvirtd
# 修改如下
libvirtd_opts="-l"
# 配置文件
vi /etc/libvirt/libvirtd.conf
# 修改如下
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "192.168.220.28" # 写入每个计算节点存储网的IP地址
auth_tcp = "none"
host_uuid = "75f51c73-fa22-4401-906e-c42b05f966d4" # 写入每个计算节点uuid,用uuidgen生成
systemctl restart libvirtd # 服务已经开机自启动
4、在控制节点发现计算节点(这里需要验证)
# 发现计算节点,同步数据库,python的orm对象关系映射,需要初始化来生成数据库表结构
su -s /bin/bash nova -c "nova-manage cell_v2 discover_hosts"
# 查看验证
openstack compute service list