From fe99e2fc8364fbf76a7935517bdd4abc905053df Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Sun, 4 Oct 2015 10:40:54 -0400 Subject: Add Ironic talk --- src/talks/isnt-it-ironic.hbs | 517 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 517 insertions(+) create mode 100644 src/talks/isnt-it-ironic.hbs (limited to 'src/talks') diff --git a/src/talks/isnt-it-ironic.hbs b/src/talks/isnt-it-ironic.hbs new file mode 100644 index 0000000..b9f743f --- /dev/null +++ b/src/talks/isnt-it-ironic.hbs @@ -0,0 +1,517 @@ + + + + + + + Isn't It Ironic? + + + + +
+

Who am I?

+ +

Distinguished Engineer

+

IBM Cloud

+
+ +
+

Who am I?

+ +

Technical Committee

+

Foundation Board of Directors

+

Developer Infrastructure Core Team

+
+ +
+

What I'm going to talk about

+

(unless I talk about something else)

+ +
+
+
+

"OpenStack is not a virtualization layer. It is an abstraction layer."

+

- Daniel Sabbah, CTO @ IBM

+
+
+

Google trends:

Virtualization & Cloud Computing

+ +
+
+

Google trends:

DevOps & OpenStack + +
+
+

What do developers really want?

+
    +
  • Separate application delivery from hardware procurement
  • +
  • Self-service API for Compute [Storage [Network]] resources
  • +
  • More control + More flexibility
  • +
  • ... Without sacrificing anything
  • +
+
+
+ +
+

So what is this Ironic thing?

+

+ + +
+
+

Key Components

+ +
+
+ +
+
+

Open Technologies

+ +
+
+

What about Vendor-specific enhancements?


+
+

Yes!


+ SeaMicro, Dell, Fujitsu, HP, IBM, Intel, OpenCompute, Cisco, ... +
+
+
+

And so you have options...

+ +
+
+

... and options ...

+ +
+
+

Ironic

Installs Operating System

Deploys Machine Images

+
+
+

Download an image
from your favorite distro

+
+

Or, build your own


+
disk-image-create -a amd64 -o my-image -t qcow2 \
+vm ubuntu serial-console cloud-init-datasources
+
+glance image-create --name my-image --is-public True \
+--disk-format qcow2 --container-format bare < my-image.qcow2
+
+
+
+
+

New in Kilo:

+ +
+
+

Limitations

+ +
+
+

OK, but what about that Bifrost thing?

+
+ +
+
+

That's cool, but I wanted a cloud...

+
+
+ +
+
+
+

Nova Configuration

+
[default]
+
+# Driver to use for controlling virtualization. Options
+compute_driver=nova.virt.ironic.IronicDriver
+
+# Firewall driver (defaults to hypervisor specific iptables driver)
+firewall_driver=nova.virt.firewall.NoopFirewallDriver
+
+# The scheduler host manager class to use (string value)
+scheduler_host_manager=nova.scheduler.ironic_host_manager.IronicHostManager
+
+# Virtual ram to physical ram allocation ratio which affects
+# all ram filters. This configuration specifies a global ratio
+ram_allocation_ratio=1.0
+
+# Amount of disk in MB to reserve for the host (integer value)
+reserved_host_memory_mb=0
+
+# Full class name for the Manager for compute (string value)
+compute_manager=ironic.nova.compute.manager.ClusteredComputeManager
+                
+
+
+

Nova Configuration pt 2

+
[ironic]
+
+# Ironic keystone admin name
+admin_username=ironic
+
+#Ironic keystone admin password.
+admin_password=IRONIC_PASSWORD
+
+# keystone API endpoint
+admin_url=http://IDENTITY_IP:35357/v2.0
+
+# Ironic keystone tenant name.
+admin_tenant_name=service
+
+# URL for Ironic API endpoint.
+api_endpoint=http://IRONIC_NODE:6385/v1
+
+
+

Managing Nova Flavors

+

Create the flavor

+
nova flavor-create my-baremetal-flavor auto $RAM_MB $DISK_GB $CPU
+
+

Setting additional hints

