Projet

Général

Profil

Openstack Installation nouvelle node du cluster

Allocation IPs

Sur http://wiki.tetaneutral.net/index.php/Architecture prends des ips dans les réseaux suivant:

  • 89.234.156.x et 2a01:6600:8083:xx
  • 192.168.3.xx VLAN admin 3175
  • 192.168.128.xx VLAN vPro 128 (port RJ45 de la machine sur untag 128 de switch)
  • 192.168.99.xx VLAN ceph 3199

allocation des ports de switch

s4810

Rien à configurer, juste choisir un port libre et pas marqué KO (probleme insertion SFP)

s8 ou s9

Choisir et configurer un port untag sur le vlan 128

Connectique réseau

1 cable Fibre de la carte 10G vers le s4810
1 cable RJ45 de la carte réseau interne (vpro) du PC vers s8 ou s8

Configuration DNS

Dans le git des zones DNS de ttnn ajouter gX

example: https://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/bind-zones/revisions/582180e9af2f6fc5aaaf0425f7c3e9e87ab2b117

Configuration BIOS de la machine

Sur une carte mere Q87M vPro

# Activer 'PowerOn' On 'AC failure' : important, permet le rallumage automatique du serveur apres coupure electrique
  1. Désactiver 'Alarm/Warn when case open' (Hardware Monitorning)
  2. Activer 'Boot from LAN/Ethernet'
  3. Activer 'MEBx selection screen' (VPRO bios screen)
  4. Mettre SSD en premier pour l'ordre de BOOT

Configuration VPro de la machine

Faire ce paragraphe: https://chiliproject.tetaneutral.net/projects/tetaneutral/wiki/VPro#First-step

Puis sur g4 (pour le moment seule machine avec acces VLAN 128) :

$ ./vpro_enable_vnc 192.168.128.XXX
...
# Vérifier qu'il y a pas de rouge (juste du bleu et violet) ainsi que ceci vers la fin:
...
      <g:Is5900PortEnabled>true</g:Is5900PortEnabled>
      <g:OptInPolicy>false</g:OptInPolicy>

Préparation configuration réseau et disque

Sur g1, ajouter un block avec un les addresses ips dans le fichier /etc/rc.local

vlan3132_ipv4["g6"]="89.234.156.201" 
vlan3132_ipv6["g6"]="2a01:6600:8083:c900::1" 
vlan3175_ipv4["g6"]="192.168.3.109" 
vlan3199_ipv4["g6"]="192.168.99.243" 

Ajouter la nouvelle machine dans le fichier /etc/hosts:

89.234.156.201 g6.tetaneutral.net g6

Sur g1, commiter et diffuser le fichier hosts et rc.local sur les autres machines:

cd /root/tools
./sync-rclocal.sh

Note: celui-ci relance la partie réseau du rc.local mais comme la plupart des ips sont déjà configuré plusieur message 'RTNETLINK answers: File exists' apparaissent

Préparation configuration puppet

Sur la machine puppet éditer /etc/puppet/manifests/nodes/opentack.pp et ajouter un block pour la nouvelle machine:

node "gX.tetaneutral.net" inherits openstack_node_common {
  # Configuration du routerid et de l'AS number de cette machine
  # Il faut aussi mettre la conf bgp de h7 ainsi que les fichiers 
  # /etc/puppet/manifests/files/openstack/bird.conf.erb et
  # /etc/puppet/manifests/files/openstack/bird6.conf.erb
  # pour ajouter cette AS interne
  ttnn_os_bird {'198.51.100.1': asnum => "65008"}

  # Dans le cas d'un moniteur ceph, (uniquement 3 suffissent), on a déjà g1,g2,g3
  # ttnn_ceph_mon {$::hostname:}
  # Sinon pour uniquement des OSD, utiliser:
  class{"ttnn_ceph_osd_only": }

  # La partie Openstack, l'uuid doit être unique par machine (a générer avec uuidgen)
  ttnn_os_compute {"9d26ec10-XXXX-XXXX-XXXX-f10ed16d270f": }
}

Ajouter une adresse ip autorisé pour le mysql de openstack:

$mysql_allowed_hosts = [
...
'192.168.3.109',
]

