OpenStack虚拟机管理实例

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 

目录

一、OpenStack计算服务

1、什么是Nova

2、Nova所用的虚拟技术

3、Nova的系统架构

4、虚拟机实例化流程

一、示例

1、验证Nova服务

2、试用计算服务的API

二、创建和管理虚拟机实例

1、nova-api服务

2、nova-scheduler服务

3、nova-compute服务

4、nova-conductor服务

5、Nova计算服务与Placement放置服务

6、镜像和实例的关系

7、命令行的实例创建用法

二、示例:

1、生成密钥对

2、添加安全组规则

3、管理实例类型

4、创建实例

5、创建实例排错

6、管理虚拟机实例

7、访问虚拟机实例列表

三、注入元数据实现虚拟机实例个性化配置

1、元数据注入

2、元数据服务机制

3、配置驱动器机制

4、进一步了解cloud-init

三、示例

1、向虚拟机实例注入用户数据

2、设置虚拟机实例的元数据:

3、验证元数据服务机制

4、验证配置驱动器机制

四、增加一个计算节点

1、计算服务的物理部署

2、增加一个计算节点并进行验证

五、迁移虚拟机实例

1、实例冷迁移

2、实例热迁移

3、热迁移命令行用法

4、示例


一、OpenStack计算服务

1、什么是Nova

  • Nova是OpenStack中的计算服务项目计算虚拟机实例生命周期的所有活动都由Nova管理。
  • Nova提供统一的计算资源服务
  • Nova需要下列OpenStack服务的支持。
    • Keystone:为所有的OpenStack服务提供身份管理和认证
    • Glance:提供计算用的镜像库
    • Neutron:负责配置管理计算实例启动时的虚拟或物理网络连接。
    • Placement:负责跟踪云中可用的资源库存。

2、Nova所用的虚拟技术

  • KVM——通用的开放虚拟化技术。
  • Xen——部署最快速、最安全、开源的虚拟化软件技术。
  • Linux容器——在单一Linux主机上提供多个隔离的Linux环境的操作系统级虚拟化技术。
  • Hyper-vare——Microsoft公司推出的企业级虚拟化解决方案。
  • VMware ESXi——VMware用于创建和运行虚拟机和虚拟设备的产品。
  • Baremetal与Ironic——传统的物理机服务。

3、Nova的系统架构

组件说明如下:

  • DB:用于数据存储的SQL数据库
  • API:用于接收HTTP请求和转换命令,并通过oslo.messaging队列或HTTP与其他组件通信
  • Scheduler:用于决定哪台主机承载计算实例的Nova调度器
  • Compute:管理Hypervisor与虚拟机实例之间通信的Nova计算组件
  • Conductor:中心管理器,用于处理需要协调的请求,作为数据库代理,或者处理对象转换
  • Placement:跟踪资源提供者库存和使用的放置服务

4、虚拟机实例化流程

  1. 用户执行Nova客户端提供的用于创建虚拟机实例的命令
  2. API组件将请求转换为AMQP消息之后加入消息队列,通过消息队列调用Conductor组件
  3. Conductor组件从消息队列中接收到虚拟机实例化请求消息后,进行一些准备工作
  4. Conductor组件通过消息队列通知Scheduler组件选择一个合适的计算节点创建虚拟机实例
  5. Conductor组件从Scheduler组件处得到合适的计算节点信息后,通过消息队列通知Compute组件实现虚拟机实例的创建

一、示例

1、验证Nova服务

在ROD一体化OpenStack云平台上查看:

 [root@node-a ~]# systemctl status *nova*.service
 ● openstack-nova-conductor.service - OpenStack Nova Conductor Server
    Loaded: loaded (/usr/lib/systemd/system/openstack-nova-conductor.service; enabled; vendor preset: disabled)
    Active: active (running) since Tue 2024-04-09 14:26:57 CST; 2 weeks 6 ...
 ● openstack-nova-compute.service - OpenStack Nova Compute Server
    Loaded: loaded (/usr/lib/systemd/system/openstack-nova-compute.service; enabled; vendor preset: disabled)
    Active: active (running) since Tue 2024-04-09 14:28:31 CST; 2 weeks 6 ...
 ● openstack-nova-scheduler.service - OpenStack Nova Scheduler Server
    Loaded: loaded (/usr/lib/systemd/system/openstack-nova-scheduler.service; enabled; vendor preset: disabled)
    Active: active (running) since Tue 2024-04-09 14:27:03 CST; 2 weeks 6 ...
 ● openstack-nova-novncproxy.service - OpenStack Nova NoVNC Proxy Server
    Loaded: loaded (/usr/lib/systemd/system/openstack-nova-novncproxy.service; enabled; vendor preset: disabled)
    Active: active (running) since Tue 2024-04-09 14:21:30 CST; 2 weeks 6 ...

