haichuan0227
作者haichuan02272017-04-09 17:52
项目经理, 新浪云计算

OpenStack ironic实施过程中的最佳实践

字数 3911阅读 10050评论 3赞 8

在实施过程中,我们如何能方便debug user/deploy image?如何在单region下,同时支持vm及baremetal?如何以最低的运维管理成本支持baremetal调度?如何支持部署时按需RAID?如何实现baremetal与vm网络互通?

本期活动中,主要围绕实施过程中的如上核心问题,展开详细讨论以及相关的经验分享。同时也拓展到了其它方面,比如raid多机型支持/windows console支持问题。非常感谢爱好者的参与,本文将对如上问题进行归类整理。

1. RAID 相关

问:如何支持部署时按需RAID?

答:使用element proliant-tools制作deploy image。element proliant-tools会在ipa ramdisk中安装一个rpm包hpssacli(HP的RAID管理工具),和一个python module proliantutils(里面ProliantHardwareManager继承了ironic_python_agent.hardware:GenericHardwareManager,实现了get_clean_steps/create_configuration/delete_configuration)。

DIB_DEV_USER_USERNAME=devuser DIB_DEV_USER_PASSWORD=devuser DIB_DEV_USER_PWDLESS_SUDO=true disk-image-create centos7 ironic-agent devuser proliant-tools -o ironic-deploy

配置RAID。

ironic  --ironic-api-version 1.15 node-set-target-raid-config $ironic_node_uuid '{\\"logical_disks\\": [{\\"size_gb\\": \\"MAX\\", \\"disk_type\\": \\"hdd\\", \\"raid_level\\": \\"1\\", \\"is_root_volume\\": true, \\"volume_name\\": \\"root_volume\\"}, {\\"size_gb\\": \\"MAX\\", \\"disk_type\\": \\"hdd\\", \\"number_of_physical_disks\\": 4, \\"raid_level\\": \\"5\\", \\"volume_name\\": \\"data_volume\\"}]}'

做RAID。raid config schema。

ironic --ironic-api-version 1.15 node-set-provision-state $ironic_node_uuid clean --clean-steps '[{\\"interface\\": \\"raid\\", \\"step\\": \\"delete_configuration\\"}, {\\"interface\\": \\"raid\\", \\"step\\": \\"create_configuration\\"}]' # 注意steps之间的先后顺序
ironic  --ironic-api-version 1.15 node-show $ironic_node_uuid

问:社区代码支持HP机器的raid,怎么开发其他加的raid?

答:如需支持其他机型做raid,需要做的是实现所需机型的HardwareManager,继承自ironic_python_agent.hardware:GenericHardwareManager,实现get_clean_steps/create_configuration/delete_configuration。

这种需求,建议为不同机型提供相应的deploy image,里面封装相应的HardwareManager及底层Raid管理工具即可。

对于你的需求,可以提供两个deploy image。

一个封装HP的HardwareManager适配,用于HP机型做RAID;

另一个则封装DELL的HardwareManager适配,用于DELL机型做RAID;

2. 多租户相关

问:如何实现baremetal与vm网络互通?

答:

  1. ironic port-create指定上联switch相关信息;
  2. nova boot 使用 tenant network;
  3. ironic配置使用neutron interface;
  4. neutron配置使用自研ml2 driver, 支持switch vlan/vxlan/turnel ops;

3. 调度相关

问:如何以最低的运维管理成本支持baremetal调度?

答:官方推荐的方法需要使用新tag,且nova和ironic都需要操作且保证一致,太繁琐。

compute node入库时,都会记录自己的hypervisor_type。因此flavor上直接打hypervisor_type tag即可。

# add spec for all nova flavor
vm_flavor_ids=`nova flavor-list|grep True|awk '{print $2}'`
for vm_flavor_id in $vm_flavor_ids; do nova flavor-key ${vm_flavor_id} set capabilities:hypervisor_type=QEMU; nova flavor-show ${vm_flavor_id}; done

# add spec for all baremetal flavor
nova flavor-create ${baremetal_flavor} auto $RAM_MB $DISK_GB $CPU
nova flavor-key ${baremetal_flavor} set capabilities:hypervisor_type=ironic
nova flavor-show ${baremetal_flavor}

注意:
1) libvirt driver based compute入库时会记录自己的hypervisor_type为QEMU,注意是QEMU,不是qemu。
2)任何新增的flavor都需要指定自己的capabilities:hypervisor_type,否则可能会调度到错误的hypervisor type node上。nova flavors不指定capabilities:hypervisor_type,则创建vm可能会被调度到任意node上,包括ironic node上。
3)ComputeCapabilitiesFilter要求key必须使用前缀“capabilities:”,否则不认。

问:如何在单region下,同时支持vm及baremetal?

答:如下是官方给出的用于scheduler的配置,不适用于我们nova compute和ironic共存的环境。

# scheduler_host_manager=ironic_host_manager #继承自host_manager,为ironic compute维护了更简单的NodeState和instance_info。用host_manager也行,默认为host_manager。

# scheduler_use_baremetal_filters=True # 默认exact_*_filter不适用于nova compute。为了scheduler同时支持nova compute和ironic compute,需要nova scheduler禁用此配置,且ironic compute设置*_ratio=1.0。默认为False,已禁用。

# scheduler_host_subset_size=9999999 #用于scheduler更均匀调度出host,默认为1,已经可以满足需求

# scheduler_tracks_instance_changes=False #用于跟踪维护instance info。为了scheduler同时支持nova compute,需要开启此配置。默认为True,已开启。

4. 镜像相关

问:在实施过程中,我们如何能方便debug user/deploy image?

答:

  1. 镜像制作阶段,注入专用于debug的metadata,且要支持sudo。

    DIB_DEV_USER_USERNAME=devuser DIB_DEV_USER_PASSWORD=devuser DIB_DEV_USER_PWDLESS_SUDO=true disk-image-create centos7 ironic-agent devuser -o ironic-deploy
  2. wait call-back / clean wait阶段,停掉ironic conductor api,以便暂停deploying / cleaning。
  3. 进入deploy / user iamge, debug。
  4. 开启ironic conductor api,恢复deploying / cleaning。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

8

添加新评论3 条评论

xjtu2019xjtu2019研发工程师, 苏研
2019-03-04 22:08
你好!inspect/provision阶段有没有用过管理网试过?该管理网与baremetal的ipmi网络相通。
wuwenpinwuwenpin软件开发工程师, 南京
2017-09-21 19:11
每详细,不错。
sosogengdongnisosogengdongni软件开发工程师, inspur
2017-09-21 09:45
你好,请问ironic vlan多租户部署的时候,进入租户网络后(部署用户镜像),裸机无法向dhcp服务器获取ip地址,dhcp服务器收到了dchpdiscover 但是没有回复。

haichuan0227@sosogengdongni 那就是没有回offer,neutron dhcp 没有为deploying network正常提供dhcp服务。check neutron dhcp配置/状态是否正确,及deploying network对应的dhcp进程是否正常

2017-09-21 12:36
Ctrl+Enter 发表

本文隶属于专栏

活动总结
活动总结是社区交流活动内容的总结及延伸,为大家提供了社区专家们丰富且高水平的理论知识、实践经验以及常见问题的最佳解决方法,非常值得大家收藏学习。

作者其他文章

相关文章

相关问题

相关资料

X社区推广