OpenStack实例管理(一)
理解Nova计算服务
Nova计算服务简介
Nova 管理虚拟机实例的整个生命周期,包括创建、启动、停止、暂停、恢复和销毁等操作。它提供了丰富的API接口和命令行工具,方便用户进行实例管理和监控。
Nova 根据用户的请求和资源的可用性,通过Nova Scheduler进行资源调度和分配。它会选择合适的物理主机来部署虚拟机实例,以实现资源的优化利用和负载均衡。
Nova需要下列OpenStack服务的支持:
Keystone:为所有的OpenStack服务提供身份管理和认证。
Glance:提供计算用的镜像库。
Neutron:负责配置管理计算实例启动时的虚拟或物理网络连接。
Placement:负责跟踪云中可用的资源库存。
Nova计算服务架构
DB:用于数据存储的SQL数据库。
API:接收 HTTP 请求、转换命令并通过 oslo.messaging 队列或 HTTP 与其他组件通信的组件。
Scheduler:决定哪个主机获取每个实例。
Compute:管理虚拟机和虚拟机的通信。
Conductor:处理需要协调(构建/调整大小)的请求,充当数据库代理,或处理对象转换。
实例创建流程
用户发起创建请求:用户通过 Nova API 或控制台发起创建实例的请求,提供所需的实例配置信息,如镜像、规格(flavor)、网络等。
Nova Scheduler 进行资源调度:Nova Scheduler 根据实例的需求和当前资源的可用性,在可用的计算节点中选择最合适的物理主机来部署实例。它考虑诸如资源利用率、负载均衡和亲和性等因素进行决策。
Nova Compute 创建实例:一旦 Nova Scheduler 选择了目标计算节点,它会将创建实例的请求发送给相应的 Nova Compute 节点。Nova Compute 负责与底层的 Hypervisor 进行通信,通过创建虚拟机实例的 API 或命令来执行实际的创建操作。
实例启动和初始化:Nova Compute 在目标计算节点上启动虚拟机实例,并进行初始化配置。这包括分配计算资源、设置网络连接、加载所需的镜像和用户数据等。
实例状态更新:Nova Compute 在实例创建过程中会定期向 Nova Conductor 汇报实例的状态更新。这包括实例的创建进度、IP 地址分配和可用性等信息,以便 Nova Conductor 进行监控和管理。
Nova服务安装
作业与实验环境
超星网址
快照管理:控制节点选择项目8,计算节点选择5.3.9/项目5-5
安装配置控制节点上的Nova服务
安装Nova软件包
使用
yum -y install在控制节点上安装四个软件包:openstack-nova-api openstack-nova-conductor openstack-nova-scheduler openstack-nova-novncproxy安装
openstack-nova-api时会创建名为“nova”的同名用户和用户组,使用以下命令检查:[root@controller ~]# cat /etc/passwd |grep nova nova:x:162:162:OpenStack Nova Daemons:/var/lib/nova:/sbin/nologin [root@controller ~]# cat /etc/group |grep nova nobody:x:99:nova nova:x:162:nova
创建Nova数据库并授权
进入数据库
[root@controller ~]# mysql -uroot -p000000 Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.3.20-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.使用
CREATE DATABASE命令新建“nova_api”,“nova_cell0”,“nova”三个数据库使用以下命令进行数据库授权
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY '000000'; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY '000000'; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY '000000'; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY '000000'; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '000000'; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '000000';
修改Nova配置文件
去掉配置文件中的空行
# 1. 备份配置文件 [root@controller ~]# cp /etc/nova/nova.conf /etc/nova/nova.bak # 2. 去掉空行 [root@controller ~]# grep -Ev '^$|#' /etc/nova/nova.bak > /etc/nova/nova.conf配置连接“nova”和“nova_api”数据库
[api_database] connection=mysql+pymysql://nova:000000@controller/nova_api [database] connection=mysql+pymysql://nova:000000@controller/novaKeystone组件交互
[api] auth_strategy = keystone [keystone_authtoken] auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = project username = nova password = 000000Placement组件交互
[placement] auth_url = http://controller:5000 auth_type = password project_domain_name = Default user_domain_name = Default project_name = project username = placement password = 000000 region_name = RegionOneGlance组件交互
[glance] api_servers = http://controller:9292配置锁路径
[oslo_concurrency] lock_path = /var/lib/nova/tmp配置消息队列和防火墙
[DEFAULT] enabled_apis = osapi_compute,metadata transport_url = rabbit://rabbitmq:000000@controller:5672 my_ip = 192.168.10.10 use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver配置VNC连接
[vnc] enabled = true server_listen = $my_ip server_proxyclient_address = $my_ip
初始化数据库
# 同步nova_api数据库 [root@controller ~]# su nova -s /bin/sh -c "nova-manage api_db sync" # 创建cell1 [root@controller ~]# su nova -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1" # 数据库映射 [root@controller ~]# su nova -s /bin/sh -c "nova-manage cell_v2 map_cell0" # 同步nova数据库 [root@controller ~]# su nova -s /bin/sh -c "nova-manage db sync"验证单元注册
[root@controller ~]# nova-manage cell_v2 list_cells +-------+--------------------------------------+----------------------------------------+-------------------------------------------------+----------+ | Name | UUID | Transport URL | Database Connection | Disabled | +-------+--------------------------------------+----------------------------------------+-------------------------------------------------+----------+ | cell0 | 00000000-0000-0000-0000-000000000000 | none:/ | mysql+pymysql://nova:****@controller/nova_cell0 | False | | cell1 | 0a7038d1-6f69-46ad-8b3f-bf8cadc831c5 | rabbit://rabbitmq:****@controller:5672 | mysql+pymysql://nova:****@controller/nova | False | +-------+--------------------------------------+----------------------------------------+-------------------------------------------------+----------+作业1:单元注册结果截图
Nova组件初始化
创建Nova用户
执行
source admin-login导入环境变量进行登录在“default”域中创建用户“nova”,密码为“000000”:
[root@controller ~]# openstack user create --domain default --password 000000 nova +---------------------+----------------------------------+ | Field | Value | +---------------------+----------------------------------+ | domain_id | default | | enabled | True | | id | 5e2fbfe049194a748f6d040686bef9f5 | | name | nova | | options | {} | | password_expires_at | None | +---------------------+----------------------------------+这里所创建的用户和
nova.conf配置文件中的[keystone_authtoken]配置的用户名密码一致分配“nova”用户在“project”项目中的“admin”角色
[root@controller ~]# openstack role add --project project --user nova admin
创建Nova服务和端点
创建名为“nova”,类型为“compute”的服务
[root@controller ~]# openstack service create --name nova compute +---------+----------------------------------+ | Field | Value | +---------+----------------------------------+ | enabled | True | | id | b6028ad5a1e545a992dcdeaff3e0f7a6 | | name | nova | | type | compute | +---------+----------------------------------+创建服务端点
# 1. 公众用户端点 [root@controller ~]# openstack endpoint create --region RegionOne nova public http://controller:8774/v2.1 # 2. 内部组件端点 [root@controller ~]# openstack endpoint create --region RegionOne nova internal http://controller:8774/v2.1 # 3. admin用户端点 [root@controller ~]# openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1
启动控制节点的Nova服务
# 1. 设置开机启动 [root@controller ~]# systemctl enable openstack-nova-api openstack-nova-conductor openstack-nova-scheduler openstack-nova-novncproxy # 2. 设置立即启动 [root@controller ~]# systemctl start openstack-nova-api openstack-nova-conductor openstack-nova-scheduler openstack-nova-novncproxy检查Nova组件的运行
[root@controller ~]# netstat -nutpl|grep 877 tcp 0 0 0.0.0.0:8774 0.0.0.0:* LISTEN 6531/python2 tcp 0 0 0.0.0.0:8775 0.0.0.0:* LISTEN 6531/python2 tcp6 0 0 :::8778 :::* LISTEN 1035/httpd [root@controller ~]# openstack compute service list +----+----------------+------------+----------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+----------------+------------+----------+---------+-------+----------------------------+ | 3 | nova-conductor | controller | internal | enabled | up | 2023-10-16T00:33:33.000000 | | 4 | nova-scheduler | controller | internal | enabled | up | 2023-10-16T00:33:26.000000 | +----+----------------+------------+----------+---------+-------+----------------------------+作业2:Nova组件运行截图
安装配置计算节点上的Nova服务
安装Nova软件包
[root@compute ~]# yum -y install openstack-nova-compute验证系统内是否有名为“nova”的用户和用户组
[root@compute ~]# cat /etc/passwd |grep nova nova:x:162:162:OpenStack Nova Daemons:/var/lib/nova:/sbin/nologin [root@compute ~]# cat /etc/group |grep nova nobody:x:99:nova qemu:x:107:nova libvirt:x:991:nova nova:x:162:nova修改Nova配置文件
/etc/nova/nova.conf去掉配置文件中的空行
# 1. 备份配置文件 [root@compute ~]# cp /etc/nova/nova.conf /etc/nova/nova.bak # 2. 去掉空行 [root@compute ~]# grep -Ev '^$|#' /etc/nova/nova.bak > /etc/nova/nova.confKeystone组件交互
[api] auth_strategy = keystone [keystone_authtoken] auth_url = http://controller:5000 memcached_servers = controller:11211 auth_type = password project_domain_name = Default user_domain_name = Default project_name = project username = nova password = 000000Placement组件交互
[placement] auth_url = http://controller:5000 auth_type = password project_domain_name = Default user_domain_name = Default project_name = project username = placement password = 000000 region_name = RegionOneGlance组件交互
[glance] api_servers = http://controller:9292配置锁路径
[oslo_concurrency] lock_path = /var/lib/nova/tmp配置消息队列和防火墙
[DEFAULT] enabled_apis = osapi_compute,metadata transport_url = rabbit://rabbitmq:000000@controller:5672 my_ip = 192.168.10.20 use_neutron = true firewall_driver = nova.virt.firewall.NoopFirewallDriver配置VNC连接
[vnc] enabled = true server_listen = 0.0.0.0 server_proxyclient_address = $my_ip novncproxy_base_url = http://192.168.10.10:6080/vnc_auto.html配置
[libvirt]部分,设置虚拟化类型qemu[libvirt] virt_type = qemu启动计算节点的Nova服务
[root@compute ~]# systemctl enable libvirtd openstack-nova-compute Created symlink from /etc/systemd/system/multi-user.target.wants/openstack-nova-compute.service to /usr/lib/systemd/system/openstack-nova-compute.service. [root@compute ~]# systemctl start libvirtd openstack-nova-compute
发现计算节点并检验
下面的命令在控制节点执行
执行
source admin-login导入环境变量登录发现新的计算节点
[root@controller ~]# su nova -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose"设置
/etc/nova/nova.conf配置自动发现计算节点[scheduler] discover_hosts_in_cells_internal = 60# 重启nova-api服务使配置生效 [root@controller ~]# systemctl restart openstack-nova-api验证nova模块的状态
# 查看模块的运行状态 [root@controller ~]# openstack compute service list +----+----------------+------------+----------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+----------------+------------+----------+---------+-------+----------------------------+ | 3 | nova-conductor | controller | internal | enabled | up | 2023-10-16T01:22:53.000000 | | 4 | nova-scheduler | controller | internal | enabled | up | 2023-10-16T01:22:57.000000 | | 5 | nova-compute | compute | nova | enabled | up | 2023-10-16T01:22:57.000000 | +----+----------------+------------+----------+---------+-------+----------------------------+# 使用状态检测工具验证,应该显示4个success [root@controller ~]# nova-status upgrade check +--------------------------------+ | Upgrade Check Results | +--------------------------------+ | Check: Cells v2 | | Result: Success | | Details: None | +--------------------------------+ | Check: Placement API | | Result: Success | | Details: None | +--------------------------------+ | Check: Ironic Flavor Migration | | Result: Success | | Details: None | +--------------------------------+ | Check: Cinder API | | Result: Success | | Details: None | +--------------------------------+作业3:Nova模块检测结果截图
Nova实例管理
实验环境
快照管理:控制节点和计算节点都是项目12
实例创建前提
执行以下命令查看所需的前提条件:
source admin-login # 命令行环境登录
openstack flavor list # 列出可用的实例类型
openstack image list # 列出可用的镜像
openstack network list # 列出可用的网络
openstack keypair list # 列出可用的密钥对
然后执行实例创建命令openstack server create,具体格式如下:
openstack server create --flavor <flavor> --image <image> --key-name <key_pair> --network <network> [--security-group <security_group>] [--user-data <user_data>] <instance_name>
命令中的参数说明如下:
--flavor <flavor>:指定虚拟机实例的规格(flavor),例如 m1.small。
--image <image>:指定虚拟机实例的镜像,可以是映像名称、ID或URL。
--key-name <key_pair>:指定用于 SSH 访问虚拟机实例的密钥对的名称。
--network <network>:指定虚拟机实例连接到的网络,可以是网络名称或ID。
--security-group <security_group>(可选):指定用于虚拟机实例的安全组,可以是安全组名称或ID。
--user-data <user_data>(可选):指定启动虚拟机实例时要传递给实例的自定义用户数据(通常是启动脚本)。
<instance_name>:指定要创建的虚拟机实例的名称。
命令行实例管理常用命令:
# 列出虚拟机实例
openstack server list
# 查看实例的详细信息
openstack server show <instance_id_or_name>
# 启动虚拟机实例
openstack server start <instance_id_or_name>
# 停止虚拟机实例
openstack server stop <instance_id_or_name>
# 重启虚拟机实例
openstack server reboot <instance_id_or_name>
# 调整虚拟机实例的实例类型
openstack server resize <instance_id_or_name> --flavor <new_flavor>
# 删除虚拟机实例
openstack server delete <instance_id_or_name>
# 迁移虚拟机实例到其他计算节点
openstack server migrate <instance_id_or_name>
虚拟机实例创建流程
创建密钥对
[root@controller ~]# openstack keypair create test-key -----BEGIN RSA PRIVATE KEY----- MIIEpgIBAAKCAQEA4ezhYShGObIS2GsCMyepBz+beVnJbs5ngIkNor2okw2pNcwW kFVf4XUYgAPk8UgzJWVjlbFzPYfYzmrGO/4DthjpnV9udkahIIn+IsfPajvbWn/n aOjrncva99YvqpsLOaasaO5fS0k+YLQaWeVzhLW43pndT+e3BRa120msvItqIuK5 Fs4eCtjtAYeYBOlN/AReymXf6m2Et3TIk8tATk4De0q3u7p2TIfGYdbh22HiOWI4 2J1Q9y2sC2Jj/idV9+407iLbMN/CfdVDu6Wm2Z0Ec3z5a3nGqHsRHJwK2eAS8eQD 2AUksTMCBGBQDdgFTXnvXha8pjGz981kAjlYhQIDAQABAoIBAQDU56Z9KLcFKAsa Z71q97USX57kfPiWs2xWdNGky5ZQ/k63o9yfp9TzYqXz/beCqceJNkLijpdLJPnr jDPD1V0p/dApvgUa8PRm9aPIowOT2VSdtGsfMmDYE4QGipHg9LtfWPKg8AJdsGhY OWGb1d9G8PmGzPkClBqlcQFv5b4i7nlkgNlqKMAxTTpYuw8VQ1bcekae1AMX4LJh hObxjF2jrAwzKnX7oZtWpkKMNohbPoe4FnvPIbmwEWl6P9ewBqCUukGEYIu8C3u0 42nkCEzdjjsD4PQ7sQRABeFM045RVUVbWjWo+JhvnIrJYmpi1vMaqiaKnD+DF2nb DKvTLNABAoGBAPc/lscQCW95kHvhhxVB3kwwTeUUz5fvMX6kyGfZp0C1oFc1Zp40 tHSdroZW7t0USJNAdPQXeBGmd3feM/8VsR09VOuaJCTTl0vvIq41JtU7jY6lk4a7 dkeomB8Dn8yswccvZ22id7CAsd378VKf3KklZQJiTRNaQwxHTsBVUBjRAoGBAOns Ey7dHAzmpiv+Ws7UvaBN5Yz4l/9gbMsrpXICnbOGmVAW+WrP4Qloip8SGQLY2Csy oj47UcdVLPISe0ChgUtzZCMh+u58fY3mpKlkEMnEahX2HommCzCJhwTa9G/lm/Js I2Fnf+siwVzpeR8ZWbXh7NzZBhq1a67oglMpfjF1AoGBAL2shprHbrWZ6IFgjiR8 l3CTTe6DfI3t7WZeO2+PxYMa0pqUWNjdTeJ4ZL6iSjRHrzVnqVDoADBqKBRI3lK9 7VWlC1SCt1+ZAuQ5270RAW1rdjkMRJSDk0V9zNVeDmUR0sZfU1UD4hYBZHILKSJd iQYprceaac6C3BS7T2q1B/FBAoGBALY8I/Wua9vhFDPRxAy9z7zC8sIQKNna1Oay 6gEX6KOjiGzMeSKtMDOULeoevz1okX+Vwq+Ypu0TfiBYJY0ERSXyj2CPaF3Cvk1+ EWmley60xbC2PLQflzgI7BbsPOGvjv4dILMRXqZgPSOU/7cqmKkJiO3EZO0JyQpK OL1w5c7BAoGBALZI9+hh82MuOLLl9cd7EhgiNPos+HI4TZJLAlypd55v9cOIkjr+ olyRV9KLnHZiV086FRihPWbGxXMVg167efPciztS7Qlc+likocWztyIVll++A71M 547dAnIA4iw30MFMzQxs917RbRv++dJkuyvBLULGzMFOjCb48CzvR9q+ -----END RSA PRIVATE KEY------ 其他密钥管理命令
# 列出密钥 openstack keypair list # 查看密钥详细信息 openstack keypair show <密钥对名称>创建实例类型
[root@controller ~]# openstack flavor create --public test_flavor --id auto --ram 256 --disk 5 --vcpus 1 +----------------------------+--------------------------------------+ | Field | Value | +----------------------------+--------------------------------------+ | OS-FLV-DISABLED:disabled | False | | OS-FLV-EXT-DATA:ephemeral | 0 | | disk | 0 | | id | 205ecf42-35b2-4f79-b928-c56c063cdbc2 | | name | test_flavor | | os-flavor-access:is_public | True | | properties | | | ram | 256 | | rxtx_factor | 1.0 | | swap | | | vcpus | 1 | +----------------------------+--------------------------------------+- 其他实例类型管理命令
openstack flavor list openstack flavor show <实例类型ID> openstack flavor delete <实例类型ID>创建网络
[root@controller ~]# openstack network create --share --external --provider-network-type flat --provider-physical-network provider --project admin test_net[root@controller ~]# openstack subnet create --network test_net --subnet-range 192.168.20.0/24 --gateway 192.168.20.2 --allocation-pool start=192.168.20.128,end=192.168.20.140 --dns-nameserver 114.114.114.114 test_subnet创建实例
[root@controller ~]# openstack server create --flavor test_flavor --network test_net --key-name test-key --image cirros cirros-VM1计算节点免密登录- 在
控制节点使用实例管理命令获取实例的ip地址
[root@controller ~]# openstack server show cirros-VM1- 将之前的私钥复制并粘贴到
计算节点的/root/.ssh/demo-key.pem,使用ssh命令免密登录
[root@compute ~]# chmod 600 ~/.ssh/demo-key.pem [root@compute ~]# ssh -i ~/.ssh/demo-key.pem cirros@192.168.20.130作业4:计算节点免密登录实例截图
- 在