共有四个子服务:

  • openstack-nova-scheduler.service计算调度子服务
  • openstack-nova-compute.service计算子服务
  • openstack-nova-conductor.service处理需要请求的子服务
  • openstack-nova-novncproxy.service子服务为通过VNC连接访问正在运行的虚拟机提供一个代理

2、试用计算服务的API

列出所有可用的主版本列表

 [root@node-a ~]# curl -s -Hcurl -s -H "X-Auth-Token: $OS_TOKEN"   http://localhost:8774/ | python -mjson.tool
 {
     "versions": [
         {
             "id": "v2.0",
             "links": [
                 {
                     "href": "http://localhost:8774/v2/",
                     "rel": "self"
                 }
             ],
             "min_version": "",
             "status": "SUPPORTED",
             "updated": "2011-01-21T11:33:21Z",
             "version": ""
         },
         {
             "id": "v2.1",
             "links": [
                 {
                     "href": "http://localhost:8774/v2.1/",
                     "rel": "self"
                 }
             ],
             "min_version": "2.1",
             "status": "CURRENT",
             "updated": "2013-07-23T11:33:21Z",
             "version": "2.79"
         }
     ]
 }

发现有两个可用的API版本v2.0和v2.1。

 # 请求一个demo项目作用域的令牌
 [root@node-a ~]# curl -i   -H "Content-Type: application/json"   -d '
 { "auth": {
     "identity": {          
       "methods": ["password"],
       "password": {      
         "user": {
           "name": "demo",
           "domain": { "id": "default" },
           "password": "760ada28891648eb"
         }
       }
     },
     "scope": {                     
       "project": {                  
         "name": "demo",
         "domain": { "id": "default" }
       }
     }
   }
 }'   "http://localhost:5000/v3/auth/tokens" ;
 ​
 # 返回结果提供了令牌ID,还有可访问的端点列表,有关计算服务的端点信息如下:
 {"endpoints": [{"region_id": "RegionOne", "url": "http://10.0.0.2:9292", "region": "RegionOne", "interface": "public", "id": "53d6f1fbb2be4ab4bb353d9e24b4c05a"},
 ... 
 "type": "compute", "id": "9bc78cabb0a2421e83500e23d31f9c4f", "name": "nova"}

执行命令导出环境变量OS_TOKEN:

 [root@node-a ~]# export OS_TOKEN="gAAAAA...."

尝试通过Nova API v2.1获取当前实例列表

 [root@node-a ~]# curl -s -H "X-Auth-Token: $OS_TOKEN"   http://localhost:8774/v2.1/servers | python -mjson.tool
 {
     "servers": []
 }

本机暂无实例。将URL路径中的v2.1替换为v2,也会得到同样的结果。

二、创建和管理虚拟机实例

1、nova-api服务

  • nova-api服务接收和响应来自最终用户的计算API请求
  • 最终用户不会直接发送RESTful API请求,而是通过OpenStack命令行、仪表板和其他需要跟Nova交换的组件使用API。
  • nova-api是外部访问并使用Nova提供的各种服务的唯一途径,也是客户端和Nova之间中间层

2、nova-scheduler服务

  • 解决选择启动虚拟机实例的计算节点的问题

  • 按照实例类型去选择合适的计算节点

2.1、Nova调度器类型

  • 随机调度器:从所有nova-compute服务正常运行的节点中随机选择
  • 过滤器调度器:根据指定的过滤条件以及权重算法选择最佳的计算节点,又称筛选器
  • 缓存调度器:随机调度器的一种特殊类型,在其基础上将主机资源信息缓存在本地内存中,然后通过后台的定时任务从数据库中获取最新的主机资源信息

调度器需要在/etc/nova/nova.conf配置文件中通过scheduler_driver选项指定,默认使用过滤器器调度器

 scheduler_driver=nova.scheduler.filter_scheduler.FilterScheduler

2.2、过滤器调度器的调度过程

  • 第一阶段通过指定的过滤器选择满足条件的计算机节点(运行nova-compute服务的主机)
  • 第二阶段对过滤之后的主机类别进行权重计算并排序,选择最优的计算节点来创建虚拟机实例

2.3、过滤器

/etc/nova/nova.conf配置文件中的scheduler_available_filters选项用于配置可用的过滤器,默认所欲的Nova内置的过滤器都可用于执行过滤操作

 sheduler_available_filters=nova.scheduler.filters.all_filters

另外scheduler_default_filters选项用于执行nova-scheduler服务要使用的过滤器,其默认值:

 scheduler_default_filters=RetryFilter, AvailablilityZoneFilter, RamFilter ,DiskFilter, ComputerFilter, ComputerCapabilitiesFilter, ImagePropetiesFilter, ServerGroupAntiAffinityFilter

Nova内置的过滤器:

过滤器说明
RetryFilter(再审过滤器)用于过滤掉之前已经调度过的节点
AvailabilityZoneFilter(可用区域过滤器)用于将不属于指定可用区域的计算节点过滤掉。为提高容灾性和提供隔离服务,可以将计算节点划分到不同的可用区域中
RamFilter(内存过滤器)根据可用内存来调度,将不能满足实例类型内存需求的计算节点过滤掉
DiskFilter(磁盘过滤器)根据可用磁盘空间来调度,将不能满足实例类型磁盘需求的计算节点过滤掉
CoreFilter(核心过滤器)根据可用CPU核心来调度,将不能满足实例类型vCPU需求的计算节点过滤掉
ComputeFilter(计算过滤器)只有nova-compute服务正常工作的计算节点才能够被nova-scheduler服务调度,这是必选的过滤器
ComputeCapabilitiesFilter(计算能力过滤器)根据计算节点的特性来过滤
ImagePropertiesFilter(镜像属性过滤器)根据所选镜像的属性来过滤
ServerGroupAntiAffinityFilter(服务器组反亲和性过滤器)要求尽量将虚拟机实例分散部署到不同的计算节点上
ServerGroupAffinityFilter(服务器组亲和性过滤器)要求尽量将虚拟机实例部署到同一个计算节点上

2.4、权重计算

所有的权重实现模块位于nova/scheduler/weights目录下。目前nova-scheduler的默认权重实现模块是RAMWeighter,根据计算节点空闲的内存量来计算权重值

3、nova-compute服务

  • 在计算节点上运行,负责管理节点上的虚拟机实例
  • 创建虚拟机实例最终需要与Hypervisor打交道。Hypervisor以驱动形式在OpenStack系统中实现即插即用。
  • nova-compute与Hypervisor一起实现OpenStack对虚拟机实例生命周期的管理

nova-compute的功能

  • 定期向OpenStack报告计算节点的状态
  • 实现对虚拟机实例生命周期的管理

nova-compute的处理过程

  • 为实例准备资源
  • 创建实例的镜像文件
  • 创建实例的XML定义文件
  • 创建虚拟网络并启动虚拟机实例

4、nova-conductor服务

  • 数据库进行操作
  • 作为nova-compute服务与数据库之间交互的中介,避免了直接访问由nova-compute服务创建的云数据库
  • 将nova-compute与数据库分离之后提高了Nova的可伸缩性
  • 方便升级

5、Nova计算服务与Placement放置服务

  • 从Stein版本开始将Placement API作为一个独立的项目,提供的是放置服务,用于满足计算服务和其他任何服务的资源选择和使用的管理需求
  • nova-compute中的Nova资源跟踪器负责创建对应于运行资源跟踪器的计算主机资源提供者记录
  • nova-scheduler负责为工作负载选择合适的目标主机

6、镜像和实例的关系

  • 实例是在云中的计算节点上运行的虚拟机个体
  • 虚拟机镜像为虚拟机文件系统提供模板
  • 对实例所做的任何改变都不会影响基础镜像
  • 计算服务控制实例、镜像的存储和管理
  • 未运行虚拟机实例的基础镜像状态
  • 基于一个镜像创建的实例

  • 删除实例后镜像和卷的状态

7、命令行的实例创建用法

在使用命令行之前需要导出用户的环境变量,在创建实例之前,查看所需的前提条件:

 openstack flavor list           #列出可用的实例类型
 openstack image list          #列出可用的镜像
 openstack network list        #列出可用的网络
 openstack security group list  #列出可用的安全组
 openstack keypair list         #列出可用的密钥对

创建实例命令openstack server create的详细语法:

 openstack server create
     (--image <镜像> | --volume <卷>)
     --flavor <实例类型>
     [--security-group <安全组>]
     [--key-name <密钥对>]
     [--property <服务器属性>]
     [--file <目的文件名=源文件名>]
     [--user-data <实例注入文件信息>]
     [--availability-zone <域名>]
     [--block-device-mapping <块设备映射>]
     [--nic <net-id=网络ID,v4-fixed-ip=IP地址,v6-fixed-ip=IPv6地址,port-id=端口UUID,auto,none>]
     [--network <网络>]
     [--port <端口>]
     [--hint <键=值>]
     [--config-drive <配置驱动器卷>|True]
     [--min <创建实例最小数量>]
     [--max <创建实例最大数量>]
     [--wait]
     <实例名>

命令行的实例管理用法:

 # 获取列表
 openstack server list   
 # 查看实例详情
 openstack server show [--diagnostics] <实例名或ID >
 # 启动实例
 openstack server start <实例名或ID> [<实例名或ID > ...]
 # 暂停实例及恢复
 openstack server [pause  | unpause] <实例名或ID> [<实例名或ID > ...]
 # 挂起实例及恢复
 openstack server [suspend | resume] <实例名或ID> [<实例名或ID > ...]
 # 废弃实例及恢复
 openstack server [shelve  | unshelve]<实例名或ID> [<实例名或ID > ...]
 # 关闭实例
 openstack server stop  <实例名或ID> [<实例名或ID > ...]
 # 重启实例
 openstack server reboot [--hard | --soft] [--wait] <实例名或ID>
 # 调整实例大小
 openstack server resize   [--flavor <flavor> | --confirm | --revert]  [--wait]  <实例名或ID>
 # 删除实例
 openstack server delete <实例名或ID> [<实例名或ID > ...]
 # 修改实例
 openstack server set  [--name <新名称>]  [--root-password]  [--property <键=值>]
     [--state <状态>]  <实例名或ID>

二、示例:

1、生成密钥对

 # 加载demo用户环境脚本
 [root@node-a ~]# source keystonerc_demo 
 ​
 # 创建一个名为“demo-pub”的公钥
 [root@node-a ~(keystone_demo)]# openstack keypair create --public-key ~/.ssh/id_rsa.pub demo-pub
 +-------------+-------------------------------------------------+
 | Field       | Value                                           |
 +-------------+-------------------------------------------------+
 | fingerprint | 91:17:86:06:70:0c:8d:f0:4a:d5:9a:61:75:1a:f5:3d |
 | name        | demo-pub                                        |
 | user_id     | 0335a26accd149c595e1215fa8d199cf                |
 +-------------+-------------------------------------------------+

使用openstack keypair list查看当前密钥对列表,列表显示每个密钥对的名称和对应的指纹

 [root@node-a ~(keystone_demo)]# openstack keypair list
 +----------+-------------------------------------------------+
 | Name     | Fingerprint                                     |
 +----------+-------------------------------------------------+
 | demo-key | 74:65:07:cf:20:45:32:f4:53:51:89:74:c3:43:72:92 |
 | demo-pub | 91:17:86:06:70:0c:8d:f0:4a:d5:9a:61:75:1a:f5:3d |
 +----------+-------------------------------------------------+

使用openstack keypair show命令查看指定密钥对的详细信息:

 [root@node-a ~(keystone_demo)]# openstack keypair show demo-key
 +-------------+-------------------------------------------------+
 | Field       | Value                                           |
 +-------------+-------------------------------------------------+
 | created_at  | 2024-04-23T00:44:39.000000                      |
 | deleted     | False                                           |
 | deleted_at  | None                                            |
 | fingerprint | 74:65:07:cf:20:45:32:f4:53:51:89:74:c3:43:72:92 |
 | id          | 2                                               |
 | name        | demo-key                                        |
 | updated_at  | None                                            |
 | user_id     | 0335a26accd149c595e1215fa8d199cf                |
 +-------------+-------------------------------------------------+

该命令加上--public-key选项则仅显示指定密钥对的公钥

 [root@node-a ~(keystone_demo)]# openstack keypair show --public-key demo-key
 ssh-rsa AAAAB3N...

使用openstack keypair delete命令可删除指定密钥对

2、添加安全组规则

添加允许ICMP(ping)和安全shell(SSH)规则:

 openstack security group rule create --proto icmp default
 openstack security group rule create --proto tcp --dst-port 22 default

3、管理实例类型

(1)通过Web界面管理实例类型

略...

(2)通过命令行管理实例类型

 # 显示实例类型列表
 openstack flavor list
 # 查看实例类型详细的语法格式
 openstack flavor list 实例类型ID
 # 创建实例的简单方法
 openstack flavor create 实例类型名称 --id 实例类型ID --ram 内存 --disk 根磁盘 --vcpus VCPU数
 # 可使用--public选项觉得实例类型是所有用户可访问,默认为True
 openstack flavor create --public m1.extra_tiny --id auto --ram 256 --disk 0 --vcpus 1 --rxtx-factor 1

对于现有本地实例类型,使用openstack flavor set命令来修改其参数设置

删除实例类型命令:

 openstack flavor delete 实例类型ID

4、创建实例

  • 基于cirros镜像创建一个实例(实例类型为"m1.tiny"、密钥对为"demo-key"、名为“cirros-VM2")

 [root@node-a ~(keystone_demo)]# openstack server create --image cirros --flavor m1.test  --key-name demo-key cirros-VM2
  • 创建一个基于cirros镜像的大小为1GB的卷

 [root@node-a ~(keystone_demo)]# openstack volume create --image cirros  --size 1 --availability-zone nova mybootvol
  • 基于该卷创建实例

 [root@node-a ~(keystone_demo)]# openstack server create --flavor m1.tiny  --volume mybootvol  --key-name demo-key cirros-VM3
 

5、创建实例排错

  • 查看创建实例所有相关的日志

 grep 'ERROR' /var/log/nova/*
 grep 'ERROR' /var/log/neutron/*
 grep 'ERROR' /var/log/glance/*
 grep 'ERROR' /var/log/cinder/*
 grep 'ERROR' /var/log/keystone/*

典型错误:

(1)"No valid host was found. There are not enough hosts available."

  • 计算节点的内存不足,CPU资源不够,硬盘空间资源不足。
  • 网络配置不正确,造成创建实例时获取IP失败。可能使网络不通或防火墙引起的。
  • openstack-nova-compute服务状态问题。

执行以下命令查看指定计算节点的资源使用情况

 [root@node-a ~(keystone_demo)]# openstack htpervisor show node-a

(2)“Volume xxx did not finish being created even after we waited x seconds or 61 attempts. And its status is downloading.

  • 创建卷需要的时间比较久,在卷创建成功之前,Nova组件等待超时了。/etc/nova/nova.conf配置文件中有一个控制设备重试的选项block_device_allocate_retires,通过修改此项的值来延长等待时间。

6、管理虚拟机实例

7、访问虚拟机实例列表

 # 通常先将证书私钥文件(.SSH)存放到用户主目录下的.ssh子目录中:
 [root@node-a Downloads(keystone_demo)]# rz
 ​
 [root@node-a Downloads(keystone_demo)]# ls
 demo-key.pem
 [root@node-a Downloads(keystone_demo)]# cd ..
 ​
 # 修改该密钥文件的访问权限
 [root@node-a ~(keystone_demo)]# cp Downloads/demo-key.pem ~/.ssh
 [root@node-a ~(keystone_demo)]# chmod 700 ~/.ssh/demo-key.pem 
 [root@node-a ~(keystone_demo)]# ssh -i ~/.ssh/demo-key.pem cirros@10.0.0.2

另一种方式是获取正在运行的虚拟机实例的VNC会话URL并从Web浏览器直接访问它:

三、注入元数据实现虚拟机实例个性化配置

1、元数据注入

通过向虚拟机实例注入元数据信息完成个性化配置工作

元数据信息分成两大类:

  • 元数据——结构化数据,以键值对形式注入虚拟机实例
  • 用户数据——非结构化数据,通过文件脚本的方式进行注入,支持多种文件格式

注入机制分为两种:

  • 元数据服务机制
  • 配置驱动器机制

SSH密钥注入的实现过程

  1. OpenStack创建一个SSH密钥对
  2. 创建虚拟机实例时选择该SSH密钥对
  3. 用户可以用该SSH密钥对的私钥直接登录实例

2、元数据服务机制

元数据服务的架构:

虚拟机实例通过元数据服务获取元数据的大致流程:

  • 虚拟机实例通过项目网络将元数据请求发送到neutron-ns-metadata-proxy
  • neutron-ns-metadata-proxy通过unix domain socket将请求发送给neutron- metadata-agent
  • neutron-metadata-agent通过内部管理网络将请求转发给nova-api-metadata
  • 获取的元数据被原路返回给发出请求的虚拟机实例

3、配置驱动器机制

  • 配置驱动器主要用于配置虚拟机实例的网络信息
  • 配置驱动器是一个特殊的文件系统
  • 配置驱动器的具体实现会根据Hypervisor和具体配置有所不同
  • 使用配置驱动器对计算主机和镜像都有一定的要求
  • 启用配置驱动器,可在执行openstack server create命令创建虚拟机实例时使用--config-drive true选项,也在/etc/nova/nova.conf配置文件设置force_config_drive=true

4、进一步了解cloud-init

cloud-init在虚拟机实例启动时的运行过程:

三、示例

1、向虚拟机实例注入用户数据

在脚本中使用cloud-config指令,利用cloud-init的cc_set_passwords.py模块为用户设置密码并启用密码登录方式:示例:

 #cloud-config        #cloud-init会读取它开头的数据,这一行一定要写上
 chpasswd:
    list: |
        root:abc123     #设置root密码
        fedora:abc123  #设置默认用户fedora的密码
    expire: false         #密码不过期
 ssh_pwauth: true       #启用SSH密码登录(默认只能通过SSH密钥登录)

注释只是说明,使用时将注释删除

通过SSH登录该实例进行测试:

 [root@node-a ]# ssh curl fedora@10.0.0.2
 ...
 fedora@10.0.0.2'password:       # 输入用户数据中设置的fedora密码
 [fedora@fedora-NEWVM ~]#        # 成功登录

2、设置虚拟机实例的元数据:

3、验证元数据服务机制

实例可通过http://169.254.169.254访问元数据服务。

元数据服务支持两套API

  • OpenStack元数据API
  • EC2兼容的API

获取元数据API所支持的版本列表。

 curl http://169.254.169.254/openstack

进一步获取其中最新版本(latest)的元数据文件目录。

 curl http://169.254.169.254/openstack/latest

查看meta_data.json文件的内容并以JSON格式显示。

 curl http://169.254.169.254/openstack/latest/meta_data.json | python -m json.tool

访问用户数据。

 curl http://169.254.169.254/openstack/latest/user_data

4、验证配置驱动器机制

通过SSH登录该实例,将配置驱动器挂载到/mnt/config目录

 [fedora@fedora-newvm ~]$ su root                                       #切换到root身份操作
 Password: 
 [root@fedora-newvm fedora]# mkdir -p /mnt/config                          #创建挂载目录
 [root@fedora-newvm fedora]# mount /dev/disk/by-label/config-2 /mnt/config   #挂载配置驱动器
 mount: /mnt/config: WARNING: device write-protected, mounted read-only.
 [root@fedora-newvm fedora]# exit                                         #退出root身份操作
 exit

执行mount命令查看当前挂载的文件系统,发现以下信息:

 /dev/sr0 on /mnt/config type iso9660 (ro,relatime,nojoliet,check=s,map=n,blocksize=2048)

查看该挂载目录下的内容,可以发现其中有两个目录:

 [root@fedora-newvm fedora]# ls /mnt/config
 ec2  openstack

查看最新版本(latest)的元数据文件目录:

 [root@fedora-newvm fedora]# ls /mnt/config/openstack/latest
 meta_data.json  network_data.json  user_data  vendor_data2.json  vendor_data.json

四、增加一个计算节点

1、计算服务的物理部署

1.1、Nova的物理部署

  • Nova多个组件和服务部署在计算节点和控制节点节点上
  • 计算节点上安装Hypervisor以运行虚拟机实例,只需要运行nova-compute服务
  • 其他Nova组件和服务则一起部署在控制节点
  • 通过增加控制节点和计算节点,可以实现简单、方便的系统扩容

1.2、Nova的部署模式

  • Nova经典部署模式

  • Nova负载均衡部部署署模式

2、增加一个计算节点并进行验证

2.1、准备双节点OpenStack云平台安装环境

  • 参照之前node-a的方式,添加一个计算节点node-b(192.168.199.31/24),为第2个节点准备环境
  • 更改其主机名为“node-b”,将新的主机名追加到/etc/hosts配置文件中,并将第1个节点的主机名的解析添加进来,本例配置如下:

 192.168.199.31   node-a node-a.localdomain
 192.168.199.32   node-b node-b.localdomain
  • 将第2个节点主机名的解析也添加到第1个节点主机的/etc/hosts配置文件中
  • 设置时间同步。第2个节点也与第1个节点一样配置Chrony

2.2、编辑应答文件

编辑packstack-answers-addnode.txt:

 CONFIG_COMPUTE_HOSTS=192.168.199.31,192.168.199.32
 CONFIG_PROVISION_DEMO_FLOATRANGE=192.168.199.0/24
 CONFIG_KEYSTONE_ADMIN_PW=ABC123456
 CONFIG_KEYSTONE_DEMO_PW=ABC123456

2.3、使用修改过的应答文件运行Packstack安装器

 [root@node-a ~]# packstack --answer-file=packstack-answers-addnode.txt
 …
 Installing:
 Clean Up                                             [ DONE ]
 Discovering ip protocol version                      [ DONE ]
 root@192.168.199.32's password:                     #提供第2个节点root账户密码
 Setting up ssh keys                                  [ DONE ]
 Preparing servers                                    [ DONE ]
 …
 Copying Puppet modules and manifests                 [ DONE ]
 Applying 192.168.199.31_controller.pp
 192.168.199.31_controller.pp:                        [ DONE ]           
 Applying 192.168.199.31_network.pp
 192.168.199.31_network.pp:                           [ DONE ]        
 Applying 192.168.199.31_compute.pp
 Applying 192.168.199.32_compute.pp                     #应用第2个计算节点
 192.168.199.31_compute.pp:                           [ DONE ]        
 192.168.199.32_compute.pp:                           [ DONE ]        
 Applying Puppet manifests                            [ DONE ]
 Finalizing                                           [ DONE ]

2.4、验证双节点部署

  • 虚拟机管理器列表

  • 计算主机列表

  • 计算服务列表

  • 网络代理列表

  • 新创建测试用的虚拟机实例

  • 新创建的虚拟机实例在node-b主机上运行

五、迁移虚拟机实例

1、实例冷迁移

  • 冷迁移是一种非在线的迁移方式
  • 冷迁移主要用于重新分配节点的计算资源,或者主机节点停机维护等场合
  • 实例冷迁移的功能与调整实例大小类似,只是冷迁移不改变实例的实例类型
  • 冷迁移不要求源和目的主机必须共享存储,但要求两者必须满足在计算节点间配置nova用户的无密码SSH访问
  • 默认只有云管理员角色能够执行实例迁移操作

2、实例热迁移

  • 热迁移是一种在线的迁移方式,又称实时迁移
  • 在迁移过程中实例不会关闭始终保持运行状态
  • 有以下类型:
    • 基于共享存储的实时迁移
    • 块实时迁移(简单块迁移)
    • 基于卷的实时迁移

3、热迁移命令行用法

 openstack server migrate
     [--live <目的主机>]         # 用于指定目的主机
     [--shared-migration | --block-migration]    # 执行基于共享存储的实时迁移,包括基于共享存储和基于卷的实时迁移,这是默认设置 | 块实时迁移
     [--disk-overcommit | --no-disk-overcommit]  # 是否允许磁盘超量
     [--wait]    
     <实例名或ID>

4、示例

4.1、在计算节点之间配置SSH无密码访问

(1)在两个节点上准备SSH密钥对及其配置文件

使SSH可以进行非交互式登录:

 [root@node-a ~]# echo -e 'StrictHostKeyChecking no' > /var/lib/nova/.ssh/config

将/var/lib/nova/.ssh/config文件复制到node-b节点对应的目录中:

 [root@node-a ~]# scp -r /var/lib/nova/.ssh/config node-b:/var/lib/nova/.ssh

(2)在两个节点上分别执行命令使nova用户可以登录

 usermod -s /bin/bash nova

(3)在两个节点上检查确认nova用户可以不用密码登录到对方节点 (4)以root用户身份在两个节点上重新启动libvirt和计算服务

 systemctl restart libvirtd.service openstack-nova-compute.service

4.2、执行实例的冷迁移操作

  • 从“动作”下拉菜单中选择“迁移实例”命令

  • 确认迁移实例

  • 确认或放弃调整大小/迁移

  • 实例迁移成功

  • 查看实例列表

  • 执行命令迁移虚拟机实例

     [root@node-a ~(keystone_admin)]# openstack server migrate c76418b1-24ca- 43b0-8d49-70114d8e41e6
  • 查看实例当前状态

  • 执行命令确认调整:

     [root@node-a ~(keystone_admin)]# openstack server resize confirm c76418b1-24ca-43b0- 8d49-70114d8e41e6
  • 查看实例列表:

4.3、实现热迁移的通用配置

(1)在每个计算节点上的/etc/nova/nova.conf配置文件中设置server_listen和instances_path参数。

(2)确认每个计算节点具有相同的名称解析配置,以便它们能通过主机名互相访问。

(3)启用root用户免密码SSH功能。

  • 在第1个节点上将root用户的SSH公钥加入authorized_keys文件。
  • 在第1个节点上将authorized_keys文件复制到第2个节点上。
  • 在第2个节点上将root用户的SSH公钥追加到authorized_keys文件中。
  • 在第2个节点上将authorized_keys文件复制回第一个节点上。

(4)如果启用防火墙,则应允许计算节点之间的libvirt通信

  • 查看虚拟机实例概况(位于可启动的卷):

  • 从动作菜单中选择“实例热迁移”命令:

  • 实例热迁移设置:

  • 成功迁移之后的实例

  • 执行实例的热迁移操作

  • 查看虚拟机实例概况(未连接卷)

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。

学习永无止境,让我们共同进步!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/624868.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

柔性数组+结构体类型转换

柔性数组&#xff1a;在结构体中声明的时候仅作为占位符&#xff0c;好处是地址是连续的 强制类型转换&#xff1a;可用于通信双方进行信息交流 #include <iostream> #include <string.h>struct DataWater {int count;float size;char buf[0]; }; // dbuf相当于是…

传输文件协议FTP与LFTP

目录 一.简介 二. FTP基础 主动模式&#xff08;Active Mode&#xff09;&#xff1a; 被动模式&#xff08;Passive Mode&#xff09;&#xff1a; 三. Vsftp 服务器简介 四. Vsftpd配置 1. 安装vsftpd&#xff08;ftp服务端&#xff09; 2.编辑配置文件 &#xff08;…

视频汇聚管理/安防监控系统EasyCVR如何开启和调用验证码登录接口?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传统安防视…

【补充】图神经网络前传——Node2vec

Node2Vec【图神经网络论文精读】_哔哩哔哩_bilibili 解决的问题&#xff1a;图嵌入 把每一个节点编码成一个d维的低维、稠密&#xff08;不是one-hot&#xff09;、连续&#xff08;不是离散的&#xff0c;是实数->有助于保存更多的信息&#xff09;向量&#xff0c;并且&a…

安装Tomcat

下载 Tomcat 软件包 前往 Apache Tomcat 官网:Apache Tomcat - Apache Tomcat 10 Software Downloads在网站上找到最新版本的 Tomcat&#xff0c;选择下载对应的压缩包&#xff08;通常是 .zip 或 .tar.gz 格式&#xff09;。下载完成后&#xff0c;解压缩到您选择的目录。 配…

【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手

文章目录 一、前言二、绘制效果三、ConstraintLayout 使用方法3.1 创建布局文件3.2 替换配置3.3 设置约束&#xff0c;步骤13.4 设置约束&#xff0c;步骤23.5 其他设置 四、结束 一、前言 在进行Android APP开发过程中&#xff0c;减少layout嵌套即可改善UI的绘制性能&#x…

考研数学|强化《660》+《880》这样刷,太丝滑了❗️

660题880题需要大概两个月才能做完 660题和880题都是很高质量的题集&#xff0c;所以做起来一点也不轻松。 每年都会有学生暑假两个月只做了一本660题的情况&#xff0c;因为题目实在是太难&#xff0c;有点做不下去的感觉。 不过不要担心&#xff0c;暑假就是刷题发现问题的…

一个小调整,竟然让交换机、路由器的CPU占用率降低了50%

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 下午好&#xff0c;我的网工朋友。 在信息时代下&#xff0c;不仅仅在网络工程领域&#xff0c;高CPU占用率都是一个非常常见的问题&#xff0c;…

ESP32-S3+86盒线控器方案,含开发时问题技术解答

随着智能家居产品越来越多&#xff0c;线控器应用也加大&#xff0c;86盒线控器跟智能吹风机联动&#xff0c;跟中央空调联动&#xff0c;下面讲下ESP32-S386盒线控器方案在开发中遇到的问题。 一、ESP32-S386盒线控器方案&#xff1a; 1、无需网关&#xff0c;可以直接连家里…

Flutter 玩转动画 + 自定义View 实现积分或金币领取流程动画

一、效果图 二、主要涉及的知识点 AnimationController、Animation、FractionalTranslation 动画Api的运用CustomPainter 自定义View以及每个时机的把握 主要是写篇博客来记录一下这个功能的实现&#xff0c;具体代码就看源代码了&#xff0c;有疑问可以私信沟通 源代码下载…

【高阶数据结构】并查集 {并查集原理;并查集优化;并查集实现;并查集应用}

一、并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类…

Java的类和对象(一)—— 初始类和对象,this关键字,构造方法

前言 从这篇文章开始&#xff0c;我们就进入到了JavaSE的核心部分。这篇文章是Java类和对象的第一篇&#xff0c;主要介绍类和对象的概念&#xff0c;this关键字以及构造方法~~ 什么是类&#xff1f;什么是对象&#xff1f; 学过C语言的老铁们&#xff0c;可以类比struct自定义…

弹幕游戏-压力测试 Python-Locust模拟送礼物

Hey&#xff0c;读者们&#xff01;今天给大家带来一个Python性能测试的新玩法——使用Locust模拟发送礼物。是不是听起来就很酷&#xff1f;&#x1f60e; &#x1f3af;目标 想象一下&#xff0c;在直播平台上&#xff0c;你希望测试某个直播间的礼物发送功能。那么&#x…

通义千问 1.5 -7B fine-tune验证

尝试对对中文数据进行finetune验证&#xff0c;测试模型的可优化方向。下面是代码的详细情况 代码实现 from datasets import load_dataset from transformers import (AutoModelForCausalLM,AutoTokenizer,BitsAndBytesConfig,HfArgumentParser,AutoTokenizer,TrainingArgum…

Spring学习①__Spring初识

Spring Spring初识一、框架二、Spring&#xff08;春天&#xff09;简介Spring官网Spring是什么?Spring介绍拓展 Spring初识 一、框架 ​框架就是一些类和接口的集合&#xff0c;通过这些类和接口协调来完成一系列的程序实现。 JAVA框架可以分为三层&#xff1a; 表示层业务…

视频号小店,一个不用直播就可以变现的项目!创业首选!

大家好&#xff0c;我是电商小V 想要创业或者是想要利用视频号变现的小伙伴可以说是很多的&#xff0c;因为视频号这两年的流量是非常大的&#xff0c;甚至即将超越抖音的流量&#xff0c;因为视频号背靠腾讯平台&#xff0c;也是不缺少流量的&#xff0c;并且视频号的流量是可…

高扩展性便携式1553B总线测试仪,支持麒麟操作系统

手提式便携1553B总线测试仪&#xff0c;利用订制平台的PXIe扩展槽嵌入石竹科技自主研发的高性能T系列专用1553B测试板卡和高级协议分析和测试软件FP-1553B Pro、FP-5186集成的一款模块化、功能可订制的测试仪器。 基本配置可对1553B信号进行波形采集&#xff08;提供软件示波器…

如何实现数字化校园的高效运维

随着科技开展&#xff0c;国家大力支持各级各类学校建造数字化学校&#xff0c;综合利用互联网、大数据、人工智能和虚拟现实技能探究未来教育教育新模式。因为数字化学校的快速开展&#xff0c;学校网内设备类型很多&#xff0c;网络拓扑杂乱&#xff0c;信息运用繁复。各部门…

电机控制杂谈——“双采样双更新模式”对模型预测控制/PI控制的提升有多大?

1.采样频率与PWM开关频率的关系 一般有以下两种采样模式。 如下图&#xff08;a&#xff09;所示&#xff0c;这种方式称之为单采单更模式&#xff0c;即在一个PWM周期内&#xff0c;采样一次&#xff0c;更新一次PWM占空比&#xff0c;在这种情况下&#xff0c;采样频率&…

ICode国际青少年编程竞赛- Python-5级训练场-综合练习5

ICode国际青少年编程竞赛- Python-5级训练场-综合练习5 1、 a 16 for i in range(6):Dev.step(1)Dev.turnLeft()Dev.step(a)Dev.step(-a)Dev.turnRight()while Dev.energy < 100:wait()Dev.step(1)a a - 5 i2、 for i in range(5):Dev.step(11 - i * 2)Dev.turnRight()wh…