openstack-nova源码分析(六)availability_zone 可用区

本文深入探讨了openstack-nova中的可用区(availability_zone)概念,强调它并非独立的实体,而是通过主机聚合(Host Aggregates)来实现。在openstack中,可用区与主机组不同,可用区是主机metadata的一种聚合。文章分析了如何通过url、命令行以及源码来理解openstack的可用区功能,包括AvailabilityZoneController的detail方法,以及如何从Service对象中获取可用区信息。

Availability zones (os-availability-zone)
可用区 在openstack中并没有很明确的定义
注: Openstack 对于可用区的定义可能跟一些可用区定义不一样,只以openstack做分析
官方将解释为主机的聚合(Host Aggregates), 可用区在openstack中没有相应的表定义,创建更新接口则使用Host Aggregates功能,
主机组可以被认为是可用区的进一步划分,主机组只对管理员可见而可用区用户可见
然而,主机组与可用区并不是同一个概念
可用区是主机的metadata 的一组聚合
注:
1.一个主机可以属于多个主机组,但是只能属于一个可用区
2.主机默认属于default可用区,即使主机不属于任何主机组

Lists and gets detailed availability zone information.
An availability zone is created or updated by setting the availability_zone parameter 
in the create, update, or create or update methods of the Host Aggregates API. 
See Host Aggregates for more details.

官方解释为:

Host aggregates can be regarded as a mechanism to further partition an availability zone; 
while availability zones are visible to users, host aggregates are only visible to administrators

Availability Zones are the end-user visible logical abstraction for partitioning a cloud without knowing the physical infrastructure. 
That abstraction doesn’t come up in Nova with an actual database model since the availability zone is actually a specific metadata information 
attached to an aggregate. Adding that specific metadata to an aggregate makes the aggregate visible from an end-user perspective and consequently 
allows to schedule upon a specific set of hosts (the ones belonging to the aggregate).
That said, there are a few rules to know that diverge from an API perspective between aggregates and availability zones:
1.one host can be in multiple aggregates, but it can only be in one availability zone
2. by default a host is part of a default availability zone even if it doesn’t belong to an aggregate (the configuration option is named default_availability_zone)
一. url及命令行
  1. url
    url只有GET 获取列表的方法 :
/os-availability-zone
/os-availability-zone/detail
  1. 命令行
nova availability-zone-list
二. 源码
availability_zone = nova.api.opensta
<think>好的,我现在需要帮助用户解决如何使用nova boot命令创建虚拟机实例,并设置多个参数的问题。首先,我得回顾用户之前的问题和我的回答,确保一致性。用户之前询问了配额查看,现在转向实例创建,可能需要更详细的参数说明。 用户提供的引用内容涉及指定主机节点、policy.json配置、RPC调用、Ceph启动镜像等,但用户当前的问题是关于nova boot的具体参数使用。需要综合这些引用中的相关信息,但重点放在命令行参数上。 首先,nova boot的基本结构是必要的。用户需要设置flavor、块设备、网络、安全组和可用区。我需要检查每个参数的语法和可能的选项。例如,块设备参数可能需要指定源类型、目标类型等,这需要正确格式。 然后,引用中的可用区指定(--availability-zone ZONE:HOST)可能涉及如何正确使用这个参数,用户可能需要同时指定区域和主机的情况。同时,安全组和网络配置可能需要多个参数,比如多个--nic和--security-group。 还要考虑用户可能的权限问题,比如是否需要管理员权限来强制指定主机,如引用1中的policy.json配置。但用户当前问题可能不需要涉及权限修改,只需命令语法。 需要确保示例命令准确,参数顺序正确,并解释每个参数的作用。可能还需要提醒用户关于镜像ID、网络ID等的获取方式,比如使用glance image-listopenstack network list。 最后,验证命令是否正确,比如块设备参数是否正确使用source、dest等字段,以及可用区的格式是否正确。同时,需要指出可能的问题,比如参数顺序错误或ID不正确导致的失败。 总结步骤:基本命令结构、每个参数的详细说明、示例命令、参数获取方法、高级用法(如指定主机)、常见问题提示。确保回答结构清晰,覆盖用户提到的所有参数,并参考之前的回答保持一致性。</think>根据OpenStack操作实践和底层机制[^1][^4],使用`nova boot`命令创建虚拟机实例的标准格式如下: ```bash nova boot --image <镜像ID> \ --flavor <规格ID> \ --block-device source=image,id=<镜像ID>,dest=volume,size=<磁盘大小>,shutdown=preserve,bootindex=0 \ --nic net-id=<网络ID>,v4-fixed-ip=<固定IP> \ --security-group <安全组ID> \ --availability-zone <区域>:<计算节点> \ <实例名称> ``` ### 参数详解(基于Ceph集成环境[^3]) 1. **镜像与块设备配置** `--block-device`参数实现无本地磁盘启动,直接挂载Ceph RBD卷: ```bash --block-device source=image,id=abcd1234,dest=volume,size=50,shutdown=preserve ``` - `source=image`:从Glance镜像创建卷 - `dest=volume`:创建持久化Ceph卷(默认保留策略`shutdown=preserve`) - 触发`rbd clone`操作实现秒级启动[^3] 2. **网络配置** 多网卡场景可叠加多个`--nic`参数: ```bash --nic net-id=network1-uuid --nic net-id=network2-uuid ``` 3. **安全组控制** 支持同时应用多个安全组: ```bash --security-group default --security-group webserver ``` 4. **强制调度到指定节点** 需同时满足: ```bash --availability-zone nova:compute-node01 ``` 且在`policy.json`配置`"compute:create:forced_host": "is_admin:True"`[^1] ### 辅助命令 - 获取镜像ID:`openstack image list` - 查看可用计算节点:`nova hypervisor-list`[^1] - 验证网络ID:`openstack network list` ### 创建过程原理 1. 客户端通过`nova-api`接收请求 2. `nova-conductor`调用`schedule_and_build_instances`发起调度[^4] 3. 最终通过RPC调用`compute/manager.py`的`build_and_run_instance`方法[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值