+
ironic node-update  add properties/capabilities='boot_mode:uefi'
+
+nova flavor-key my-baremetal-flavor set capabilities:boot_mode="uefi"
+
+
+
+
+

Examples or Demo?

+
+
+

Enroll Hardware

+
$ ironic node-create -d agent_ipmitool \
+      -i ipmi_username=admin -i ipmi_password=fake -i ipmi_address=10.1.2.3 \
+      -p cpus=4 -p memory_mb=8192 -p local_gb=500 \
+      -e note='spare server' -n mytest
+    +--------------+-------------------------------------------------------------+
+    | Property     | Value                                                       |
+    +--------------+-------------------------------------------------------------+
+    | chassis_uuid | None                                                        |
+    | driver       | agent_ipmitool                                              |
+    | driver_info  | {u'ipmi_address': u'10.1.2.3', u'ipmi_username': u'admin',  |
+    |              | u'ipmi_password': u'******'}                                |
+    | extra        | {u'note': u'spare server'}                                  |
+    | properties   | {u'memory_mb': u'8192', u'local_gb': u'500', u'cpus': u'4'} |
+    | uuid         | 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f                        |
+    | name         | mytest                                                      |
+    +--------------+-------------------------------------------------------------+
+                $ ironic port-create -n 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f -a 00:11:22:00:11:22
+    +-----------+--------------------------------------+
+    | Property  | Value                                |
+    +-----------+--------------------------------------+
+    | node_uuid | 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f |
+    | extra     | {}                                   |
+    | uuid      | 024e52b2-6ae4-483b-a039-d6afae7f6a22 |
+    | address   | 00:11:22:00:11:22                    |
+    +-----------+--------------------------------------+
+                
+
+
+

Validate provided info

+
$ ironic node-validate 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f
+    +------------+--------+--------------------------------------------------------------
+    | Interface  | Result | Reason
+    +------------+--------+--------------------------------------------------------------
+    | console    | False  | Missing 'ipmi_terminal_port' parameter in node's driver_info.
+    | deploy     | False  | Node 7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f failed to validate
+    deploy image info. Some parameters were missing. Missing are:
+    ['driver_info.deploy_kernel', 'driver_info.deploy_ramdisk', 'instance_info.image_source'] |
+    | inspect    | None   | not supported
+    | management | True   |
+    | power      | True   |
+    +------------+--------+--------------------------------------------------------------
+
+
+

Oops

+ (I forgot a few options) +
+
+

Add or change options

+
$ ironic node-update mytest add \
+        instance_info/image_source=http://192.168.1.1/myimage.qcow2 \
+        instance_info/image_checksum=e1d99d6d0ef2144a8d672b0420c547b5
+
+    $ ironic node-update mytest add \
+        driver_info/deploy_ramdisk=http://192.168.1.1/deploy.initrd \
+        driver_info/deploy_kernel=http://192.168.1.1/deploy.vmlinuz
+
+    $ ironic node-update mytest replace extra/note='database' name=db01.example
+    +------------------------+-------------------------------------------------
+    | Property               | Value
+    +------------------------+-------------------------------------------------
+    | extra                  | {u'note': u'database'}
+    | name                   | db01.example
+                
+
+
+

Validate info (again)

+
$ ironic node-validate db01.example
+    +------------+--------+---------------------------------------------------------------+
+    | Interface  | Result | Reason                                                        |
+    +------------+--------+---------------------------------------------------------------+
+    | console    | False  | Missing 'ipmi_terminal_port' parameter in node's driver_info. |
+    | deploy     | True   |                                                               |
+    | inspect    | None   | not supported                                                 |
+    | management | True   |                                                               |
+    | power      | True   |                                                               |
+    +------------+--------+---------------------------------------------------------------+
+
+
+

Show details

+
$ ironic node-show db01.example
+    +------------------------+------------------------------------------------------------
+    | Property               | Value
+    +------------------------+------------------------------------------------------------
+    | target_power_state     | None
+    | last_error             |
+    | maintenance_reason     |
+    | provision_state        | available
+    | console_enabled        | False
+    | target_provision_state | None
+    | maintenance            | False
+    | power_state            | power off
+    | driver                 | agent_ipmitool
+    | reservation            | None
+    | instance_uuid          | None
+    | driver_internal_info   | {}
+    | chassis_uuid           |    
+
+
+

