Projet

Général

Profil

Openstack Installation TTNN » Historique » Version 55

« Précédent - Version 55/252 (diff) - Suivant » - Version actuelle
Mehdi Abaakouk, 08/08/2014 08:53


Openstack Installation TTNN

Liens

Pending upstream fixes:

Installation

Le setup installé est composé de :

  • 3 hyperviseurs (compute node) qui contiendront 1 ceph-mon, N ceph-osd, nova-compute (qui lance les VM), neutron-openvswitch-agent (qui configure le réseau des vms)
  • 1 VM (controler node), qui contient tous les services de management d'openstack (nova, cinder, glance, neutron)
Les étapes d'installation sont les suivantes:
  • Préparation manuelle de la VM de management sur un des hyperviseurs
  • Installation de ceph et openstack sur toutes les machines avec puppet
  • Déplacement de la VM de management d'openstack dans openstack.

Information sur le puppet master:

La conf et modules puppet utilisé par tetaneutral.net ce trouve la:

http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster
http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster/revisions/master/entry/manifests/nodes/openstack.pp

Seulement c'est 3 classes sont spécifique à tetaneutral, le reste est réutilisable:

class { 'ttnn::server': }
class { 'backup::client': }
class { 'sexymotd': }

Les modules qui sont nécessaire pour openstack pour le reste du fichier sont:

https://github.com/puppetlabs/puppetlabs-apache.git
https://github.com/puppetlabs/puppetlabs-apt
https://github.com/stackforge/puppet-ceph.git
https://github.com/stackforge/puppet-cinder.git
https://github.com/puppetlabs/puppetlabs-concat.git
https://github.com/stackforge/puppet-glance.git
https://github.com/stackforge/puppet-horizon.git
https://github.com/puppetlabs/puppetlabs-inifile.git
https://github.com/stackforge/puppet-keystone.git
https://github.com/camptocamp/puppet-kmod.git
https://github.com/saz/puppet-memcached.git
https://github.com/puppetlabs/puppetlabs-mysql.git
https://github.com/stackforge/puppet-neutron.git
https://github.com/stackforge/puppet-nova.git
https://github.com/puppetlabs/puppetlabs-rabbitmq.git
https://github.com/nanliu/puppet-staging.git
https://github.com/puppetlabs/puppetlabs-stdlib.git
https://github.com/duritong/puppet-sysctl.git
https://github.com/puppetlabs/puppetlabs-vcsrepo.git
https://github.com/stackforge/puppet-vswitch.git
https://github.com/puppetlabs/puppetlabs-xinetd.git

Préparation réseaux des hosts:

Voici le fichier rc.local d'un hyperviseur (g1)

for i in /proc/sys/net/ipv6/conf/*; do for j in autoconf accept_ra; do echo 0 > $i/$j; done;done
# https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
for i in /proc/sys/net/ipv4/conf/*/arp_announce; do echo 2 > $i;done           # NOTE(sileht) Est ce que c'est vraiment utilise quand on aura le switch 10G entre les machines ?

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding

ip link set eth0 up
ip link add link eth0 name eth0.3131 type vlan id 3131
ip link set eth0.3131 up
ip addr add 89.234.156.251/32 dev eth0.3131
ip route add 91.224.149.0/24 dev eth0.3131
ip route add default via 91.224.149.254

ip addr add 2a01:6600:8083:fb00::1/56 dev eth0.3131
ip route add default via fe80::31 dev eth0.3131

ip link add link eth0 name eth0.3175 type vlan id 3175
ip link set eth0.3175 up

ip link add link eth0 name eth0.3195 type vlan id 3195
ip link set eth0.3195 up
ip addr add 192.168.3.101/24 dev br-admin

ip addr add 91.224.148.0/32 dev lo
ip addr add fe80::31/64 dev br-net
ip route add 89.234.156.250/32 dev eth0.3131
ip route add 89.234.156.252/32 dev eth0.3131
ip route add 89.234.156.253/32 dev eth0.3131

exit 0

