前提:需要物理机器支持Intel VT or AMD-V

1、在计算节点安装kvm等虚拟化组件

  1. 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网桥。(此段话借鉴别人的,是当时出现问题时查找的)
  1. virsh net-list # 查看,存在default
  2. virsh net-destroy default # 移除virbr0 bridge,终止dnsmasq 进程, 移除iptables rules
  3. #virsh net-undefine default
  4. virsh net-autostart --network default --disable # 阻止重启后网络自动启动
  5. systemctl restart libvirtd # 记得重启服务
  6. brctl show # 确认是否删除
  7. virsh net-list # 确认是否删除,选一个查看的方式

2、在计算节点开启vhost-net

  1. modprobe vhost_net
  2. lsmod | grep vhost

  1. echo vhost_net >> /etc/modules

3、在计算节点安装nova组件

  1. apt -y install nova-compute nova-compute-kvm
  2. mv /etc/nova/nova.conf /etc/nova/nova.conf.org # 备份官方的
  3. # 配置文件
  4. vi /etc/nova/nova.conf
  5. # create new
  6. [DEFAULT]
  7. # allow resize to same host
  8. allow_resize_to_same_host = True
  9. # block allocate time
  10. block_device_allocate_retries = 600
  11. block_device_allocate_retries_interval = 6
  12. max_concurrent_live_migrations = 10
  13. use_neutron = True
  14. linuxnet_interface_driver = nova.network.linux_net.LinuxBridgeInterfaceDriver # LinuxBridge桥接
  15. firewall_driver = nova.virt.firewall.NoopFirewallDriver
  16. vif_plugging_is_fatal = True
  17. vif_plugging_timeout = 300
  18. debug = True # 打开调试功能
  19. # define own IP address
  20. my_ip = 192.168.222.27 # API IP
  21. state_path = /var/lib/nova
  22. enabled_apis = osapi_compute,metadata
  23. log_dir = /var/log/nova
  24. # RabbitMQ connection info
  25. transport_url = rabbit://openstack:password@192.168.222.29
  26. [api]
  27. auth_strategy = keystone
  28. # Glance connection info
  29. [glance]
  30. api_servers = http://192.168.220.29:9292 # 这里配置存储网的IP,也可以API网
  31. # enable VNC
  32. [vnc]
  33. enabled = True
  34. server_listen = 0.0.0.0
  35. server_proxyclient_address = $my_ip
  36. novncproxy_base_url = http://192.168.222.29:6080/vnc_auto.html
  37. [oslo_concurrency]
  38. lock_path = $state_path/tmp
  39. # Keystone auth info
  40. [keystone_authtoken]
  41. www_authenticate_uri = http://192.168.222.29:5000
  42. auth_url = http://192.168.222.29:5000
  43. memcached_servers = 192.168.222.29:11211
  44. auth_type = password
  45. project_domain_name = default
  46. user_domain_name = default
  47. project_name = service
  48. username = nova
  49. password = servicepassword
  50. [placement]
  51. auth_url = http://192.168.222.29:5000
  52. os_region_name = RegionOne
  53. auth_type = password
  54. project_domain_name = default
  55. user_domain_name = default
  56. project_name = service
  57. username = placement
  58. password = servicepassword
  59. [wsgi]
  60. api_paste_config = /etc/nova/api-paste.ini
  61. [neutron]
  62. auth_url = http://192.168.222.29:5000
  63. auth_type = password
  64. project_domain_name = default
  65. user_domain_name = default
  66. region_name = RegionOne
  67. project_name = service
  68. username = neutron
  69. password = servicepassword
  70. service_metadata_proxy = True
  71. metadata_proxy_shared_secret = metadata_secret
  72. [cinder]
  73. os_region_name = RegionOne
  74. [libvirt]
  75. virt_type = kvm
  76. # vmotion function,所有计算节点之间 创建nova无密码登录账号
  77. live_migration_flag=VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE,VIR_MIGRATE_TUNNELLED
  78. # 修改文件权限
  79. chmod 640 /etc/nova/nova.conf
  80. chgrp nova /etc/nova/nova.conf
  81. # 重启服务
  82. systemctl restart nova-compute # 服务已经开机自启动
插曲:
在这里实现虚拟机的迁移功能;上面配置文件的末尾也说明了,要在所有计算节点之间 创建nova无密码登录账号,并进行以下配置。
  1. # 创建nova账号免密码登录
  2. cat /etc/passwd|grep nova
  3. usermod -s /bin/bash nova
  4. cat /etc/passwd|grep nova # 确认
  5. passwd nova # 输入admin123,作为密码
  6. # 以上动作创建账号行为,现在各个节点上进行完成后,再继续
  7. su - nova
  8. ssh-keygen -t rsa -P \'\' -f ~/.ssh/id_dsa >/dev/null 2>&1
  9. ssh-copy-id -i .ssh/id_dsa.pub nova@192.168.220.27 # 有几个节点就传几个节点,相互传送
  10. ssh 192.168.220.27 # 验证所有节点,无需密码登录(这个IP是为了在存储网上迁移)
  11. # 配置文件
  12. vi /etc/default/libvirtd
  13. # 修改如下
  14. libvirtd_opts="-l"
  15. # 配置文件
  16. vi /etc/libvirt/libvirtd.conf
  17. # 修改如下
  18. listen_tls = 0
  19. listen_tcp = 1
  20. tcp_port = "16509"
  21. listen_addr = "192.168.220.28" # 写入每个计算节点存储网的IP地址
  22. auth_tcp = "none"
  23. host_uuid = "75f51c73-fa22-4401-906e-c42b05f966d4" # 写入每个计算节点uuid,用uuidgen生成
  24. systemctl restart libvirtd # 服务已经开机自启动

4、在控制节点发现计算节点(这里需要验证)

  1. # 发现计算节点,同步数据库,python的orm对象关系映射,需要初始化来生成数据库表结构
  2. su -s /bin/bash nova -c "nova-manage cell_v2 discover_hosts"
  3. # 查看验证
  4. openstack compute service list

 

版权声明:本文为shihongkuan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/shihongkuan/p/11399245.html