nova-compute的虚拟机(instance)描述
程序员文章站
2022-05-11 17:28:37
...
Nova作为Openstack这个虚拟世界的管理机构,控制着一个个虚拟机的状态变迁与生老病死,而Nova中这种对虚拟机生命周期管理正是由Computer服务nova-compute来完成。
本篇针对虚拟机(instance)进行相关说明
类似人类世界的主体“人”,Linux进程世界的主体“进程”,“虚拟机”作为虚拟机世界的主体,必然也会有一些庞杂的信息或结构去专门描述它的特征和状态,Nova里面这个结构就是Instance。
在浏览Instance的定义之前,我们可以很容易地想象出它里面应该包含哪些内容:有一个唯一的id去标识它的存在,类似于我们每个人的身份证;有一些描述它外在特征的信息,比如内存和硬盘、显示的名称、简短的描述等,类似于人类的身高、体重、自我介绍;有字段去指示它的“家”的信息,即它运行在哪台主机上,类似于我们的家庭地址;有形如xxx_state的字段去表示它的当前状态,就比如我们的学习工作、贫富状态一样;有一些字段去表示它的创建、删除时间,类似我们的出生日期。
就好像需要用大量文字去描述一个人,需要用大于1MB的内存去专门保存一个Linux进程的结构,Nova里面描述虚拟机的Instance对象同样看起来冗长而复杂:
#nova/objects/instance.py
class Instance(base.NovaPersistentObject, base.NovaObject):
VERSION = '1.15'
fields = {
'id': fields.IntegerField(),
'user_id': fields.StringField(nullable=True),
'project_id': fields.StringField(nullable=True),
'image_ref': fields.StringField(nullable=True),
'kernel_id': fields.StringField(nullable=True),
'ramdisk_id': fields.StringField(nullable=True),
'hostname': fields.StringField(nullable=True),
'launch_index': fields.IntegerField(nullable=True),
'key_name': fields.StringField(nullable=True),
'key_data': fields.StringField(nullable=True),
'power_state': fields.IntegerField(nullable=True),
'vm_state': fields.StringField(nullable=True),
'task_state': fields.StringField(nullable=True),
'memory_mb': fields.IntegerField(nullable=True),
'vcpus': fields.IntegerField(nullable=True),
'root_gb': fields.IntegerField(nullable=True),
'ephemeral_gb': fields.IntegerField(nullable=True),
'ephemeral_key_uuid': fields.UUIDField(nullable=True),
'host': fields.StringField(nullable=True),
'node': fields.StringField(nullable=True),
'instance_type_id': fields.IntegerField(nullable=True),
'user_data': fields.StringField(nullable=True),
'reservation_id': fields.StringField(nullable=True),
'scheduled_at': fields.DateTimeField(nullable=True),
'launched_at': fields.DateTimeField(nullable=True),
'terminated_at': fields.DateTimeField(nullable=True),
'availability_zone': fields.StringField(nullable=True),
'display_name': fields.StringField(nullable=True),
'display_description': fields.StringField(nullable=True),
'launched_on': fields.StringField(nullable=True),
'locked': fields.BooleanField(default=False),
'locked_by': fields.StringField(nullable=True),
'os_type': fields.StringField(nullable=True),
'architecture': fields.StringField(nullable=True),
'vm_mode': fields.StringField(nullable=True),
'uuid': fields.UUIDField(),
'root_device_name': fields.StringField(nullable=True),
'default_ephemeral_device': fields.StringField(nullable=True),
'default_swap_device': fields.StringField(nullable=True),
'config_drive': fields.StringField(nullable=True),
'access_ip_v4': fields.IPV4AddressField(nullable=True),
'access_ip_v6': fields.IPV6AddressField(nullable=True),
'auto_disk_config': fields.BooleanField(default=False),
'progress': fields.IntegerField(nullable=True),
'shutdown_terminate': fields.BooleanField(default=False),
'disable_terminate': fields.BooleanField(default=False),
'cell_name': fields.StringField(nullable=True),
'metadata': fields.DictOfStringsField(),
'system_metadata': fields.DictOfNullableStringsField(),
'info_cache': fields.ObjectField('InstanceInfoCache',
nullable=True),
'security_groups': fields.ObjectField('SecurityGroupList'),
'fault': fields.ObjectField('InstanceFault', nullable=True),
'cleaned': fields.BooleanField(default=False),
'pci_devices': fields.ObjectField('PciDeviceList', nullable=True),
'numa_topology': fields.ObjectField('InstanceNUMATopology',
nullable=True)
}