note: Les bridges openvswitch sont mémorisés et recréés automatiquement par le service openvswitch-switch

Sur h7.tetaneutral.net le routage est le suivant

ip route add 89.234.156.251/32 dev eth0.3131
ip route add 89.234.156.252/32 dev eth0.3131
ip route add 89.234.156.253/32 dev eth0.3131
ip route add 2a01:6600:8083:fb00::/56 dev eth0.3131
ip route add 2a01:6600:8083:fc00::/56 dev eth0.3131
ip route add 2a01:6600:8083:fd00::/56 dev eth0.3131

Ainsi que ceci le temps de l'installation

ip route add 89.234.156.249/32 via 89.234.156.251 # NOTE(sileht): temporairement pour le setup openstack
ip route add 2a01:6600:8083:f900::/56 via 2a01:6600:8083:fb00::1 dev eth0.3131 # NOTE(sileht): temporairement pour le setup openstack

Preparation de la VM de management, le controlleur

Installation des prérequis

$ apt-get install libvirt-bin openstack-debian-images openvswitch-switch openvswitch-datapath-dkms virtinst
#NOTE(sileht): temporairement appliquer les patches de au-dessus à openstack-debian-images 

Preparation de l'image de la VM

$ vim hook.sh
set -xv

echo "openstack" > $BODI_CHROOT_PATH/etc/hostname

cat > $BODI_CHROOT_PATH/etc/resolv.conf <<EOF
domain tetaneutral.net
search tetaneutral.net
nameserver 8.8.8.8
EOF

cat > $BODI_CHROOT_PATH/etc/network/interfaces <<EOF
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet manual
  pre-up /sbin/sysctl -w net.ipv6.conf.eth0.accept_ra=0
  pre-up /sbin/sysctl -w net.ipv6.conf.eth0.autoconf=0
  up ip link set eth0 up
  up ip addr add 89.234.156.249/32 dev eth0
  up ip route add 91.224.148.0/32 dev eth0
  up ip route add default via 91.224.148.0

iface eth0 inet6 static
    pre-up /sbin/sysctl -w net.ipv6.conf.eth0.accept_ra=0
    pre-up /sbin/sysctl -w net.ipv6.conf.eth0.autoconf=0
    address 2a01:6600:8083:f900::1
    netmask 56
    gateway fe80::31

auto eth1
iface eth1 inet static
  pre-up /sbin/sysctl -w net.ipv6.conf.eth1.accept_ra=0
  pre-up /sbin/sysctl -w net.ipv6.conf.eth1.autoconf=0
  address 192.168.3.100
  netmask 255.255.255.0
EOF

mkdir -p $BODI_CHROOT_PATH/root/.ssh
chmod 600 $BODI_CHROOT_PATH/root/.ssh
cat >> $BODI_CHROOT_PATH/root/.ssh/authorized_keys <<EOF
ssh-dss AAAAB3NzaC1kc3MAAACBAJtnGLvuz4uVD6fnERDxDi/C0UyzwCiKmgNtEessopREYasAX4Gu6Fg10jAyIL5Nuc7YDnqj//pOfxNjD7hp99a2ZmkRQgh/ltClxYML9fqhBHgsUCpVse9nOYDHDnDgvXIPRSDUHat2UFpdchHVrFURNLIlZnBztsr+GCDURTV/AAAAFQD9SrBcH49ltaKOm6V5ssCPmgs1SwAAAIAbAvkQ3/tMzzdACO5B9s5Yb3ZuM7XImm0iqufivVf2Xy39g8HOBulUsN7eKEGPhVriqNolgIO7q7tVgYAff4/NE4yDP0Kp0SPg4tjt2yFJuL31Y3wzwHjnKrjgNlDSLl3uZnRXSipwUMwGKbdHB6NZSqlq192VKbHilQ00pbiMlAAAAIB5dfB1lVHkJ0o5CcaVQRPbca9DvbbRwnoTSmKHc5DUcqsPqDhS07CkM9ZcJuY1Nh4wGl4Q9kArj7Tnsvvygf/HReSUcIk4+nbDytJ8/pca/Qx4fzQQyppa94TylN62LSFT6MIJKLoMwYa0dQURT7Mv5+9Qj2vk5pZ38w2iQ9zVCg== root@h1
EOF