Maintenance Mode

+
$ ironic node-set-maintenance --reason 'replacing disks' db01.example true
+    $ ironic node-show db01.example
+    +------------------------+------------------------------------------------------------
+    | Property               | Value
+    +------------------------+------------------------------------------------------------
+    | target_power_state     | None
+    | last_error             |
+    | maintenance_reason     | replacing disks
+    | provision_state        | available
+    | console_enabled        | False
+    | target_provision_state | None
+    | maintenance            | True
+    | power_state            | power off
+    | instance_uuid          | None
+    | driver_internal_info   | {}   
+
+
+

Power Status Loop

+
$ ironic node-show my.broken.node
+    +-----------------+----------------------------------------------------------------------+
+    | Property        | Value                                                                |
+    +-----------------+----------------------------------------------------------------------+
+    | last_error      | During sync_power_state, max retries exceeded for node               |
+    |                 | 9729f0b2-b270-4d06-aa87-40f2b2cad6ee, node state None does not match |
+    |                 | expected state 'off'. Updating DB state to 'None' Switching node to  |
+    |                 | maintenance mode.                                                    |
+    $ cat /var/log/upstart/ironic-conductor.log
+    2015-03-24 04:29:19.349 26317 WARNING ironic.conductor.manager [-]
+    During sync_power_state, could not get power state for node 9729f0b2-b270-4d06-aa87-40f2b2cad6ee.
+    Error: IPMI call failed: power status.
+
+
+

Deployment (via Ironic)

+
$ ironic node-set-provision-state db01.example active
+
+    The provisioning operation can't be performed on node
+    7a1ce8d0-9679-4d87-8f54-b11f6e8adb8f because it's in maintenance mode.
+    $ ironic node-set-maintenance db01.example false
+    $ ironic node-set-provision-state db01.example active
+    $
+    # ... time goes on ...
+    
+
+
+

Deployment (via Ironic)

+
$ ironic node-show db01.example
+    +------------------------+-------------------------------------
+    | Property               | Value
+    +------------------------+-------------------------------------
+    | target_power_state     | None
+    | last_error             |
+    | maintenance_reason     | None
+    | provision_state        | active
+    | console_enabled        | False
+    | target_provision_state | None
+    | maintenance            | False
+    | power_state            | power on
+    | instance_uuid          | None
+    | driver_internal_info   | {}    
+
+
+

Deployment (via Nova)

+
$ nova boot –flavor baremetal -image myimage -key-name my_ssh_key ...
+
+    $ tail -f /var/log/upsart/nova-compute.log
+    ...
+    2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free ram (MB): 8192
+    2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free disk (GB): 500
+    2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free VCPUS: 4
+
+    ...
+    2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free ram (MB): 0
+    2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free disk (GB): 0
+    2014-05-01 03:47:05.878 AUDIT nova.compute.resource_tracker [-] Free VCPUS: 0
+
+
+
+

Thanks!


+ @devananda

+ devananda.github.io/talks/isnt-it-ironic.html + docs.openstack.org/developer/ironic/deploy/install-guide.html +

+
+
+

Two methods for image deployment

+ + + + + + + + + + + +
Direct from source || Cache on conductor
    +
  • agent_ipmitool
  • +
  • agent_pyghmi
  • +
  • agent_ilo
  • +
    +
  • pxe_ipmitool
  • +
  • pxe_ipminative
  • +
  • pxe_seamicro
  • +
  • pxe_iboot
  • +
  • pxe_ilo
  • +
  • pxe_snmp
  • +
  • pxe_drac
  • +
  • pxe_irmc
  • +
  • pxe_amt
  • +
  • iscsi_ilo
  • +
+
+
+

PXE Deploy Process

+ +
+
+

PXE Deploy Process (cont)

+ +
+
+

Agent Deploy Process

+ +
+
+

Agent Deploy Process (cont)

+ +
+ + + + + + + + -- cgit v1.2.3