Le réseau bare metal doit permettre :
Le réseau doit être acheminé aux machines physiques cible grâce à un VLAN natif (pas de trunk).
Les machines dans ce réseau doivent pouvoir joindre l’API d’Ironic.
Créer ensuite le bridge correspondant et connecter le au réseau physique :
$ ovs-vsctl add-br br-baremetal
$ ovs-vsctl add-port br-baremetal IRONIC_PROVISIONING_NIC
Modifier ensuite la configuration de neutron :
[ovs]
bridge_mappings = baremetal:br-baremetal
Pour appliquer les modifications :
$ systemctl restart neutron-openvswitch-agent.service
Un réseau dédié doit être créé pour les noeuds bare-metal. Le réseau provider correspondant soit être ajouté :
$ neutron net-create --shared --provider:physical_network baremetal \
--provider:network_type flat baremetal
$ neutron subnet-create --name baremetal --enable-dhcp \
--allocation-pool start=192.168.100.1,end=192.168.100.63 \
--gateway 192.168.100.254 baremetal 192.168.100.0/24
$ neutron router-create ROUTER_NAME
$ neutron router-gateway-set ROUTER_NAME EXTERNAL_NETWORK
$ neutron router-interface-add ROUTER_NAME BAREMETAL_SUBNET
Ajouter l’UUID du réseau créé dans le fichier /etc/ironic/ironic.conf :
[neutron]
cleaning_network_uuid = NETWORK_UUID
Note : le compute-node utilisé pour délivrer le service bare-metal doit avoir une adresse IP dans ce réseau.
Créer les images de déploiement :
$ glance image-create --name deploy-kernel --visibility public \
--disk-format aki --container-format aki < deploy.vmlinuz
$ glance image-create --name deploy-initramfs --visibility public \
--disk-format ari --container-format ari < deploy.initrd
Note : les images de déploiement doivent être configurées au niveau du noeud.
Débugguer l’IPA :
[pxe]
pxe_append_params = sshkey="ssh-rsa AAAA..."
Création du noeud :
$ ironic node-create -d pxe_ipmitool -n NODE_NAME
Ajout des informations sur l’IPMI :
$ ironic node-update NODE_UUID add \
driver_info/ipmi_username=USER \
driver_info/ipmi_password=PASS \
driver_info/ipmi_address=ADDRESS
Ajout des informations sur les ressources du noeud :
$ ironic node-update NODE_UUID add \
properties/cpus=CPU \
properties/memory_mb=RAM_MB \
properties/local_gb=DISK_GB \
properties/cpu_arch=ARCH
Quand plusieurs disques sont disponibles sur la machine, il faut configurer l’option root_device :
$ ironic node-update NODE_UUID add properties/root_device='{"size": ">= 80"}'
Ajout des informations sur le déploiement du noeud :
$ ironic node-update NODE_UUID add \
driver_info/deploy_kernel=DEPLOY_VMLINUZ_UUID \
driver_info/deploy_ramdisk=DEPLOY_INITRD_UUID
Ajout d’un port pour le noeud :
$ ironic port-create -n NODE_UUID -a MAC_ADDRESS
Création de la flavor associée :
$ nova flavor-create my-baremetal-flavor auto RAM_MB DISK_GB CPU
$ nova flavor-key my-baremetal-flavor set cpu_arch=x86_64
A partir de Queens, ce mode ne sera plus suffisant. Il faudra utiliser les resource classes1.
Désactivation du scheduling basé sur les propriétés standarts :
$ nova flavor-key my-baremetal-flavor set resources:VCPU=0
$ nova flavor-key my-baremetal-flavor set resources:MEMORY_MB=0
$ nova flavor-key my-baremetal-flavor set resources:DISK_GB=0
On associe les noeuds baremetal à une resource class :
openstack baremetal node set --os-baremetal-api-version 1.21 --resource-class "baremetal.20CPU32G" "$NODE_UUID"
Enfin, on modifie la flavor pour lui ajouter la custom resource :
$ nova flavor-key bm-20-32G set resources:CUSTOM_BAREMETAL_20CPU32G=1
Note : la prise en compte de la resource class se fait lors de la création du noeud. Pour vérifier qu’elle existe :
$ curl -s -H "OpenStack-API-Version: placement 1.2" -H "X-Auth-Token: $OS_TOKEN" http://controller:8778/resource_classes | jq '.resource_classes[].name'
$ openstack baremetal node set $NODE_UUID \
--instance-info image_source=$IMG \
--instance-info image_checksum=$MD5HASH \
--instance-info kernel=$KERNEL \
--instance-info ramdisk=$RAMDISK \
--instance-info root_gb=25
$ openstack baremetal node deploy $NODE_UUID
$ neutron port-create baremetal --mac-address $MAC
$ ironic port-update $NODE_PORT_ID add extra/vif_port_id=$NEUTRON_PORT_ID
Ajouter du matériel déjà provisionné à Ironic avec l'adoption.
Graph des états d’un noeud dans Ironic
Remettre un noeud au status available :
$ ironic node-set-provision-state NODE_UUID deleted
$ ironic node-set-provision-state NODE_UUID manage
$ ironic node-set-provision-state NODE_UUID provide
Si le noeud reste dans l’état clean wait :
$ ironic --ironic-api-version 1.16 node-set-provision-state NODE_UUID abort
Pour que le noeud puisse être provisionné de nouveau :
$ ironic node-set-maintenance NODE_UUID off
Gestion de l’énergie d’un noeud :
$ ipmitool -I lanplus -H <ip> -U <username> -P <password> chassis power <status|on|off|cycle|reset>
Pour qu’OpenStack soit capable de créer des VM ou des noeuds baremetal en fonction de la flavor sélectionnée, il faut utiliser les agrégats.
Création de deux agrégats, un pour les machines virtuelles et l’autre pour les machies baremetal :
$ openstack aggregate create --property baremetal=true baremetal-hosts
$ openstack aggregate create --property baremetal=false virtual-hosts
Note : pour que les propriétés des agrégats soient pris en compte, il faut que le filtre AggregateInstanceExtraSpecsFilter soit présent dans le paramètre scheduler_default_filters.
Répartir ensuite les hôtes dans les deux agrégats :
$ openstack aggregate add host baremetal-hosts COMPUTE_BM
$ openstack aggregate add host virtual-hosts COMPUTE_VM
Pour changer toutes les flavors déjà présentes :
for i in $(openstack flavor list -c ID -f value); do openstack flavor set $i --property baremetal=false; done
Les flavors doivent ensuite être toutes modifiées pour être associées à l’un ou l’autre des agrégats par le biais des property :
$ openstack flavor set FLAVOR_VM --property baremetal=false
$ openstack flavor set FLAVOR_BM --property baremetal=true
$ disk-image-create centos7 baremetal dhcp-all-interfaces grub2 -o centos-image