Puis dans le fichier /etc/puppet/manifests/files/openstack/bird.conf.erb ajouter un nouveau protocol avec le router id choisi au dessus:

<% if asnum != "65008" %>
protocol bgp OPENSTACK_G6 from mesh_bgp{
         neighbor 89.234.156.201 as 65008;
}
<% end -%>

Puis dans le fichier /etc/puppet/manifests/files/openstack/bird6.conf.erb ajouter un nouveau protocol avec le router id choisi au dessus:

<% if asnum != "65008" %>
protocol bgp OPENSTACK_G6 from mesh_bgp{
         neighbor 2a01:6600:8083:c900::1 as 65008;
}
<% end -%>

Préparation du routage sur h7

Dans /etc/rc.local chercher le block 'CEPH / OPENSTACK' et ajouter les routes, example:

ip route add 89.234.156.201/32 dev eth0.3132
ip route add 2a01:6600:8083:c900::/56 dev eth0.3132

Executer ces nouvelles lignes manuellement sur h7

Puis dans /etc/bird/bird.conf

protocol bgp OPENSTACK_G6 from mesh_openstack {
        neighbor 89.234.156.201 as 65008;
}

et dans /etc/bird/bird6.conf:

protocol bgp OPENSTACK_G6 from mesh_openstack {
        neighbor 2a01:6600:8083:c900::1 as 65008;
}

Reload de bird et bird6:

birdc conf
birdc6 conf

Installation de debian sur la nouvelle machine

Example de mon (sileht) setup pour faire l'installation:

/etc/network/interfaces
auto eth0
iface eth0 inet static
  address 192.168.0.1
  netmask 255.255.255.0

/etc/dnsmasq.d/local.conf 
interface=eth0
domain=tetaneutral.net
dhcp-range=192.168.0.3,192.168.0.253,255.255.255.0,1h
dhcp-boot=pxelinux.0,pxeserver,192.168.0.1
dhcp-option=option:router,192.168.0.1
pxe-service=x86PC, "Install Linux", pxelinux
enable-tftp
tftp-root=/srv/tftp

Activer le routage et masquerade:

echo 1 | sudo tee -a /proc/sys/net/ipv4/ip_forward
sudo iptables -t nat -A POSTROUTING -s "192.168.0.0/24" ! -d "192.168.0.0/24" -j MASQUERADE

Script pour download l'installeur PXE debian (sans firmware) /srv/tftp/dl.sh:

#!/bin/bash -x

YOURMIRROR=ftp.fr.debian.org
ARCH=amd64
DIST=jessie
mkdir -p /srv/tftp
cd /srv/tftp

rm -rf netboot.tar.gz Release* SHA* debian-installer version.info pxelinux.0 pxelinux.cfg ldlinux.c32
wget -q http://"$YOURMIRROR"/debian/dists/${DIST}/main/installer-"$ARCH"/current/images/netboot/netboot.tar.gz
wget -q http://"$YOURMIRROR"/debian/dists/${DIST}/main/installer-"$ARCH"/current/images/SHA256SUMS
wget -q http://"$YOURMIRROR"/debian/dists/${DIST}/Release
wget -q http://"$YOURMIRROR"/debian/dists/${DIST}/Release.gpg
tar -xzf netboot.tar.gz

Je remplace provisoirement le cable du vpro par un cable entre mon PC et ce port.

Installation de l'OS

Date: CET (Europe/France/Paris)
Locale: Etat Unis (en_US.UTF-8)
Clavier: FR
Partitionement: une seul partition bootable en ext4 de 20G sur le SSD pour /
Packages: système minimal avec SSH

Configuration manuelle (non puppetizé) de l'OS

$ apt-get update
$ apt-get dist-upgrade
Editer /etc/udev/rules.d/70-persistent-net.rules et mettre avoir:
  • les ixgbe en eth0 (celui avec le cable branché) et eth1
  • la e1000e en eth2

Installation configuration de openvswitch

apt-get install openvswitch-switch 

