最近看了下关于OpenStack如何统计更新CPU、内存、硬盘等硬件资源的部分,由于历史原因下面的代码来自newton版。

简单说,OpenStack先通过定时任务进行资源统计,入口代码位于nova\compute\manager.pyComputeManager类的update_available_resource函数。默认情况下每分钟更新一次:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

@periodic_task.periodic_task(spacing=CONF.update_resources_interval)
def update_available_resource(self, context):
"""See driver.get_available_resource()

Periodic process that keeps that the compute host's understanding of
resource availability and usage in sync with the underlying hypervisor.

:param context: security context
"""

compute_nodes_in_db = self._get_compute_nodes_in_db(context,
use_slave=True)
nodenames = set(self.driver.get_available_nodes())
for nodename in nodenames:
self.update_available_resource_for_node(context, nodename)

self._resource_tracker_dict = {
k: v for k, v in self._resource_tracker_dict.items()
if k in nodenames}

# Delete orphan compute node not reported by driver but still in db
for cn in compute_nodes_in_db:
if cn.hypervisor_hostname not in nodenames:
LOG.info(_LI("Deleting orphan compute node %s"), cn.id)
cn.destroy()

首先获取所有节点,然后维护了一个名为_resource_tracker_dict的字典用来记录host和ResourceTracker实例的对应关系,所有的资源更新行为都在ResourceTracker中进行处理。

阅读全文

上次学习了Nova创建虚拟机的过程,这次来看一下Glance是如何上传镜像的。相比于Nova,Glance源码使用了大量的代理模式和装饰器模式,阅读代码时候一个不仔细就会一脸懵X。根据上次说的Openstack套路,我们通过setup.cfg直奔主题——glance/cmd/api.py:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
def main():
try:
config.parse_args()
config.set_config_defaults()
wsgi.set_eventlet_hub()
logging.setup(CONF, 'glance')
notifier.set_defaults()
if cfg.CONF.profiler.enabled:
_notifier = osprofiler.notifier.create("Messaging",
oslo_messaging, {},
notifier.get_transport(),
"glance", "api",
cfg.CONF.bind_host)
osprofiler.notifier.set(_notifier)
osprofiler.web.enable(cfg.CONF.profiler.hmac_keys)
else:
osprofiler.web.disable()
server = wsgi.Server(initialize_glance_store=True)
server.start(config.load_paste_app('glance-api'), default_port=9292)
server.wait()
except KNOWN_EXCEPTIONS as e:
print(e)
fail(e)
阅读全文

作为已经比较成熟的IAAS开源解决方案,OpenStack已经发布了19个版本,目前稳定版是Stein,并且下一个版本Train也预计在10月发布。可以说,从代码架构角度来说对于初学者来说已经略微复杂,但最核心的组件有以下几个:

  1. Nova:负责虚拟机相关。
  2. Glance:负责镜像相关。
  3. Cinder:负责存储相关。
  4. Neutron:负责网络相关。
  5. Keystone:负责鉴权以及服务注册。

大体架构如下图:

all.png

阅读全文
  • 第 1 页 共 1 页
作者的图片

Roy

君以国士待我,我必以国士报君。


野生程序猿


China