Juju Charm - Ironic Conductor
Go to file
James Page 97baefaa93
Sync/rebuild for Dalmatian/Epoxy updates
Refresh and rebuild charm for awareness of Dalmatian and Epoxy
Cloud Archive releases.

Change-Id: Ibda2edbdc8c834c5e7451be7bfc7da6232c450bd
2024-11-15 12:15:06 +00:00
docs Allign project structure with OpenStack charms 2020-09-18 19:54:54 +00:00
src Add charmcraft 3 support 2024-09-03 20:56:15 +00:00
unit_tests tests: fix compatibility with revised patching 2024-08-02 19:46:03 +00:00
.gitignore Updates to enable jammy and finalise charmcraft builds 2022-04-21 12:51:42 +00:00
.gitreview Make hardware types configurable, plus fixes 2020-10-29 16:04:00 +00:00
.stestr.conf Allign project structure with OpenStack charms 2020-09-18 19:54:54 +00:00
.zuul.yaml Add charmcraft 3 support 2024-09-03 20:56:15 +00:00
bindep.txt Build separately for each supported series and use binary builds 2022-09-30 12:16:07 +00:00
charmcraft.yaml Add charmcraft 3 support 2024-09-03 20:56:15 +00:00
LICENSE Allign project structure with OpenStack charms 2020-09-18 19:54:54 +00:00
metadata.yaml Migrate charm to charmhub latest/edge track 2022-01-27 20:28:56 +00:00
osci.yaml Add charmcraft 3 support 2024-09-03 20:56:15 +00:00
README.md Allign project structure with OpenStack charms 2020-09-18 19:54:54 +00:00
rebuild Sync/rebuild for Dalmatian/Epoxy updates 2024-11-15 12:15:06 +00:00
rename.sh Update to build using charmcraft 2022-02-01 20:06:10 +00:00
requirements.txt Add Kinetic and Zed support 2022-09-30 20:31:00 +00:00
test-requirements.txt Updates for py312 compatibility 2024-08-22 17:03:21 +00:00
tox.ini Updates for py312 compatibility 2024-08-22 17:03:21 +00:00

Overview

This charm provides the Ironic bare metal conductor service for an OpenStack cloud, starting with train. To get a fully functional Ironic deployment, you will also need the ironic-api and neutron-api-plugin-ironic charms to be deployed.

Deployment

To deploy (partial deployment only):

juju deploy nova-compute \
  --config virt-type="ironic" nova-ironic
juju deploy ironic-conductor

juju add-relation nova-ironic ironic-api
juju add-relation ironic-conductor ironic-api
juju add-relation ironic-conductor keystone
juju add-relation ironic-conductor rabbitmq-server
juju add-relation ironic-conductor mysql

Configuration

There are a number of configuration parameters that greatly influence how the Ironic conductor service will behave. We will detail the ones that require special consideration.

Deployment interfaces

The Ironic conductor charm currently supports two deployment interfaces:

  • direct
  • iscsi (prior to OpenStack Xena)

The iSCSI deployment interface

How it works (really high level view):

  • Ironic python agent boots on remote bare metal machine
  • Ironic python agent exports all disks as iSCSI targets
  • Ironic conductor logs into the iSCSI target and writes the operating system image to the target disk

Pros:

  • Minimal requirements in terms of supporting services (glance, swift, etc)

Cons:

  • The ironic-conductor service needs to be deployed on a bare metal server, or inside a VM. Containerizing the conductor service will make the iscsi deployment method, fail.   The reason for this is that the iscsi kernel module is not namespaced at all, and any attempt to log into an iSCSI target, will happen on the host, not inside the container.
  • Heavy lifting is done by conductor itself:
    • Downloading and converting the Glance image
    • Writing the disk data to the iSCSI target
    • Applying any post-write configuration
  • Requires more Ironic conductor units as the number of bare metal nodes increases

Removal:

  • The iSCSI deploy interface is removed from the ironic project in OpenStack Xena. Support for the iscsi deploy interface is therefore removed from the charm for OpenStack Xena and later releases.

You can set this deployment interface by running the following commands:

juju config ironic-conductor \
  enabled-deploy-interfaces="iscsi, direct"
  default-deploy-interface="iscsi"

The default deploy interface can be overwritten for individual bare metal nodes setting the --deploy-interface explicitly:

openstack baremetal node set $NODE_NAME --deploy-interface iscsi

Whenever possible, avoid using the iSCSI deployment interface, in favor of the direct deployment interface.

The direct deployment interface

How it works (really high level view):

  • The Ironic python agent boots on a remote bare metal machine
  • The Ironic agent fetches any needed images from glance and writes them to local storage.

Pros:

  • All heavy lifting is done by the node that is getting deployed
  • The Ironic conductor can be deployed inside an LXD container
  • Fewer Ironic conductor units are needed, as no real processing is done on these machines

Cons:

  • Requires the whole Operating system image to fit in the nodes memory, except when using raw images. Raw images are streamed directly to disk.

Special considerations:

  • Glance must be related to Swift/RadosGW, and support multi-backend, or use object-store as its default storage backend
  • Ironic relies on being able to generate temporary URLs
    • The set-temp-url-secret action must be run to properly set Temp-Url-Key
  • If ceph-radosgw is used, it must be deployed with the namespace-tenants options set to true

You can set this deployment interface by running the following commands:

juju config ironic-conductor \
  enabled-deploy-interfaces="iscsi, direct"
  default-deploy-interface="direct"

The default deploy interface can be overwritten for individual bare metal nodes setting the --deploy-interface explicitly:

openstack baremetal node set $NODE_NAME --deploy-interface direct

Network interfaces

Ironic can be configured for multi-tenancy by leveraging the neutron network interface.

The currently supported network interfaces are:

  • neutron
  • flat
  • noop

When using the neutron network interface, the following configuration options become mandatory:

  • provisioning-network
  • cleaning-network

These networks will need to be created by the operator beforehand.

For details and security considerations in regards to the selected network interfaces, please refer to the Configure tenant networks section of the Ironic documentation.

Pay close attention to the notes and security warnings highlighted on that page.

Neutron configuration

If using the flat network interface, the following configurations will need to be made on neutron-gateway:

juju config neutron-gateway \
	enable-isolated-metadata=true \
	enable-metadata-network=true

This will allow ironic nodes to access their metadata. Routes will be pushed to them via DHCP that will allow access to 169.254.169.254.

Misc options

The following options may also be of interest:

  • pxe-append-params - You may use this to pass any additional options to the linux kernel, or the Ironic Python Agent (IPA) during deployment. For a list of IPA flags that can be set (ipa-insecure, ssh public key, root password, etc), please see the IPA documentation page
  • automated-cleaning - enables (default) or disables automated cleaning of nodes.
  • disable-secure-erase - disables secure erase of bare metal instance disks, on release. By default, secure erase is enabled. Set this option to true to disable secure erase. Useful for testing.

Please refer to the charm config for a complete list of available charm options.