# On créé un switch br-eth0
ovs-vsctl add-br br-eth0
# On rajoute une petite bricole pour openstack 
ovs-vsctl br-set-external-id br-eth0 bridge-id br-eth0
# On ajoute le port eth0 dans le switch
ovs-vsctl add-port br-eth0 eth0  # Si aucun trunk vlan n'est spécifié, c'est un trunk avec tous les vlans 

# On créé des interfaces réseau utilisable sur la machine avec des vlans:
ovs-vsctl add-br vlan3132 br-eth0 3132
ovs-vsctl add-br vlan3175 br-eth0 3175
ovs-vsctl add-br vlan3199 br-eth0 3199

# On s'assure que eth0 sera toujours up
ovs-ofctl mod-port br-eth0 eth0 up

Copier le fichier /etc/hosts et /etc/rc.local à partir de g1

Supprimer la configuration des ethX du fichier /etc/network/interfaces

Configurer la console serie et vnc vpro:

$ dmesg | grep ttyS.*0xf0e0
[    0.472164] 0000:00:16.3: ttyS4 at I/O 0xf0e0 (irq = 19, base_baud = 115200) is a 16550A
$ cd /etc/init
$ cp tty1.conf tty-vpro.conf
$ sed -i -e 's/getty.*/getty ttyS4 115200 vt100-nav/g' tty-vpro.conf
$ start tty-vpro

Dans le fichier /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS4,115200 console=tty0 i915.modeset=0" 

Puis

update-grub
reboot

Vérifier que tous les réseaux ping correctement.

(remettre le cable vpro si besoin)

Configuration via puppet

Sur la nouvelle machine:

$ apt-get install puppet
$ puppet agent --enable
$ puppet agent -vt --server puppet.tetaneutral.net --certname g6.tetaneutral.net --pluginsync 
Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for g6.tetaneutral.net
Info: Certificate Request fingerprint (SHA256): AE:72:47:40:A0:E2:F4:59:BA:39:FA:3D:C2:A7:C9:1B:9F:87:A5:B7:65:3A:F9:D4:DE:AF:E2:A3:02:41:0F:2E
Info: Caching certificate for ca
Exiting; no certificate found and waitforcert is disabled

Sur le puppetmaster:

$ puppet ca sign g6.tetaneutral.net 

Puis de nouveau sur la nouvelle machine :

$ puppet agent -vt --server puppet.tetaneutral.net --certname g6.tetaneutral.net --pluginsync 
$ puppet agent -vt --server puppet.tetaneutral.net --certname g6.tetaneutral.net --pluginsync 
$ puppet agent -vt --server puppet.tetaneutral.net --certname g6.tetaneutral.net --pluginsync 

Il ne doit plus y avoir d'erreur la 3°/4° fois.

Nagios:

ajouter la machine dans nagios, prendre example sur une autre machine du même genre (openstack+osd ou openstack+osd+mon)

Vérification:

$ nova service-list | grep g6
| 12 | nova-compute     | g6        | nova     | enabled | up    | 2015-03-24T23:17:25.000000 | None            |

Doit y avoir la nouvelle machine 'up' et 'enabled'

$ neutron agent-list | grep g6
| 4dfd58c4-4959-423a-9c9e-2eb31c75f04b | Open vSwitch agent | g6        | :-)   | True           | neutron-openvswitch-agent |
| b5733323-9eff-4956-8b8e-4a5764ff7987 | Linux Routed Agent | g6        | :-)   | True           | neutron-linuxrouted-agent |

Doit y avoir 2 fois la machine 'alive :-)' et admin_state_up True, 1 fois pour neutron-linuxrouted-agent et 1 fois neutron-openvswitch-agent

Ajouter les disks/OSDs pour ceph:

$ ceph-disk prepare --zap-disk --cluster-uuid 1fe74663-8dfa-486c-bb80-3bd94c90c967 --fs-type=ext4 /dev/sdX
$ smartctl --smart=on /dev/sdX  # Pour le monitoring.
$ ceph osd crush add osd.<ID> 0 root=default host=g3
ou pour les ssds:
$ ceph osd crush add osd.<ID> 0 root=ssd host=g3-ssd

$ /root/tools/ceph-reweight-osds.sh osd.<ID>

Plus d'information ici: Management_Cluster_Ceph