主机(Host)¶
概览(Overview)¶
主机是一个安装有操作系统(虚拟机管理系统,hypervisor)的物理服务器.
在ZStack中, 主机是提供虚拟机运行所需计算资源(computing resources)的最小单元. 区域(Zones)和集群(clusters)通常包含成组的主机,它们是更大的单元. 相较他的父亲资源和先驱资源都是逻辑资源, 主机是物理资源; 很多看似应用到区域和集群上的操作,实际都被指派到对应的主机上了. 例如, 在挂载一个主存储到集群的时候, 实际的操作是在集群中所有的主机上挂载这个主存储.
清单(Inventory)¶
属性(Properties)¶
名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
---|---|---|---|---|
uuid | 请参见 资源属性 | 0.6 | ||
name | 请参见 资源属性 | 0.6 | ||
description | 请参见 资源属性 | 是 | 0.6 | |
zoneUuid | 所在区域的uuid. 请参见 zone | 0.6 | ||
clusterUuid | 父集群的uuid. 请参见 cluster | 0.6 | ||
managementIp | 请参见 management ip | 0.6 | ||
hypervisorType | 请参见 cluster hypervisor type | 0.6 | ||
state | 请参见 state |
|
0.6 | |
status | 请参见 status |
|
0.6 | |
createDate | 请参见 资源属性 | 0.6 | ||
lastOpDate | 请参见 资源属性 | 0.6 |
示例¶
{
"inventory": {
"zoneUuid": "2893ce85c43d4a3a8d78f414da39966e",
"name": "host1-192.168.0.203",
"uuid": "43673938584447b2a29ab3d53f9d88d3",
"clusterUuid": "8524072a4274403892bcc5b1972c2576",
"description": "Test",
"managementIp": "192.168.0.203",
"hypervisorType": "KVM",
"state": "Enabled",
"status": "Connected",
"createDate": "Jun 1, 2015 6:49:24 PM",
"lastOpDate": "Jun 1, 2015 6:49:24 PM"
}
}
管理IP(Management IP)¶
ZStack管理节点(ZStack management nodes)使用管理IP访问主机操作系统(虚拟机管理系统); 根据虚拟机管理系统类型的不同,可以有或者没有管理IP. 例如, 在VMWare中, 访问ESXi主机的官方途径是使用VCenter服务器(VCenter Server), 在这种情况下就没有使用管理IP的必要; 然而, 在KVM主机中, ZStack需要通过管理IP来部署代理程序(agent)到Linux操作系统中.
管理网络(Management Network)¶
虽不做强制限定, 推荐使用一个或者多个专用的子网(dedicated subnets)作为管理网络. 由于管理节点需要通过管理网络发送命令到主机和其他的装置, 运行ZStack管理节点的Linux服务器必须能够访问管理网络. 在以后的章节中, 当谈到特殊应用虚拟机(appliance VMs)的时候,我们会将再次看到管理网络, 在ZStack当前版本中这个特殊应用虚拟机是:ref:virtual router <virtual router>.
可用状态(State)¶
主机有四种可用状态:
Enabled:
在这种状态下,允许在该主机上创建,启动虚拟机,或迁移虚拟机到该主机上
Disabled:
在这种状态下,不允许在该主机上创建,启动虚拟机,或迁移虚拟机到该主机上
PreMaintenance:
指示主机即将进入维护状态的中间状态(intermediate state). 请参见 maintenance mode.
Maintenance:
该状态表明该主机在维护状态中.
主机的可用状态转换图如下:
维护模式(Maintenance Mode)¶
当管理员需要实施一些维护工作时可以将主机设置为维护模式, 例如, 安装更多的内存. 当主机在维护模式中, 不管是API操作还是ZStack内部任务都不会再在主机上执行任何操作. 也就是说, 类似启动虚拟机(API), 停止虚拟机(API), 挂载主存储(内部)的任务都不能在该主机上进行. ZStack将维护模式设计为两个可用模式: PreMaintenance和Maintenance. 主机进入维护模式的顺序如下:
- 改变host的可用状态为PreMaintenance. 在这个阶段, ZStack会尝试将所有运行在该主机上的虚拟机迁移到其他合适的主机上. 如果迁移失败, ZStack将停止这些虚拟机.
- 当所有虚拟机都被迁移或者停止后, ZStack会将主机的可用状态改变为Maintenance. 这时, 管理员就可以开始在主机上实施维护工作.
维护工作结束后,管理员可以通过将主机设置为Enabled或Disabled,以使主机退出维护模式.
连接状态(Status)¶
连接状态反应了主机和管理节点之间命令通道(command channel)的状态. 命令通道是ZStack管理节点和主机通信并只会其执行操作的途径. 例如, 在KVM管理节点中, 命令通道是ZStack管理节点和运行在主机上的Python代理(agents)之间的HTTP连接; 在VMWare管理节点中, 命令通道是VCenter服务器和 ESXi主机之间的连接.
主机有三种连接状态:
Connecting:
在这种状态时,一个ZStack管理节点正在尝试建立自己和主机之间的命令通道. 这时还不能再主机上执行任何操作.
Connected
在这种状态时,ZStack管理节点和主机之间的命令通道已经被成功建立. 可以在主机上执行操作. 只有在这个状态下主机才能创建和启动虚拟机.
Disconnected
在这种状态时,ZStack管理节点和主机之间的命令通道丢失. 这时不能在主机上执行任何操作.
在ZStack管理节点启动过程中会开始和所有他所管理的主机建立命令通道; 在这个阶段, 主机的状态是Connecting; 命令通道建立完成后, 主机的连接状态会变为Connected; 如果管理节点建立命令通道失败, 或者之后某个时候命令通道丢失了, 命令通道所对应的主机连接状态会变为Disconnected.
ZStack管理节点会周期性的向主机发送ping命令(ping commands)以检查命令通道的健康状态; 一旦某个主机响应失败, 或者ping命令超时,主机的连接状态就会变为Disconnected.
主机的连接状态转换图如下:
可用状态(State)和连接状态(Status)¶
可用状态和连接状态之间没有直接关系. 可用状态代表了管理员针对主机的意愿, 而连接状态代表了主机的通信状况.
操作(Operations)¶
添加主机(Add Host)¶
不同虚拟机管理程序添加主机的命令不同.
添加KVM主机(Add KVM Host)¶
管理员可以使用AddKVMHost来添加一个KVM主机. 例如:
AddKVMHost clusterUuid=8524072a4274403892bcc5b1972c2576 managementIp=192.168.10.10 name=kvm1 username=root password=password
参数(Parameters)¶
名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
---|---|---|---|---|
name | 资源名字, 请参见 资源属性 | 0.6 | ||
resourceUuid | 资源的uuid, 请参见 创建(Create Resources) | 是 | 0.6 | |
description | 资源的描述, 请参见 资源属性 | 是 | 0.6 | |
clusterUuid | 父集群的uuid, 请参见 cluster | 0.6 | ||
managementIp | 请参见 management ip | 0.6 | ||
username | 请参见 kvm credentials | 0.6 | ||
password | 请参见 kvm credentials | 0.6 |
KVM证书(KVM Credentials)¶
ZStack使用一个叫做kvmagent的Python代理(agent)来管理KVM主机. ZStack使用`Ansible <http://www.ansible.com/home>`_ 来配置目标Linux操作系统并部署kvmagents,以实现完全的自动化; 为了在目标Linux操作系统上启动Ansible, ZStack需要KVM主机的SSH **root**用户名和密码来注入SSH公钥(public keys),目的是为了让Ansible可以不需要输入用户名密码就可以工作. 需要**root**是因为Ansible和kvmagent都需要对系统有完整的控制权限.
删除主机(Delete Host)¶
管理员可以使用DeleteHost命令来删除一个主机. 例如:
DeleteHost uuid=2893ce85c43d4a3a8d78f414da39966e
参数(Parameters)¶
名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
---|---|---|---|---|
deleteMode | 请参见 删除资源(Delete Resources) | 是 |
|
0.6 |
uuid | 主机的uuid | 0.6 |
改变主机可用状态(Change Host State)¶
管理员可以使用ChangeHostState命令来改变一个主机的可用状态. 例如:
ChangeHostState stateEvent=preMaintain uuid=2893ce85c43d4a3a8d78f414da39966e
参数(Parameters)¶
名字 | 描述 | 可选的 | 可选的参数值 | 起始支持版本 |
---|---|---|---|---|
uuid | 主机的uuid | 0.6 | ||
stateEvent | 可用状态触发事件. 请参见 state |
|
0.6 |
重连主机(Reconnect Host)¶
管理员可以使用ReconnectHost来重新建立ZStack管理节点和主机间的命令通道. 例如:
ReconnectHost uuid=2893ce85c43d4a3a8d78f414da39966e
请参见 status for details.
参数(Parameters)¶
名字 | 描述 | 可选的 | 可选的参数值 | 其实支持版本 |
---|---|---|---|---|
uuid | 主机的uuid | 0.6 |
查询主机(Query Host)¶
管理员可以使用QueryHost来查询主机. 例如:
QueryHost managementIp=192.168.0.100
QueryHost vmInstance.vmNics.ip=10.21.100.2
嵌套和扩展域查询(Nested And Expanded Fields of Query)¶
域(Field) | 清单(Inventory) | 描述 | 起始支持版本 |
---|---|---|---|
zone | zone inventory | 所在区域 | 0.6 |
cluster | cluster inventory | 父集群 | 0.6 |
vmInstance | VM inventory | 这个主机上运行的所有虚拟机 | 0.6 |
全局配置(Global Configurations)¶
load.all¶
名字 | 类别 | 默认值 | 可选的参数值 |
---|---|---|---|
load.all | 主机 | true |
|
配置管理节点启动时是否要连接所有的主机. 如果设置为true, 管理节点会在启动时同时连接所有的主机, 如果云中有数量巨大的主机,这可能会导致运行管理节点的主机资源耗尽; 如果设置为false, 配合 load.parallelismDegree, 管理节点在启动时每次只会连接一部分主机,然后重复这个操作直到所有的主机都连上.
load.parallelismDegree¶
名字 | 类别 | 默认值 | 可选的参数值 |
---|---|---|---|
load.parallelismDegree | 主机 | 100 | > 0 |
当 load.all 被设置为false, 这个配置定义了管理节点启动时同时连接主机的数目.
ping.parallelismDegree¶
名字 | 类别 | 默认值 | 可选的参数值 |
---|---|---|---|
ping.parallelismDegree | 主机 | 100 | > 0 |
管理节点发送ping命令的并发度(parallel degree). 如果主机的数目大于这个值, 管理节点会重复操作指导所有的主机都被ping过. 例如, 先ping前100个主机, 再ping后100个主机 ...
connection.autoReconnectOnError¶
名字 | 类别 | 默认值 | 可选的参数值 |
---|---|---|---|
connection.autoReconnectOnError | 主机 | true |
|
设置当主机的链接状态从Connected变为Disconnected时是否重连. 如果设置为true, 管理节点会通过ping命令重新连接状态从Connected变为Disconnected的主机, 从而让主机完成它在disconnected时错过的操作, 例如, 主机可能disconnected时错过了主机上代理(agent)的升级; 如果设置为false, 管理员根据需要必须手动重连这些主机,管理节点不会自动重连这些主机.
maintenanceMode.ignoreError¶
名字 | 类别 | 默认值 | 可选的参数值 |
---|---|---|---|
maintenanceMode.ignoreError | host | false |
|
设置是否在主机进入维护模式时忽略发生的错误. 如果设置为true, 错误将会被忽略,因此主机总是能成功进入维护模式; 如果设置为false, 主机会因为任何错误的发生而不能进入维护模式, 例如, 虚拟机迁移失败.
reservedCapacity.zoneLevel¶
名字 | 类别 | 默认值 | 可选的参数值 |
---|---|---|---|
reservedCapacity.zoneLevel | hostAllocator | true |
|
设置是否要在区域级别(zone level)启用主机容量预留; 请参见 host capacity reservation.
reservedCapacity.clusterLevel¶
名字 | 类别 | 默认值 | 可选的参数值 |
---|---|---|---|
reservedCapacity.clusterLevel | hostAllocator | true |
|
设置是否要在集群级别(cluster level)启用主机容量预留; 请参见 host capacity reservation.
reservedCapacity.hostLevel¶
名字 | 类别 | 默认值 | 可选的参数值 |
---|---|---|---|
reservedCapacity.hostLevel | hostAllocator | true |
|
设置是否要在集群级别(host level)启用主机容量预留; 请参见 host capacity reservation.
reservedMemory¶
名字 | 类别 | 默认值 | 可选的参数值 |
---|---|---|---|
reservedMemory | kvm | 512M | >= 0 |
当:ref:`reservedCapacity.hostLevel <reservedCapacity.hostLevel>`设置为true的时候,这个字符串存储了KVM主机上预留的内存容量. 这个数值是由一个数字后跟上一个单位组成的,这些表示单位的字符可以是B/K/M/G/T; 如果没有指定表示单位的字符, 这个数字被当成字节计算.
dataVolume.maxNum¶
名字 | 类别 | 默认值 | 可选的参数值 |
---|---|---|---|
dataVolume.maxNum | kvm | 24 | 0 - 24 |
设置KVM虚拟机管理程序中虚拟机可以挂在的数据云盘(data volumes)的最大数量.
标签(Tags)¶
管理员可以使用resourceType=HostVO在主机上创建用户标签. 例如:
CreateUserTag tag=largeMemoryHost resourceUuid=0a9f95a659444848846b5118e15bff32 resourceType=HostVO
系统标签(System Tags)¶
主机容量保留(Host Capacity Reservation)¶
管理员可以使用系统标签在主机上保留一部分内存供系统软件使用. ZStack提供了各种系统标签和全局配置, 以达到更好粒度的内存保留策略控制:
Hypervisor Global Level:
如果没有其他层次的配置,全局等级配置(global level) :ref:`kvm.reservedMemory`会应用到所有的KVM主机.
Zone Level:
请参见 zone host::reservedMemory; 如果没有其他层次的配置,这个系统标签的值会应用到所有这个区域中的主机上. 这个值覆盖全局配置等级(global level).
Cluster Level:
请参见 cluster host::reservedMemory; 如果没有主机层次的配置,这个系统标签的值会应用到所有这个集群中的主机上. 这个值覆盖区域等级配置(zone level)和全局等级配置(global level).
Host Level:
标签 描述 示例 起始支持版本 reservedMemory::{capacity} 这个主机上保留的内存. reservedMemory::1G 0.6 这个配置覆盖所有上面的配置等级.
例如, 假设你还有三个KVM主机zone1->cluster1->{host1, host2, host3}; 默认的内存保留被默认为512M的全局配置(global configuration):ref:`kvm.reservedMemory`控制; 这时如果在zone1上创建一个系统标签 host::reservedMemory::1G, 所有3个主机的内存保留都会被变成1G; 这时如果再在cluster1 上创建一个系统标签*host::reservedMemory::2G*, 所有3个主机的内存保留都会变成2G; 最后, 如果你在host1上创建一个系统标签*reservedMemory::3G*, 这时host1的内存保留将变成3G,但host2和host3还是2G.
主机元数据信息(Host Meta Data Information)¶
标签 | 描述 | 示例 | 起始支持版本 |
---|---|---|---|
capability:liveSnapshot | 如果标签存在, 主机上的虚拟机管理程序支持在线云盘快照(live volume snapshot) | capability:liveSnapshot | 0.6 |
os::distribution::{distribution} | 主机的操作系统提供商 | os::distribution::Ubuntu | 0.6 |
os::release::{release} | 主机的操作系统发布版本 | os::release::trusty | 0.6 |
os::version::{version} | 主机的操作系统版本 | os::version::14.04 | 0.6 |
KVM主机元数据信息(KVM Host Meta Data Information)¶
标签 | 描述 | 示例 | 起始支持版本 |
---|---|---|---|
qemu-img::version::{version} | qemu-img 版本 | qemu-img::version::2.0.0 | 0.6 |
libvirt::version::{version} | libvirt 版本 | libvirt::version::1.2.2 | 0.6 |
hvm::{flag} | 主机硬件虚拟化标识(host hardware virtualization flag); vmx表示Intel CPU; svm表示AMD CPU | hvm::vmx | 0.6 |