sed -i -e 's/^.*Port.*$/Port 2222/' -e 's/^[# ]*PasswordAuthentication.*$/PasswordAuthentication no/' $BODI_CHROOT_PATH/etc/ssh/sshd_config
chroot $BODI_CHROOT_PATH dpkg-reconfigure openssh-server
chroot $BODI_CHROOT_PATH apt-get purge -y cloud-init*
$ chmod +x hook.sh
$ build-openstack-debian-image --image-size 20  --release jessie -u http://apt.tetaneutral.net/debian/ -s http://apt.tetaneutral.net/debian/ --hook-script $(pwd)/hook.sh
$ mv debian-jessie-7.0.0-3-amd64.raw /openstack.raw 
$ rm debian-jessie-7.0.0-3-amd64.qcow2

note: la derniere commande lancée par le script doit être 'qemu-img convert -c -f raw .... , sinon l'image de bootera pas
note(jessie): si l'erreur est celle ci-dessous, relancer manuellement 'kpartx -d debian-jessie-7.0.0-3-amd64.raw' jusqu'a ce que l'erreur disparaissent et le .raw est utilisable:

+ 'kpartx -d debian-jessie-7.0.0-3-amd64.raw'
device-mapper: remove ioctl on loop0p1 failed: Device or resource busy
loop deleted : /dev/loop0

On garde l'image raw qui sera importable dans ceph plus tard et on la mets à la racine pour qui l'utilisateur libvirt puisse y accéder.

Préparation du réseau

$ ovs-vsctl add-br br-net
$ ovs-vsctl add-br br-admin
$ ip link set br-net up
$ ip link set br-admin up
$ ovs-vsctl br-set-external-id br-net bridge-id br-net
$ ovs-vsctl br-set-external-id br-net bridge-id br-admin
$ ovs-vsctl add-port br-admin eth0.3175
$ ip addr add 192.168.3.101/24 br-admin
$ ip addr add fe80::42/64 dev br-net
$ ip route add 89.234.156.249/32 dev br-net proto 42
$ ip -6 route add 2a01:6600:8083:f900::/56 dev br-net proto 42

Installation de la VM

$ virt-install --name openstack --ram 2048 --network bridge=br-net --network bridge=br-admin --nographics --serial pty --wait -1 --noreboot --autostart --disk /openstack.raw,bus=virtio,cache=none,io=native --import
$ EDITOR="sed -i -e \"s,<source bridge='br-net'/>,<source bridge='br-net'/><virtualport type='openvswitch' />,g\"" virsh edit openstack  # Openvswitch is not yet supported by virt-install
$ EDITOR="sed -i -e \"s,<source bridge='br-admin'/>,<source bridge='br-admin'/><virtualport type='openvswitch' />,g\"" virsh edit openstack  # Openvswitch is not yet supported by virt-install
$ virsh  start openstack
$ ssh root@openstack.tetaneutral.net -p 2222

Une fois connecté à la VM:

$ apt-get install puppet
$ puppet agent --enable
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.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 openstack.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 openstack.tetaneutral.net 

_Note: si un vieux cert existe: puppet node clean openstack.tetaneutral.net _

De nouveau sur la VM:

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

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

note: Un paquet est manquant en ce moment (06/08/2014) dans jessie 'nullmailer', pour l'installer manuellement:

wget http://ftp.fr.debian.org/debian/pool/main/n/nullmailer/nullmailer_1.11-2.1_amd64.deb
apt-get purge exim4-base          exim4-config        exim4-daemon-light
dpkg -i nullmailer_1.11-2.1_amd64.deb  # Répondre n'importe quoi, ca sera ecrasé par puppet
apt-get install bsd-mailx
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 

Configuration des hyperviseurs

Une fois la configuration réseau faite tout faire avec puppet:

$ apt-get install puppet
$ puppet agent --enable
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.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 openstack.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 openstack.tetaneutral.net 

_Note: si un vieux cert existe: puppet node clean openstack.tetaneutral.net _

De nouveau sur la VM:

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

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

note: Un paquet est manquant en ce moment (06/08/2014) dans jessie 'nullmailer', pour l'installer manuellement:

wget http://ftp.fr.debian.org/debian/pool/main/n/nullmailer/nullmailer_1.11-2.1_amd64.deb
apt-get purge exim4-base          exim4-config        exim4-daemon-light
dpkg -i nullmailer_1.11-2.1_amd64.deb  # Répondre n'importe quoi, ca sera ecrasé par puppet
apt-get install bsd-mailx
$ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync 

Ajouter la route qui n'a pu être mise au boot de la machine parceque puppet n'avait pas encore créé le bridge openvswitch br-net

ip addr add fe80::42/64 dev br-net

Information sur la configuration d'un hyperviseur sur le puppet master

La configuration ressemble à :

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 => "65001"}

  # Dans le cas d'une moniteur ceph, mais uniquement 3 suffissent, on a déjà g1,g2,g3
  # ttnn_ceph_mon {$::hostname:}

  # La liste des disques dur à utiliser dans ceph
  ttnn_ceph_osd {"/dev/sdb": }
  ttnn_ceph_osd {"/dev/sdc": }

  # La partie Openstack, l'uuid doit être unique par machine (générer avec uuid-gen)
  ttnn_os_compute {"9d26ec10-a48b-4f0f-a122-f10ed16d270f": }

  # La correction d'un petit bug :)
  class {'ttnn_os_configdrive_ceph_fix': }
}

Déplacement du controlleur dans openstack

$ virsh shutdown openstack
$ cat > os.conf <<EOF
export OS_AUTH_URL=http://openstack.tetaneutral.net:5000/v2.0/
export OS_USERNAME=admin
export OS_TENANT_NAME=ttnn_admin
export OS_PASSWORD=<password>
EOF
$ source os.conf 

$ # Upload de l'image
$ glance image-create --progress --name openstack-controlleur --disk-format raw --container-format bare < /openstack.raw 
[=============================>] 100%
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | 493517836ee82ad4110254555d379d76     |
| container_format | bare                                 |
| created_at       | 2014-08-06T15:01:08                  |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | raw                                  |
| id               | 89e8fffd-3311-4885-93a8-986e05c055f4 |
| is_public        | False                                |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | openstack-controlleur                |
| owner            | 27764634d22248f4a7c8518899ff38c5     |
| protected        | False                                |
| size             | 21474836480                          |
| status           | active                               |
| updated_at       | 2014-08-06T15:11:22                  |
| virtual_size     | None                                 |
+------------------+--------------------------------------+

$ # Creation d'un volume dans ceph de cette image
$ cinder create --display-name openstack.tetaneutral.net-bootdisk --image-id 89e8fffd-3311-4885-93a8-986e05c055f4 25

$ # Boot d'un VM avec de volume 
$ netid_net=$(neutron net-list | awk '/ttnn-net/{print $2}')
$ netid_admin=$(neutron net-list | awk '/ttnn-admin/{print $2}')
$ nova boot --nic net-id=$netid_net,v4-fixed-ip=89.234.156.249 --nic net-id=$netid_admin,v4-fixed-ip=192.168.3.100 --block-device source=volume,id=$volume_id,shutdown=preserve,bootindex=0 --flavor m1.medium --poll openstack.tetaneutral.net

Management d'openstack

Build and upload debian image:

$ apt-get install openstack-debian-images
#NOTE(sileht): temporairement appliquer les patches de au-dessus
$ build-openstack-debian-image -m -r jessie  -u http://apt.tetaneutral.net/debian/ -s http://apt.tetaneutral.net/debian/
$ glance image-create --file debian-jessie-7.0.0-3-amd64.raw --is-public True --human-readable --progress --disk-format raw --container-format bare --name debian-jessie-amd64