Laptop Overcloud
Creamos el siguiente usuario:
useradd -d /home/stack -m -s /bin/bash stack
passwd stack
Configuración de sudo:
nano /etc/sudoers
stack ALL=(root) NOPASSWD:ALL
centos ALL=(root) NOPASSWD:ALL
Entramos como stack:
su - stack
Actualizamos:
sudo yum update
Cambiamos el nombre de la maquina:
sudo hostnamectl set-hostname undercloud.example.com
sudo hostnamectl set-hostname --transient undercloud.example.com
sudo nano /etc/hosts
127.0.0.1 undercloud.example.com
sudo systemctl restart network
Comprobamos:
[stack@localhost ~]$ hostname
undercloud.example.com
Repositorios necesarios:
sudo yum -y install epel-release
Instalamos yum-plugin-priorities:
sudo yum -y install yum-plugin-priorities
Repositorios de python-tripleoclient:
sudo curl -o /etc/yum.repos.d/delorean-liberty.repo https://trunk.rdoproject.org/centos7-liberty/current/delorean.repo
sudo curl -o /etc/yum.repos.d/delorean-deps-liberty.repo http://trunk.rdoproject.org/centos7-liberty/delorean-deps.repo
Instalamos Python TripleO:
sudo yum install -y python-tripleoclient
Copiamos la configuración de ejemplo de undercloud:
cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf
Editamos la configuración:
nano undercloud.conf
[DEFAULT]
local_ip = 192.168.0.10/24
undercloud_public_vip = 192.168.0.11
undercloud_admin_vip = 192.168.0.12
local_interface = ens8
masquerade_network = 192.168.0.0/24
dhcp_start = 192.168.0.60
dhcp_end = 192.168.0.80
network_cidr = 192.168.0.0/24
network_gateway = 192.168.0.1
discovery_iprange = 192.168.0.60,192.168.0.80
[auth]
Nos aseguramos de añadir un buen DNS:
echo nameserver 8.8.8.8 >> /etc/resolv.conf
Instalamos undercloud:
openstack undercloud install
Este bug, que reporte al launchpad esta actualmente solucionado.
ERROR: https://bugs.launchpad.net/tripleo/+bug/1544150
1710 packages excluded due to repository priority protections
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python2.7/site-packages/instack_undercloud/undercloud.py", line 750, in install
_run_instack(instack_env)
File "/usr/lib/python2.7/site-packages/instack_undercloud/undercloud.py", line 636, in _run_instack
_run_live_command(args, instack_env, 'instack')
File "/usr/lib/python2.7/site-packages/instack_undercloud/undercloud.py", line 341, in _run_live_command
line = process.stdout.readline().decode()
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 74: ordinal not in range(128)
SOLUCION:
nano /usr/lib/python2.7/site-packages/instack_undercloud/undercloud.py
line = process.stdout.readline().decode('utf-8')
Finalizado del comando
--------------------- END PROFILING ---------------------
[2016-03-14 14:15:35,119] (os-refresh-config) [INFO] Completed phase post-configure
os-refresh-config completed successfully
Generated new ssh key in ~/.ssh/id_rsa
Created flavor "baremetal" with profile "None"
Created flavor "control" with profile "control"
Created flavor "compute" with profile "compute"
Created flavor "ceph-storage" with profile "ceph-storage"
Created flavor "block-storage" with profile "block-storage"
Created flavor "swift-storage" with profile "swift-storage"
#############################################################################
Undercloud install complete.
The file containing this installation's passwords is at
/home/stack/undercloud-passwords.conf.
There is also a stackrc file at /home/stack/stackrc.
These files are needed to interact with the OpenStack services, and should be
secured.
#############################################################################
ERROR LOOP al apagar: https://bugzilla.redhat.com/show_bug.cgi?id=1178497
rm: cannot remove /lib/drauct/hooks/shutdown/30-dm-shutdown.sh: Read-only filesystem
SOLUCIÓN:
Reinstalamos Dracut:
sudo yum reinstall dracut
Editamos:
sudo nano /usr/lib/dracut/modules.d/99shutdown/shutdown.sh
Despues de:
. /lib/dracut-lib.sh
Añadir:
if [ "$(stat -c '%T' -f /)" = "tmpfs" ]; then
mount -o remount,rw /
fi
Editamos:
sudo nano /usr/lib/dracut/modules.d/99shutdown/module-setup.sh
Buscar:
inst_multiple umount poweroff reboot halt losetup
Cambiar por:
inst_multiple umount poweroff reboot halt losetup stat
Recrear initramfs:
sudo dracut --force
unmask shutdown:
sudo systemctl unmask dracut-shutdown.service
Reinciamos:
sudo reboot
Activamos stackrc con:
source /home/stack/stackrc
Creación de imagenes para el opvercloud:
-
Opcion 1:
Creamos las imagenes, puede tardar mucho tiempo:
openstack overcloud image build --all
ERROR
Required file "ironic-python-agent.initramfs" does not exist.
SOLUCIÓN
La intuición me dice que los dos ficheros son el mismo (Comparando .kernel de fedora) <pre class="highlight"> [stack@undercloud images2]$ ls -hl kernel -rw-r–r–. 1 stack stack 5,0M mar 16 08:24 deploy-ramdisk-ironic.kernel -rw-r–r–. 1 stack stack 5,0M mar 16 08:25 ironic-python-agent.kernel [stack@undercloud images2]$ diff kernel cp deploy-ramdisk-ironic.initramfs ironic-python-agent.initramfs cp deploy-ramdisk-ironic.kernel ironic-python-agent.kernel </pre>
-
Opcion 2:
Bajar las imagenes de fedora:
wget -r -nd -np --reject "index.html\*" https://repos.fedorapeople.org/repos/openstack-m/rdo-images-centos-liberty-opnfv/
Subimos las imagenes al undercloud con:
openstack overcloud image upload --image-path /home/stack/images
BONUS - borrar imagenes de glance:
for i in $(glance image-list | grep -v ID | awk ' { print $2 } '); do glance image-delete $i; done
Podremos ver las imagenes cargadas con:
[stack@undercloud images]$ openstack image list
+--------------------------------------+------------------------+
| ID | Name |
+--------------------------------------+------------------------+
| f872cf08-afd7-4d86-a008-465730c3ecb2 | bm-deploy-kernel |
| b3215dfe-8548-42b0-80aa-2ccae02574ac | bm-deploy-ramdisk |
| 583c3a7f-bce3-47db-ba0d-0750e601684f | overcloud-full |
| 1f2166b1-e8bc-4351-b5db-8ebcad37b9f2 | overcloud-full-initrd |
| f327bae7-3d53-4a78-be14-2139457d04ad | overcloud-full-vmlinuz |
+--------------------------------------+------------------------+
Podremos ver las subredes con:
[stack@undercloud images]$ neutron subnet-list
+--------------------------------------+------+----------------+--------------------------------------------------+
| id | name | cidr | allocation_pools |
+--------------------------------------+------+----------------+--------------------------------------------------+
| 791d86a8-e607-4f67-9c85-b5228f599910 | | 192.168.0.0/24 | {"start": "192.168.0.60", "end": "192.168.0.80"} |
+--------------------------------------+------+----------------+--------------------------------------------------+
Actualizamos la red con el dns:
neutron subnet-update 791d86a8-e607-4f67-9c85-b5228f599910 --dns-nameserver 192.168.0.81
[stack@undercloud ~]$ neutron subnet-show 791d86a8-e607-4f67-9c85-b5228f599910
+-------------------+------------------------------------------------------------------+
| Field | Value |
+-------------------+------------------------------------------------------------------+
| allocation_pools | {"start": "192.168.0.60", "end": "192.168.0.80"} |
| cidr | 192.168.0.0/24 |
| dns_nameservers | 8.8.4.4 |
| enable_dhcp | True |
| gateway_ip | 192.168.0.1 |
| host_routes | {"destination": "169.254.169.254/32", "nexthop": "192.168.0.81"} |
| id | 791d86a8-e607-4f67-9c85-b5228f599910 |
| ip_version | 4 |
| ipv6_address_mode | |
| ipv6_ra_mode | |
| name | |
| network_id | 67917664-1468-4658-bba4-90574e1bd997 |
| subnetpool_id | |
| tenant_id | 7b4c8e02a48849aaa8a0d06bb44a4f8c |
+-------------------+------------------------------------------------------------------+
En mi caso a los clientes no les asigna el DNS, podemos introducirlo manualmente:
echo server=8.8.8.8 >> /etc/ironic-inspector/dnsmasq.conf
BONUS - Eliminar las maquinas
for i in {1..2}; do virsh destroy overcloud-node$i; virsh undefine overcloud-node$i; done
Configuramos el acceso:
sudo cat << EOF > /etc/polkit-1/localauthority/50-local.d/50-libvirt-user-stack.pkla
[libvirt Management Access]
Identity=unix-user:centos
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes
Añadimso la clave publica para la conexión ssh:
nano .ssh/authorized_keys
Anfitrion Undercloud
cat << EOF > /usr/bin/bootif-fix
#!/usr/bin/env bash
while true;
do find /httpboot/ -type f ! -iname "kernel" ! -iname "ramdisk" ! -iname "*.kernel" ! -iname "*.ramdisk" -exec sed -i 's|{mac|{net0/mac|g' {} +;
done
EOF
chmod a+x /usr/bin/bootif-fix
cat << EOF > /usr/lib/systemd/system/bootif-fix.service
[Unit]
Description=Automated fix for incorrect iPXE BOOFIF
[Service]
Type=simple
ExecStart=/usr/bin/bootif-fix
[Install]
WantedBy=multi-user.target
EOF
chmod a+x /usr/lib/systemd/system/bootif-fix.service
systemctl daemon-reload
systemctl enable bootif-fix
systemctl start bootif-fix
Overcloud
Mapeamos las maquinas con el nombre overcloud-node* y optenemos la MAC que tienen en el puente aprovisionamient:
for i in {1..2}; do virsh -c qemu+ssh://xerrot@192.168.0.82/system domiflist overcloud-node$i | awk '$3 == "interno" {print $5};'; done > /home/stack/nodes.txt
BONUS - Borrar todos los nodos de ironic:
for i in $(ironic node-list | grep -v UUID | awk ' { print $2 } '); do ironic node-delete $i; done
BONUS - Apagar los nodos:
for i in $(ironic node-list | grep -v UUID | awk ' { print $2 } '); do ironic node-set-power-state $i off; done
Introducir nodos:
jq . << EOF > /home/stack/instackenv.json
{
"ssh-user": "xerrot",
"ssh-key": "$(cat cat /home/stack/.claves/id_rsa)",
"power_manager": "nova.virt.baremetal.virtual_power_driver.VirtualPowerManager",
"host-ip": "192.168.0.81",
"arch": "x86_64",
"nodes": [
{
"pm_addr": "192.168.0.82",
"pm_password": "$(cat /home/stack/.claves/id_rsa)",
"pm_type": "pxe_ssh",
"mac": [
"$(sed -n 1p /home/stack/nodes.txt)"
],
"cpu": "4",
"memory": "4096",
"disk": "45",
"arch": "x86_64",
"pm_user": "xerrot"
},
{
"pm_addr": "192.168.0.82",
"pm_password": "$(cat /home/stack/.claves/id_rsa)",
"pm_type": "pxe_ssh",
"mac": [
"$(sed -n 2p /home/stack/nodes.txt)"
],
"cpu": "4",
"memory": "4096",
"disk": "45",
"arch": "x86_64",
"pm_user": "xerrot"
}
]
}
EOF
Importamos la configuración anterior:
openstack baremetal import --json instackenv.json
Podremos listar los nodos con:
ironic node-list
Configuramos el boot:
openstack baremetal configure boot
Realizamos una introspection:
openstack baremetal introspection bulk start
ERROR en maquina virtual http://ipxe.org/040ee119
SOLUCION:
Reducimos el tiempo de espera:
sudo brctl setfd br1 2
Consultar log con:
sudo journalctl -fu openstack-ironic-inspector-dnsmasq -fu openstack-ironic-inspector
Consultar puertos:
sudo tcpdump -i any port 67 or port 68 or port 69 or port 80 or port 8088
ERROR http://ipxe.org/2e008001 o errores en el arranque de las maquinas:
agent.kernel y agent.ramdisk en blanco o dañados.
SOLUCION:
cd /httpboot
sudo cp -f ironic-python-agent.kernel /httpboot/agent.kernel
sudo cp -f ironic-python-agent.initramfs /httpboot/agent.ramdisk
Asignamos rol:
ironic node-list
ironic node-update a04bddb8-2dc3-4627-8c0b-82a02a574a86 replace properties/capabilities=profile:control,boot_option:local
ironic node-update 26fc0ce0-d6dd-42ae-81c7-e9e0e3d5dcb5 replace properties/capabilities=profile:compute,boot_option:local
Validamos con:
openstack overcloud deploy --templates --control-scale 1 --compute-scale 1 --neutron-tunnel-types vxlan --neutron-network-type vxlan \
--validation-errors-fatal --validation-warnings-fatal --dry-run
openstack baremetal configure ready state
openstack baremetal instackenv validate
Desplegamos overcloud ejecutando:
openstack overcloud deploy --templates --control-scale 1 --compute-scale 1