Ironic – Managing and provisioning bare metal machines



Ironic – Managing and provisioning bare metal machines

0 0


TuskarSummit2014March-Ironic


On Github ifarkas / TuskarSummit2014March-Ironic

Ironic

Managing and provisioning bare metal machines

Imre Farkas, Lucas Gomes and Matt Wagner

Agenda

  • Overview
  • Current
  • Future

Overview

  • provides an API for managing and provisioning of physical machines
  • replaces the Nova baremetal driver

Baremetal

  • hardware is not virtualized
  • the tenant has full access to the hardware
  • hypervisor API gluing together multiple pluggable drivers
  • pluggable drivers to allow vendor-specific functionality to be added

Why is baremetal important?

  • HPC
  • devices which can't be virtualized
  • database hosting
  • deploying a cloud infrastructure

Why ALL other tools (MAAS, Crowbar, Foreman) SUCK?

Nova Baremetal vs Ironic split

  • separate database
  • requires a considerable amount of information which is unrelated to virtualized deployment
  • tasks on hardware which do not apply to virtual machines
  • interactions with other projects (eg. Neutron) which do not apply to virtual environments

Current

Ironic Components

  • Ironic API: The component which operators and other services may interact with to manage the bare metal servers.
  • Ironic Conductor: The component which does the bulk of the work. Functionality is exposed via the API service. The Conductor and API services communicate via RPC.
  • Database: A Database for registering resources and storing the state of the Conductor and its drivers.
  • Deploy Ramdisk: A Deployment Ramdisk which does the work over the hardware which is not available remotely to the Conductor.

Ironic Flow

Driver Interfaces

  • Core
    • Power ({set, get}_power_state(); ...)
    • Provision (deploy(); tear_down(); prepare(); ...)
  • Standard
    • Console ({start, stop, get}_console(); ...)
    • Rescue (rescue(); unresue(); ...)
  • Vendor (validate(); vendor_passhtru();)

Example of a Driver

class PXEAndIPMIToolDriver(base.BaseDriver):

    def __init__(self):
        self.power = ipmitool.IPMIPower()
        self.deploy = pxe.PXEDeploy()

        pxe_vendor = pxe.VendorPassthru()
        ipmi_vendor = ipmitool.VendorPassthru()
        mapping = {'pass_deploy_info': pxe_vendor,
                   'set_boot_device': ipmi_vendor}
        self.vendor = utils.MixinVendorInterface(mapping)
class IPMIPower(base.PowerInterface):

    def validate(self, task, node):
        ...

    def get_power_state(self, task, node):
        ...

    def set_power_state(self, task, node, pstate):
        ...

    def reboot(self, task, node):
        ...

The Vendor Interface

  • set_boot_device() (is probably going to be promoted)
  • update_firmware() ???
  • boot_from_network_volume() ???
  • ???

PXE and IPMI Driver Deploy Flow

Fault Tolerance

(Not complete there yet...)

Sunnyvale Overview

  • Mid-cycle meetup week of March 3rd in Sunnyvale, CA.
  • TripleO and Ironic upstream meeting.
  • HP, Red Hat, Yahoo!, Rackspace, Mirantis sent developers.

So what happened?

  • Feature freeze (Feb. 3); -2'd several patches
    • Serial console support
    • Nova Baremetal migration
    • Windows image deploy
    • iLo power and virtual media support
  • (Continued)

So what else happened?

  • Ironic driver for Nova temporarily moved in-tree
  • Continuous Integration work done
  • User documentation focus
  • Discussion re: managing network/storage hardware
  • Ramdisk agent discussions for robust provisioning

Future

Questions / Topics to discuss