openstack-裸金属ironic整理-5

iSCSI Deploy UML

With iscsi deploy interface, the deploy ramdisk publishes the node’s hard drive as an iSCSI share. The ironic-conductor then copies the image to this share. This interface is used by default.

1
2
openstack baremetal node create --driver ipmi --deploy-interface iscsi
openstack baremetal node set <NODE> --deploy-interface iscsi

在这里插入图片描述

  1. 通过 Nova API 发起裸金属实例部署请求。
  2. Nova Scheduler 根据请求中的参数信息(e.g. 硬件模板、镜像等)筛选合适的 ironic node。例如:调度因子通常包含在 Flavor 的 extra_spec 属性中(e.g. cpu_arch、baremetal:deploy_kerner_id、baremmetal:deploy_ramdisk_id)。
  3. Nova Compute 将部署裸机所需要的信息都整理好,然后 Spawn 一个 Build 任务,主要是调用并传递参数到 Ironic API 实际执行,Ironic 将此任务中所需要的硬件资源信息持久化到数据库中。
  4. Ironic 与 OpenStack 的其他服务交互,从 Glance 服务获取 Images(Deploy Images & User Images),调用 Neutron 服务为裸机创建端口,调用 Cinder 服务获取Volumes 等。
  5. Ironic 开始执行真正的裸机部署,PXE Driver 准备好 TFTP 和 Bootloader,IPMI Driver 设置裸机启动模式为 PXE 并起电。
    裸机启电后,通过 DHCP 获得 Ironic Conductor 的地址并尝试通过 TFTP 从 Conductor 获取 Deploy Images,Conductor 部署好 RAMDisk 之后,IPA 就可以通过 iSCSI 协议将裸机的硬盘暴露出来,Conductor 随后注入 User Images 到裸机磁盘作为根磁盘。
    根磁盘部署完成后,IPMI Driver 调整裸机引导顺序,完成部署。

PXE Deploy Driver

在这里插入图片描述

openstack-裸金属ironic整理-4

网络规划

在ironic网络分为provisoning/cleaning网络 和 业务网络

类别 类型 网卡 备注
provisoning/cleaning flat ext interface 用于部署阶段,ipa使用
users vlan ext interface 用户业务使用,直通/基础网络

这里两种网络,共用一个网卡,都使用业务网卡比如 eth1, eth1对应交换机接口需要配置trunk,并对接口打上pvid, pvid为users 业务网络的vlan号

Ironic网络架构

基于 SDN 的网络切换流程

在这里插入图片描述

openstack-裸金属ironic整理-3

网络

需要配置网络,以便裸金属服务管理baremetal节点可以与neutron网络服务通信以实现DHCP,PXE引导和其他要求。

点击放大

img说明:

要求:

  1. 裸金属服务管理baremetal节点与 IPMI OOB Network(即BMC管理网络)互通:Ironic Conductor节点可以通过 ipmitool管理BM Node,可以在ironic-conductor节点通过ipmi命令操作裸金属服务器节点验证。
  2. Provisioning Network复用External Network 与 BM Nodes二层互通:BM Node可以从 Provisioning Network DHCP获取到IP地址和TFTP服务器的访问接口,要求裸金属服务器PXE网口和裸金属服务发放Provisioning network在二层互通。
1

openstack-裸金属ironic整理-1

openstack 裸金属ironic探索

组件/术语

组件 分类 作用
ironic-api ironic api 服务,接收用户请求,传递给ironic-conductor
ironic-conductor ironic 根据请求执行相应的,创建、开机、关机、删除等操作
ironic-inspector ironic 主机发现服务,硬件自检工具
ironic-python-agent ironic pxe启动进入的一个bootstrap镜像, 部署引导系统的 agent服务

linux-golang打开markdown失败

在centos 7 上开发,golang无法打开markdown文件,报错

JCEF browser component failed to start
            Missing native libraries:     libXss.so.1

使用yum查找谁提供的包

1
2
#yum whatprovides libXss
#yum install libXScrnSaver

nice, markdown 可以打开了

go-gorm使用子查询查询数据

gorm 使用子查询查询数据

我想实现如下SQL的查询

1
2
>SELECT id,hostname FROM `physical_nodes`  WHERE `physical_nodes`.`deleted_at` IS NULL AND ((model = '' and id not in ((SELECT hid FROM `hardware_infos`  WHERE (cpu_core = '' or mem_size = '' or 
disk = ''))))) ;

通过gorm 实现

1
2
3
4
5
6
7
8
9
10
11
12
ds := db.GetDB()
var pns []model.PhysicalNode
//查询没有model而且hardware info cpu ram disk 为null的
sql := fmt.Sprintf("model = '' and id not in (?)")
subSql := fmt.Sprintf("cpu_core = '' or mem_size = '' or disk = ''")
subQuery := ds.Select("hid").Table("hardware_infos").Where(subSql).SubQuery()

err := ds.Select("id,hostname").Where(sql,subQuery).Find(&pns).Error
if err != nil {
logger.Error("db query error : ",err)
return nil
}