Openstack Installation TTNN » Historique » Version 126
Mehdi Abaakouk, 01/09/2014 14:13
1 | 43 | Laurent GUERBY | {{>toc}} |
---|---|---|---|
2 | 43 | Laurent GUERBY | |
3 | 1 | Mehdi Abaakouk | h1. Openstack Installation TTNN |
4 | 1 | Mehdi Abaakouk | |
5 | 44 | Laurent GUERBY | h2. Liens |
6 | 44 | Laurent GUERBY | |
7 | 44 | Laurent GUERBY | * http://ceph.com/docs/master/rados/operations/cache-tiering/ |
8 | 44 | Laurent GUERBY | * http://ceph.com/docs/master/rados/operations/crush-map/ |
9 | 44 | Laurent GUERBY | |
10 | 3 | Mehdi Abaakouk | h2. Pending upstream fixes: |
11 | 3 | Mehdi Abaakouk | |
12 | 1 | Mehdi Abaakouk | * build-debian-openstack-images, changes should be in next package version: |
13 | 1 | Mehdi Abaakouk | ** Fix extlinux installation on jessie: http://anonscm.debian.org/cgit/openstack/openstack-debian-images.git/commit/?id=1a4ddceb99fb66f42f79e87a183d8e96952e5ac3 |
14 | 1 | Mehdi Abaakouk | ** Fix cloud-init setup with configdrive: http://anonscm.debian.org/cgit/openstack/openstack-debian-images.git/commit/?id=15cce87e2fa15b8952d69fb58711bfa88b21ef87 |
15 | 15 | Mehdi Abaakouk | ** Use Configdrive first for cloud-init: http://anonscm.debian.org/cgit/openstack/openstack-debian-images.git/commit/?id=1b1e1093d5ee525426382ad29b8219ab58f6656d |
16 | 1 | Mehdi Abaakouk | |
17 | 1 | Mehdi Abaakouk | * nova: |
18 | 15 | Mehdi Abaakouk | ** Fix live-migration avec ceph and configdrive:: https://review.openstack.org/#/c/112014/, si la solution est mergé upstream, j'appliquerai le patch au package debian |
19 | 1 | Mehdi Abaakouk | |
20 | 4 | Mehdi Abaakouk | h2. Installation |
21 | 4 | Mehdi Abaakouk | |
22 | 4 | Mehdi Abaakouk | Le setup installé est composé de : |
23 | 4 | Mehdi Abaakouk | |
24 | 4 | Mehdi Abaakouk | * 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) |
25 | 4 | Mehdi Abaakouk | * 1 VM (controler node), qui contient tous les services de management d'openstack (nova, cinder, glance, neutron) |
26 | 4 | Mehdi Abaakouk | |
27 | 4 | Mehdi Abaakouk | Les étapes d'installation sont les suivantes: |
28 | 4 | Mehdi Abaakouk | * Préparation manuelle de la VM de management sur un des hyperviseurs |
29 | 4 | Mehdi Abaakouk | * Installation de ceph et openstack sur toutes les machines avec puppet |
30 | 4 | Mehdi Abaakouk | * Déplacement de la VM de management d'openstack dans openstack. |
31 | 4 | Mehdi Abaakouk | |
32 | 33 | Mehdi Abaakouk | h3. Information sur le puppet master: |
33 | 33 | Mehdi Abaakouk | |
34 | 33 | Mehdi Abaakouk | La conf et modules puppet utilisé par tetaneutral.net ce trouve la: |
35 | 33 | Mehdi Abaakouk | |
36 | 33 | Mehdi Abaakouk | > http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster |
37 | 33 | Mehdi Abaakouk | > http://chiliproject.tetaneutral.net/projects/git-tetaneutral-net/repository/puppetmaster/revisions/master/entry/manifests/nodes/openstack.pp |
38 | 33 | Mehdi Abaakouk | |
39 | 33 | Mehdi Abaakouk | Seulement c'est 3 classes sont spécifique à tetaneutral, le reste est réutilisable: |
40 | 33 | Mehdi Abaakouk | |
41 | 36 | Mehdi Abaakouk | > class { 'ttnn::server': } |
42 | 36 | Mehdi Abaakouk | > class { 'backup::client': } |
43 | 36 | Mehdi Abaakouk | > class { 'sexymotd': } |
44 | 33 | Mehdi Abaakouk | |
45 | 33 | Mehdi Abaakouk | Les modules qui sont nécessaire pour openstack pour le reste du fichier sont: |
46 | 33 | Mehdi Abaakouk | |
47 | 33 | Mehdi Abaakouk | > https://github.com/puppetlabs/puppetlabs-apache.git |
48 | 33 | Mehdi Abaakouk | > https://github.com/puppetlabs/puppetlabs-apt |
49 | 33 | Mehdi Abaakouk | > https://github.com/stackforge/puppet-ceph.git |
50 | 33 | Mehdi Abaakouk | > https://github.com/stackforge/puppet-cinder.git |
51 | 33 | Mehdi Abaakouk | > https://github.com/puppetlabs/puppetlabs-concat.git |
52 | 33 | Mehdi Abaakouk | > https://github.com/stackforge/puppet-glance.git |
53 | 33 | Mehdi Abaakouk | > https://github.com/stackforge/puppet-horizon.git |
54 | 33 | Mehdi Abaakouk | > https://github.com/puppetlabs/puppetlabs-inifile.git |
55 | 33 | Mehdi Abaakouk | > https://github.com/stackforge/puppet-keystone.git |
56 | 33 | Mehdi Abaakouk | > https://github.com/camptocamp/puppet-kmod.git |
57 | 33 | Mehdi Abaakouk | > https://github.com/saz/puppet-memcached.git |
58 | 33 | Mehdi Abaakouk | > https://github.com/puppetlabs/puppetlabs-mysql.git |
59 | 33 | Mehdi Abaakouk | > https://github.com/stackforge/puppet-neutron.git |
60 | 33 | Mehdi Abaakouk | > https://github.com/stackforge/puppet-nova.git |
61 | 33 | Mehdi Abaakouk | > https://github.com/puppetlabs/puppetlabs-rabbitmq.git |
62 | 33 | Mehdi Abaakouk | > https://github.com/nanliu/puppet-staging.git |
63 | 33 | Mehdi Abaakouk | > https://github.com/puppetlabs/puppetlabs-stdlib.git |
64 | 33 | Mehdi Abaakouk | > https://github.com/duritong/puppet-sysctl.git |
65 | 33 | Mehdi Abaakouk | > https://github.com/puppetlabs/puppetlabs-vcsrepo.git |
66 | 33 | Mehdi Abaakouk | > https://github.com/stackforge/puppet-vswitch.git |
67 | 36 | Mehdi Abaakouk | > https://github.com/puppetlabs/puppetlabs-xinetd.git |
68 | 33 | Mehdi Abaakouk | |
69 | 33 | Mehdi Abaakouk | h3. Préparation réseaux des hosts: |
70 | 29 | Mehdi Abaakouk | |
71 | 1 | Mehdi Abaakouk | |
72 | 126 | Mehdi Abaakouk | Preparation des bridges openvswitch: |
73 | 126 | Mehdi Abaakouk | |
74 | 1 | Mehdi Abaakouk | <pre> |
75 | 126 | Mehdi Abaakouk | $ modprobe vhost-net |
76 | 126 | Mehdi Abaakouk | $ modprobe tun |
77 | 126 | Mehdi Abaakouk | $ modprobe loop |
78 | 126 | Mehdi Abaakouk | $ ovs-vsctl add-br br-net |
79 | 126 | Mehdi Abaakouk | $ ovs-vsctl add-br br-net-bridged |
80 | 126 | Mehdi Abaakouk | $ ovs-vsctl add-br br-admin |
81 | 126 | Mehdi Abaakouk | $ ip link set br-net up |
82 | 126 | Mehdi Abaakouk | $ ip link set br-net-bridged up |
83 | 126 | Mehdi Abaakouk | $ ip link set br-admin up |
84 | 126 | Mehdi Abaakouk | $ ovs-vsctl br-set-external-id br-net bridge-id br-net |
85 | 126 | Mehdi Abaakouk | $ ovs-vsctl br-set-external-id br-net-bridged bridge-id br-net-bridged |
86 | 126 | Mehdi Abaakouk | $ ovs-vsctl br-set-external-id br-net bridge-id br-admin |
87 | 126 | Mehdi Abaakouk | </pre> |
88 | 1 | Mehdi Abaakouk | |
89 | 126 | Mehdi Abaakouk | _note: Les bridges openvswitch sont mémorisés et recréés automatiquement par le service openvswitch-switch_ |
90 | 126 | Mehdi Abaakouk | |
91 | 126 | Mehdi Abaakouk | On -recharge le fichier rc.local |
92 | 126 | Mehdi Abaakouk | |
93 | 126 | Mehdi Abaakouk | <pre> |
94 | 126 | Mehdi Abaakouk | bash -x /etc/rc.local |
95 | 126 | Mehdi Abaakouk | </pre> |
96 | 126 | Mehdi Abaakouk | |
97 | 126 | Mehdi Abaakouk | Voici le fichier rc.local d'un hyperviseur |
98 | 126 | Mehdi Abaakouk | |
99 | 126 | Mehdi Abaakouk | <pre> |
100 | 126 | Mehdi Abaakouk | #!/bin/sh |
101 | 98 | Mehdi Abaakouk | for i in /proc/sys/net/ipv6/conf/*; do for j in autoconf accept_ra; do echo 0 > $i/$j; done;done |
102 | 98 | Mehdi Abaakouk | # https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt |
103 | 98 | Mehdi Abaakouk | for i in /proc/sys/net/ipv4/conf/*/arp_announce; do echo 2 > $i;done |
104 | 1 | Mehdi Abaakouk | |
105 | 1 | Mehdi Abaakouk | echo 1 > /proc/sys/net/ipv4/ip_forward |
106 | 1 | Mehdi Abaakouk | echo 1 > /proc/sys/net/ipv6/conf/all/forwarding |
107 | 1 | Mehdi Abaakouk | |
108 | 126 | Mehdi Abaakouk | static_route_vlan3131_ipv4="89.234.156.250 89.234.156.251 89.234.156.252 89.234.156.253" |
109 | 126 | Mehdi Abaakouk | static_route_vlan3131_ipv6="2a01:6600:8083:fb00:: 2a01:6600:8083:fc00:: 2a01:6600:8083:fd00::" |
110 | 1 | Mehdi Abaakouk | |
111 | 126 | Mehdi Abaakouk | case $(hostname -s) in |
112 | 126 | Mehdi Abaakouk | g1) |
113 | 126 | Mehdi Abaakouk | ceph_disks_manual_activate="/dev/sda2" |
114 | 126 | Mehdi Abaakouk | vlan3131_ipv4="89.234.156.251" |
115 | 126 | Mehdi Abaakouk | vlan3131_ipv6="2a01:6600:8083:fb00::1" |
116 | 126 | Mehdi Abaakouk | vlan3175_ipv4="192.168.3.101" |
117 | 126 | Mehdi Abaakouk | ;; |
118 | 126 | Mehdi Abaakouk | g2) |
119 | 126 | Mehdi Abaakouk | ceph_disks_manual_activate="/dev/sda3" |
120 | 126 | Mehdi Abaakouk | vlan3131_ipv4="89.234.156.252" |
121 | 126 | Mehdi Abaakouk | vlan3131_ipv6="2a01:6600:8083:fc00::1" |
122 | 126 | Mehdi Abaakouk | vlan3175_ipv4="192.168.3.102" |
123 | 126 | Mehdi Abaakouk | ;; |
124 | 126 | Mehdi Abaakouk | g3) |
125 | 126 | Mehdi Abaakouk | ceph_disks_manual_activate="/dev/sda2" |
126 | 126 | Mehdi Abaakouk | vlan3131_ipv4="89.234.156.253" |
127 | 126 | Mehdi Abaakouk | vlan3131_ipv6="2a01:6600:8083:fd00::1" |
128 | 126 | Mehdi Abaakouk | vlan3175_ipv4="192.168.3.103" |
129 | 126 | Mehdi Abaakouk | ;; |
130 | 126 | Mehdi Abaakouk | esac |
131 | 1 | Mehdi Abaakouk | |
132 | 1 | Mehdi Abaakouk | |
133 | 1 | Mehdi Abaakouk | ovs_vlan_attach(){ |
134 | 126 | Mehdi Abaakouk | bridge=$1 |
135 | 126 | Mehdi Abaakouk | interface=$2 |
136 | 126 | Mehdi Abaakouk | vlan=$3 |
137 | 126 | Mehdi Abaakouk | ip=$4 |
138 | 126 | Mehdi Abaakouk | ip6=$5 |
139 | 126 | Mehdi Abaakouk | # Clean ovs mess (it creates the interface without vlan tag id) |
140 | 126 | Mehdi Abaakouk | ovs-vsctl del-port ${bridge} ${interface}.${vlan} |
141 | 126 | Mehdi Abaakouk | ip link set ${interface}.${vlan} down |
142 | 126 | Mehdi Abaakouk | ip link del ${interface}.${vlan} |
143 | 126 | Mehdi Abaakouk | ip link add link ${interface} name ${interface}.${vlan} type vlan id ${vlan} |
144 | 126 | Mehdi Abaakouk | ip link set ${interface}.${vlan} up |
145 | 126 | Mehdi Abaakouk | ovs-vsctl add-port ${bridge} ${interface}.${vlan} |
146 | 126 | Mehdi Abaakouk | ip link set ${bridge} up |
147 | 126 | Mehdi Abaakouk | [ "${ip}" ] && ip addr add ${ip} dev ${bridge} |
148 | 126 | Mehdi Abaakouk | [ "${ip6}" ] && ip addr add ${ip6} dev ${bridge} |
149 | 71 | Mehdi Abaakouk | } |
150 | 1 | Mehdi Abaakouk | |
151 | 126 | Mehdi Abaakouk | ip link set eth0 up |
152 | 1 | Mehdi Abaakouk | |
153 | 126 | Mehdi Abaakouk | # VLAN 3131 VM routed config |
154 | 1 | Mehdi Abaakouk | ip link set br-net up |
155 | 1 | Mehdi Abaakouk | ip addr add fe80::31/64 dev br-net |
156 | 1 | Mehdi Abaakouk | ip addr add 91.224.148.0/32 dev br-net |
157 | 71 | Mehdi Abaakouk | |
158 | 126 | Mehdi Abaakouk | # VLAN 3131 VM bridged config |
159 | 126 | Mehdi Abaakouk | ovs_vlan_attach br-net-bridged eth0 3131 $vlan3131_ipv4/24 $vlan3131_ipv6/56 |
160 | 126 | Mehdi Abaakouk | ip route add 91.224.149.0/24 dev br-net-bridged |
161 | 126 | Mehdi Abaakouk | ip route add default via 91.224.149.254 |
162 | 126 | Mehdi Abaakouk | ip route add default via fe80::31 dev br-net-bridged |
163 | 126 | Mehdi Abaakouk | |
164 | 126 | Mehdi Abaakouk | # VLAN 3131 static route |
165 | 126 | Mehdi Abaakouk | for ip in $static_route_vlan3131_ipv4; do |
166 | 126 | Mehdi Abaakouk | [ "$ip" != "$vlan3131_ipv4" ] && ip route add $ip/32 dev br-net-bridged |
167 | 126 | Mehdi Abaakouk | done |
168 | 126 | Mehdi Abaakouk | for ip in $static_route_vlan3131_ipv6; do |
169 | 126 | Mehdi Abaakouk | [ "${ip}1" != "$vlan3131_ipv6" ] && ip route add $ip/56 dev br-net-bridged |
170 | 126 | Mehdi Abaakouk | done |
171 | 126 | Mehdi Abaakouk | |
172 | 126 | Mehdi Abaakouk | # VLAN 3175 et 3195 VM bridge config |
173 | 126 | Mehdi Abaakouk | ovs_vlan_attach br-admin eth0 3175 $vlan3175_ipv4/24 |
174 | 126 | Mehdi Abaakouk | ovs_vlan_attach br-tsf eth0 3195 |
175 | 126 | Mehdi Abaakouk | |
176 | 126 | Mehdi Abaakouk | # Reload services with correct config |
177 | 30 | Mehdi Abaakouk | for i in /etc/init.d/{ceph,nova-compute,neutron-plugin-*-agent} ; do |
178 | 126 | Mehdi Abaakouk | $i restart |
179 | 30 | Mehdi Abaakouk | done |
180 | 30 | Mehdi Abaakouk | |
181 | 126 | Mehdi Abaakouk | for disk in $ceph_disks_manual_activate; do |
182 | 126 | Mehdi Abaakouk | mount | grep -q $disk || ceph activate $disk |
183 | 126 | Mehdi Abaakouk | done |
184 | 30 | Mehdi Abaakouk | |
185 | 126 | Mehdi Abaakouk | # Start the management VM |
186 | 30 | Mehdi Abaakouk | is_openstack_vm_here=$(virsh list --all | awk '{if ($2 == "openstack") print $0}') |
187 | 30 | Mehdi Abaakouk | if [ "$is_openstack_vm_here" ]; then |
188 | 126 | Mehdi Abaakouk | virsh start openstack |
189 | 126 | Mehdi Abaakouk | ip route add 89.234.156.249/32 dev br-net proto 42 |
190 | 126 | Mehdi Abaakouk | ip -6 route add 2a01:6600:8083:f900::/56 dev br-net proto 42 |
191 | 57 | Mehdi Abaakouk | fi |
192 | 89 | Mehdi Abaakouk | |
193 | 126 | Mehdi Abaakouk | # Start mapping daemon between bird and openstack |
194 | 126 | Mehdi Abaakouk | /root/tetaneutral-openstack-routing-daemon.sh -d |
195 | 126 | Mehdi Abaakouk | |
196 | 1 | Mehdi Abaakouk | exit 0 |
197 | 1 | Mehdi Abaakouk | </pre> |
198 | 73 | Mehdi Abaakouk | |
199 | 73 | Mehdi Abaakouk | Sur h7.tetaneutral.net le routage est le suivant |
200 | 6 | Mehdi Abaakouk | |
201 | 17 | Mehdi Abaakouk | <pre> |
202 | 16 | Mehdi Abaakouk | ip route add 89.234.156.251/32 dev eth0.3131 |
203 | 1 | Mehdi Abaakouk | ip route add 89.234.156.252/32 dev eth0.3131 |
204 | 20 | Mehdi Abaakouk | ip route add 89.234.156.253/32 dev eth0.3131 |
205 | 16 | Mehdi Abaakouk | ip route add 2a01:6600:8083:fb00::/56 dev eth0.3131 |
206 | 16 | Mehdi Abaakouk | ip route add 2a01:6600:8083:fc00::/56 dev eth0.3131 |
207 | 16 | Mehdi Abaakouk | ip route add 2a01:6600:8083:fd00::/56 dev eth0.3131 |
208 | 16 | Mehdi Abaakouk | </pre> |
209 | 1 | Mehdi Abaakouk | |
210 | 20 | Mehdi Abaakouk | h3. Preparation de la VM de management, le controlleur |
211 | 6 | Mehdi Abaakouk | |
212 | 6 | Mehdi Abaakouk | h4. Installation des prérequis |
213 | 6 | Mehdi Abaakouk | |
214 | 1 | Mehdi Abaakouk | <pre> |
215 | 6 | Mehdi Abaakouk | $ apt-get install libvirt-bin openstack-debian-images virtinst openvswitch-switch |
216 | 20 | Mehdi Abaakouk | #NOTE(sileht): temporairement appliquer les patches de au-dessus à openstack-debian-images |
217 | 20 | Mehdi Abaakouk | </pre> |
218 | 1 | Mehdi Abaakouk | |
219 | 1 | Mehdi Abaakouk | h4. Preparation de l'image de la VM |
220 | 92 | Mehdi Abaakouk | |
221 | 20 | Mehdi Abaakouk | On notera les ip temporaire 192.168.3.100 |
222 | 20 | Mehdi Abaakouk | |
223 | 20 | Mehdi Abaakouk | <pre> |
224 | 20 | Mehdi Abaakouk | $ vim hook.sh |
225 | 1 | Mehdi Abaakouk | set -xv |
226 | 20 | Mehdi Abaakouk | |
227 | 92 | Mehdi Abaakouk | echo "openstack" > $BODI_CHROOT_PATH/etc/hostname |
228 | 40 | Mehdi Abaakouk | |
229 | 46 | Mehdi Abaakouk | cat > $BODI_CHROOT_PATH/etc/resolv.conf <<EOF |
230 | 46 | Mehdi Abaakouk | domain tetaneutral.net |
231 | 46 | Mehdi Abaakouk | search tetaneutral.net |
232 | 1 | Mehdi Abaakouk | nameserver 8.8.8.8 |
233 | 46 | Mehdi Abaakouk | EOF |
234 | 46 | Mehdi Abaakouk | |
235 | 92 | Mehdi Abaakouk | cat > $BODI_CHROOT_PATH/etc/network/interfaces <<EOF |
236 | 6 | Mehdi Abaakouk | auto lo |
237 | 20 | Mehdi Abaakouk | iface lo inet loopback |
238 | 1 | Mehdi Abaakouk | auto eth0 |
239 | 6 | Mehdi Abaakouk | iface eth0 inet manual |
240 | 4 | Mehdi Abaakouk | pre-up /sbin/sysctl -w net.ipv6.conf.eth0.accept_ra=0 |
241 | 1 | Mehdi Abaakouk | pre-up /sbin/sysctl -w net.ipv6.conf.eth0.autoconf=0 |
242 | 4 | Mehdi Abaakouk | up ip link set eth0 up |
243 | 10 | Mehdi Abaakouk | up ip addr add 89.234.156.249/32 dev eth0 |
244 | 16 | Mehdi Abaakouk | up ip route add 91.224.148.0/32 dev eth0 |
245 | 16 | Mehdi Abaakouk | up ip route add default via 91.224.148.0 |
246 | 20 | Mehdi Abaakouk | |
247 | 1 | Mehdi Abaakouk | iface eth0 inet6 static |
248 | 7 | Mehdi Abaakouk | pre-up /sbin/sysctl -w net.ipv6.conf.eth0.accept_ra=0 |
249 | 4 | Mehdi Abaakouk | pre-up /sbin/sysctl -w net.ipv6.conf.eth0.autoconf=0 |
250 | 21 | Mehdi Abaakouk | address 2a01:6600:8083:f900::1 |
251 | 12 | Mehdi Abaakouk | netmask 56 |
252 | 4 | Mehdi Abaakouk | gateway fe80::31 |
253 | 4 | Mehdi Abaakouk | |
254 | 4 | Mehdi Abaakouk | auto eth1 |
255 | 5 | Mehdi Abaakouk | iface eth1 inet static |
256 | 13 | Mehdi Abaakouk | pre-up /sbin/sysctl -w net.ipv6.conf.eth1.accept_ra=0 |
257 | 18 | Mehdi Abaakouk | pre-up /sbin/sysctl -w net.ipv6.conf.eth1.autoconf=0 |
258 | 18 | Mehdi Abaakouk | address 192.168.3.100 |
259 | 18 | Mehdi Abaakouk | netmask 255.255.255.0 |
260 | 18 | Mehdi Abaakouk | EOF |
261 | 18 | Mehdi Abaakouk | |
262 | 18 | Mehdi Abaakouk | mkdir -p $BODI_CHROOT_PATH/root/.ssh |
263 | 59 | Mehdi Abaakouk | chmod 600 $BODI_CHROOT_PATH/root/.ssh |
264 | 59 | Mehdi Abaakouk | cat >> $BODI_CHROOT_PATH/root/.ssh/authorized_keys <<EOF |
265 | 11 | Mehdi Abaakouk | ssh-dss AAAAB3NzaC1kc3MAAACBAJtnGLvuz4uVD6fnERDxDi/C0UyzwCiKmgNtEessopREYasAX4Gu6Fg10jAyIL5Nuc7YDnqj//pOfxNjD7hp99a2ZmkRQgh/ltClxYML9fqhBHgsUCpVse9nOYDHDnDgvXIPRSDUHat2UFpdchHVrFURNLIlZnBztsr+GCDURTV/AAAAFQD9SrBcH49ltaKOm6V5ssCPmgs1SwAAAIAbAvkQ3/tMzzdACO5B9s5Yb3ZuM7XImm0iqufivVf2Xy39g8HOBulUsN7eKEGPhVriqNolgIO7q7tVgYAff4/NE4yDP0Kp0SPg4tjt2yFJuL31Y3wzwHjnKrjgNlDSLl3uZnRXSipwUMwGKbdHB6NZSqlq192VKbHilQ00pbiMlAAAAIB5dfB1lVHkJ0o5CcaVQRPbca9DvbbRwnoTSmKHc5DUcqsPqDhS07CkM9ZcJuY1Nh4wGl4Q9kArj7Tnsvvygf/HReSUcIk4+nbDytJ8/pca/Qx4fzQQyppa94TylN62LSFT6MIJKLoMwYa0dQURT7Mv5+9Qj2vk5pZ38w2iQ9zVCg== root@h1 |
266 | 4 | Mehdi Abaakouk | EOF |
267 | 4 | Mehdi Abaakouk | |
268 | 6 | Mehdi Abaakouk | sed -i -e 's/^.*Port.*$/Port 2222/' -e 's/^[# ]*PasswordAuthentication.*$/PasswordAuthentication no/' $BODI_CHROOT_PATH/etc/ssh/sshd_config |
269 | 4 | Mehdi Abaakouk | chroot $BODI_CHROOT_PATH dpkg-reconfigure openssh-server |
270 | 4 | Mehdi Abaakouk | chroot $BODI_CHROOT_PATH apt-get purge -y cloud-init* |
271 | 8 | Mehdi Abaakouk | </pre> |
272 | 1 | Mehdi Abaakouk | |
273 | 90 | Mehdi Abaakouk | <pre> |
274 | 90 | Mehdi Abaakouk | $ chmod +x hook.sh |
275 | 90 | Mehdi Abaakouk | $ 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 |
276 | 90 | Mehdi Abaakouk | $ mv debian-jessie-7.0.0-3-amd64.raw /openstack.raw |
277 | 90 | Mehdi Abaakouk | $ rm debian-jessie-7.0.0-3-amd64.qcow2 |
278 | 90 | Mehdi Abaakouk | </pre> |
279 | 90 | Mehdi Abaakouk | |
280 | 90 | Mehdi Abaakouk | _note: la derniere commande lancée par le script doit être 'qemu-img convert -c -f raw .... , sinon l'image de bootera pas_ |
281 | 90 | Mehdi Abaakouk | _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:_ |
282 | 90 | Mehdi Abaakouk | <pre> |
283 | 5 | Mehdi Abaakouk | + 'kpartx -d debian-jessie-7.0.0-3-amd64.raw' |
284 | 6 | Mehdi Abaakouk | device-mapper: remove ioctl on loop0p1 failed: Device or resource busy |
285 | 4 | Mehdi Abaakouk | loop deleted : /dev/loop0 |
286 | 4 | Mehdi Abaakouk | </pre> |
287 | 60 | Mehdi Abaakouk | _note: si parted freeze -> lancer /etc/init.d/udev restart_ |
288 | 4 | Mehdi Abaakouk | |
289 | 91 | Mehdi Abaakouk | |
290 | 91 | Mehdi Abaakouk | 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. |
291 | 19 | Mehdi Abaakouk | |
292 | 93 | Mehdi Abaakouk | h4. Préparation du réseau |
293 | 19 | Mehdi Abaakouk | |
294 | 19 | Mehdi Abaakouk | <pre> |
295 | 19 | Mehdi Abaakouk | $ modprobe vhost-net |
296 | 19 | Mehdi Abaakouk | $ ovs-vsctl add-br br-net |
297 | 19 | Mehdi Abaakouk | $ ip link set br-net up |
298 | 19 | Mehdi Abaakouk | $ ovs-vsctl br-set-external-id br-net bridge-id br-net |
299 | 24 | Mehdi Abaakouk | $ ip link set br-admin up |
300 | 24 | Mehdi Abaakouk | $ ovs-vsctl br-set-external-id br-net bridge-id br-admin |
301 | 24 | Mehdi Abaakouk | $ ovs-vsctl add-port br-admin eth0.3175 |
302 | 24 | Mehdi Abaakouk | $ ip addr add 192.168.3.101/24 dev br-admin |
303 | 24 | Mehdi Abaakouk | $ ip addr add fe80::31/64 dev br-net |
304 | 24 | Mehdi Abaakouk | $ ip route add 89.234.156.249/32 dev br-net |
305 | 24 | Mehdi Abaakouk | $ ip -6 route add 2a01:6600:8083:f900::/56 dev br-net |
306 | 19 | Mehdi Abaakouk | </pre> |
307 | 19 | Mehdi Abaakouk | |
308 | 19 | Mehdi Abaakouk | h4. Installation de la VM |
309 | 19 | Mehdi Abaakouk | |
310 | 19 | Mehdi Abaakouk | <pre> |
311 | 1 | Mehdi Abaakouk | $ virt-install --name openstack --ram 2048 --network bridge=br-net,model=virtio --network bridge=br-admin,model=virtio --nographics --serial pty --wait -1 --noreboot --autostart --disk /openstack.raw,bus=virtio,cache=none,io=native --import |
312 | 22 | Mehdi Abaakouk | $ 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 |
313 | 61 | Mehdi Abaakouk | $ 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 |
314 | 87 | Mehdi Abaakouk | $ virsh start openstack |
315 | 1 | Mehdi Abaakouk | $ ssh root@89.234.156.249 -p 2222 |
316 | 19 | Mehdi Abaakouk | </pre> |
317 | 19 | Mehdi Abaakouk | |
318 | 24 | Mehdi Abaakouk | Une fois connecté à la VM: |
319 | 26 | Mehdi Abaakouk | |
320 | 26 | Mehdi Abaakouk | <pre> |
321 | 4 | Mehdi Abaakouk | $ apt-get install puppet |
322 | 26 | Mehdi Abaakouk | $ puppet agent --enable |
323 | 32 | Mehdi Abaakouk | $ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync |
324 | 26 | Mehdi Abaakouk | Info: Caching certificate for ca |
325 | 34 | Mehdi Abaakouk | Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml |
326 | 34 | Mehdi Abaakouk | Info: Creating a new SSL certificate request for openstack.tetaneutral.net |
327 | 35 | Mehdi Abaakouk | 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 |
328 | 94 | Mehdi Abaakouk | Info: Caching certificate for ca |
329 | 35 | Mehdi Abaakouk | Exiting; no certificate found and waitforcert is disabled |
330 | 35 | Mehdi Abaakouk | </pre> |
331 | 35 | Mehdi Abaakouk | |
332 | 35 | Mehdi Abaakouk | Sur le puppetmaster: |
333 | 35 | Mehdi Abaakouk | |
334 | 35 | Mehdi Abaakouk | <pre> |
335 | 35 | Mehdi Abaakouk | $ puppet ca sign openstack.tetaneutral.net |
336 | 35 | Mehdi Abaakouk | </pre> |
337 | 35 | Mehdi Abaakouk | _note: si un vieux cert existe: puppet ca revoke openstack.tetaneutral.net ; puppet cert clean openstack.tetaneutral.net; puppet node clean openstack.tetaneutral.net_ |
338 | 35 | Mehdi Abaakouk | |
339 | 35 | Mehdi Abaakouk | De nouveau sur la VM: |
340 | 35 | Mehdi Abaakouk | |
341 | 35 | Mehdi Abaakouk | <pre> |
342 | 35 | Mehdi Abaakouk | $ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync |
343 | 35 | Mehdi Abaakouk | $ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync |
344 | 35 | Mehdi Abaakouk | $ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync |
345 | 35 | Mehdi Abaakouk | </pre> |
346 | 64 | Mehdi Abaakouk | |
347 | 35 | Mehdi Abaakouk | Il ne doit plus y avoir d'erreur la 3°/4° fois. |
348 | 35 | Mehdi Abaakouk | |
349 | 35 | Mehdi Abaakouk | h3. Configuration des hyperviseurs |
350 | 35 | Mehdi Abaakouk | |
351 | 35 | Mehdi Abaakouk | Une fois la configuration réseau faite, tout ce fait avec puppet: |
352 | 35 | Mehdi Abaakouk | |
353 | 35 | Mehdi Abaakouk | <pre> |
354 | 35 | Mehdi Abaakouk | $ apt-get install puppet |
355 | 35 | Mehdi Abaakouk | $ puppet agent --enable |
356 | 35 | Mehdi Abaakouk | $ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync |
357 | 35 | Mehdi Abaakouk | Info: Caching certificate for ca |
358 | 35 | Mehdi Abaakouk | Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml |
359 | 35 | Mehdi Abaakouk | Info: Creating a new SSL certificate request for openstack.tetaneutral.net |
360 | 35 | Mehdi Abaakouk | 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 |
361 | 35 | Mehdi Abaakouk | Info: Caching certificate for ca |
362 | 35 | Mehdi Abaakouk | Exiting; no certificate found and waitforcert is disabled |
363 | 35 | Mehdi Abaakouk | </pre> |
364 | 35 | Mehdi Abaakouk | |
365 | 101 | Mehdi Abaakouk | Sur le puppetmaster: |
366 | 35 | Mehdi Abaakouk | |
367 | 35 | Mehdi Abaakouk | <pre> |
368 | 35 | Mehdi Abaakouk | $ puppet ca sign openstack.tetaneutral.net |
369 | 35 | Mehdi Abaakouk | </pre> |
370 | 35 | Mehdi Abaakouk | _note: si un vieux cert existe: puppet ca revoke openstack.tetaneutral.net ; puppet cert clean openstack.tetaneutral.net; puppet node clean openstack.tetaneutral.net_ |
371 | 35 | Mehdi Abaakouk | |
372 | 35 | Mehdi Abaakouk | De nouveau sur la VM: |
373 | 35 | Mehdi Abaakouk | |
374 | 35 | Mehdi Abaakouk | <pre> |
375 | 35 | Mehdi Abaakouk | $ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync |
376 | 100 | Mehdi Abaakouk | $ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync |
377 | 100 | Mehdi Abaakouk | $ puppet agent -vt --server puppet.tetaneutral.net --certname openstack.tetaneutral.net --pluginsync |
378 | 100 | Mehdi Abaakouk | </pre> |
379 | 100 | Mehdi Abaakouk | |
380 | 35 | Mehdi Abaakouk | Il ne doit plus y avoir d'erreur la 3°/4° fois. |
381 | 1 | Mehdi Abaakouk | |
382 | 72 | Mehdi Abaakouk | h4. Information sur la configuration d'un hyperviseur sur le puppet master |
383 | 37 | Mehdi Abaakouk | |
384 | 38 | Mehdi Abaakouk | La configuration puppet ressemble à : |
385 | 38 | Mehdi Abaakouk | |
386 | 109 | Mehdi Abaakouk | <pre> |
387 | 1 | Mehdi Abaakouk | node "gX.tetaneutral.net" inherits openstack_node_common { |
388 | 120 | Mehdi Abaakouk | # Configuration du routerid et de l'AS number de cette machine |
389 | 1 | Mehdi Abaakouk | # Il faut aussi mettre la conf bgp de h7 ainsi que les fichiers |
390 | 1 | Mehdi Abaakouk | # /etc/puppet/manifests/files/openstack-bird.conf.erb et |
391 | 125 | Mehdi Abaakouk | # /etc/puppet/manifests/files/openstack-bird6.conf.erb |
392 | 125 | Mehdi Abaakouk | # pour ajouter cette AS interne |
393 | 97 | Mehdi Abaakouk | ttnn_os_bird {'198.51.100.1': asnum => "65001"} |
394 | 109 | Mehdi Abaakouk | |
395 | 120 | Mehdi Abaakouk | # Dans le cas d'une moniteur ceph, mais uniquement 3 suffissent, on a déjà g1,g2,g3 |
396 | 109 | Mehdi Abaakouk | ttnn_ceph_mon {$::hostname:} |
397 | 88 | Mehdi Abaakouk | # Sinon utilisait: |
398 | 88 | Mehdi Abaakouk | # class{"ttnn_ceph_osd_only": } |
399 | 109 | Mehdi Abaakouk | |
400 | 88 | Mehdi Abaakouk | # La partie Openstack, l'uuid doit être unique par machine (générer avec uuid-gen) |
401 | 109 | Mehdi Abaakouk | ttnn_os_compute {"9d26ec10-a48b-4f0f-a122-f10ed16d270f": } |
402 | 109 | Mehdi Abaakouk | } |
403 | 109 | Mehdi Abaakouk | </pre> |
404 | 109 | Mehdi Abaakouk | |
405 | 109 | Mehdi Abaakouk | h3. Déplacement du disk du controlleur dans le cluster ceph |
406 | 109 | Mehdi Abaakouk | |
407 | 97 | Mehdi Abaakouk | Les recettes puppet on créé un pool disks pour les mettres les VMs et volumes de VM |
408 | 97 | Mehdi Abaakouk | |
409 | 109 | Mehdi Abaakouk | |
410 | 97 | Mehdi Abaakouk | Sur g1, on import le disque de la VM dans ceph et on modifie la conf libvirt: |
411 | 97 | Mehdi Abaakouk | |
412 | 109 | Mehdi Abaakouk | <pre> |
413 | 111 | Mehdi Abaakouk | $ virsh shutdown openstack |
414 | 120 | Mehdi Abaakouk | $ rbd -p disks import /var/lib/ceph/osd/ceph-0/openstack.raw openstack-disk |
415 | 109 | Mehdi Abaakouk | $ virsh edit openstack |
416 | 109 | Mehdi Abaakouk | </pre> |
417 | 109 | Mehdi Abaakouk | |
418 | 109 | Mehdi Abaakouk | Remplacer: |
419 | 112 | Mehdi Abaakouk | <pre> |
420 | 109 | Mehdi Abaakouk | <disk type='file' device='disk'> |
421 | 109 | Mehdi Abaakouk | <driver name='qemu' type='raw' cache='none' io='native'/> |
422 | 109 | Mehdi Abaakouk | <source file='/var/lib/ceph/osd/ceph-0/openstack.raw'/> |
423 | 110 | Mehdi Abaakouk | <target dev='vda' bus='virtio'/> |
424 | 109 | Mehdi Abaakouk | <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> |
425 | 97 | Mehdi Abaakouk | </disk> |
426 | 97 | Mehdi Abaakouk | </pre> |
427 | 109 | Mehdi Abaakouk | |
428 | 97 | Mehdi Abaakouk | Par: |
429 | 97 | Mehdi Abaakouk | |
430 | 109 | Mehdi Abaakouk | <pre> |
431 | 109 | Mehdi Abaakouk | <disk type='network' device='disk'> |
432 | 109 | Mehdi Abaakouk | <driver name='qemu' type='raw'/> |
433 | 109 | Mehdi Abaakouk | <source protocol='rbd' name='disks/openstack-disk'> |
434 | 97 | Mehdi Abaakouk | <host name='192.168.3.101' port='6789'/> |
435 | 97 | Mehdi Abaakouk | <host name='192.168.3.102' port='6789'/> |
436 | 109 | Mehdi Abaakouk | <host name='192.168.3.103' port='6789'/> |
437 | 97 | Mehdi Abaakouk | </source> |
438 | 97 | Mehdi Abaakouk | <auth username='openstack-service'> |
439 | 109 | Mehdi Abaakouk | <secret type='ceph' uuid='1fe74663-8dfa-486c-bb80-3bd94c90c967'/> |
440 | 97 | Mehdi Abaakouk | </auth> |
441 | 97 | Mehdi Abaakouk | <target dev='vda' bus='virtio'/> |
442 | 97 | Mehdi Abaakouk | <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> |
443 | 97 | Mehdi Abaakouk | </disk> |
444 | 97 | Mehdi Abaakouk | </pre> |
445 | 97 | Mehdi Abaakouk | |
446 | 97 | Mehdi Abaakouk | La clé ceph pour libvirt a déjà été installé par puppet pour avoir sont uuid: |
447 | 97 | Mehdi Abaakouk | |
448 | 97 | Mehdi Abaakouk | <pre> |
449 | 97 | Mehdi Abaakouk | $ virsh secret-list |
450 | 97 | Mehdi Abaakouk | UUID Usage |
451 | 97 | Mehdi Abaakouk | -------------------------------------------------------------------------------- |
452 | 97 | Mehdi Abaakouk | 1fe74663-8dfa-486c-bb80-3bd94c90c967 ceph client.openstack-service secret |
453 | 97 | Mehdi Abaakouk | </pre> |
454 | 97 | Mehdi Abaakouk | |
455 | 97 | Mehdi Abaakouk | Puis on démarre |
456 | 97 | Mehdi Abaakouk | |
457 | 97 | Mehdi Abaakouk | <pre> |
458 | 97 | Mehdi Abaakouk | $ virsh start openstack |
459 | 97 | Mehdi Abaakouk | </pre> |
460 | 97 | Mehdi Abaakouk | |
461 | 97 | Mehdi Abaakouk | |
462 | 97 | Mehdi Abaakouk | Ca marche ! |
463 | 97 | Mehdi Abaakouk | |
464 | 97 | Mehdi Abaakouk | <pre> |
465 | 68 | Mehdi Abaakouk | $ ssh openstack.t |
466 | 68 | Mehdi Abaakouk | X11 forwarding request failed on channel 0 |
467 | 68 | Mehdi Abaakouk | |
468 | 68 | Mehdi Abaakouk | server: openstack.tetaneutral.net |
469 | 102 | Mehdi Abaakouk | system: Debian jessie/sid, kernel 3.14-2-amd64, puppet 3.6.1 |
470 | 1 | Mehdi Abaakouk | cpu: 1/1 (QEMU Virtual CPU version 2.1.0) |
471 | 102 | Mehdi Abaakouk | memory: 1.96 GB |
472 | 1 | Mehdi Abaakouk | |
473 | 102 | Mehdi Abaakouk | eth0: 52:54:00:90:d8:c7 / 89.234.156.249 / 2a01:6600:8083:f900::1 |
474 | 102 | Mehdi Abaakouk | eth1: 52:54:00:13:fa:13 / 192.168.3.100 |
475 | 68 | Mehdi Abaakouk | |
476 | 68 | Mehdi Abaakouk | modules: openstack_node_common ttnn::server resolver checkmk::agent checkmk::client rsyslog::client rsyslog apt apt::update puppet nullmailer backup::client sexymotd |
477 | 68 | Mehdi Abaakouk | _ _ |
478 | 68 | Mehdi Abaakouk | ___ _ __ ___ _ __ ___| |_ __ _ ___| | __ |
479 | 68 | Mehdi Abaakouk | / _ \| '_ \ / _ \ '_ \/ __| __/ _` |/ __| |/ / |
480 | 68 | Mehdi Abaakouk | | (_) | |_) | __/ | | \__ \ || (_| | (__| < |
481 | 68 | Mehdi Abaakouk | \___/| .__/ \___|_| |_|___/\__\__,_|\___|_|\_\ |
482 | 68 | Mehdi Abaakouk | |_| |
483 | 68 | Mehdi Abaakouk | Last login: Wed Aug 27 08:10:02 2014 from atoulouse-652-1-119-50.w2-6.abo.wanadoo.fr |
484 | 68 | Mehdi Abaakouk | root@openstack:~# |
485 | 68 | Mehdi Abaakouk | |
486 | 68 | Mehdi Abaakouk | </pre> |
487 | 68 | Mehdi Abaakouk | |
488 | 68 | Mehdi Abaakouk | h2. Preparation des OSD pour ceph |
489 | 68 | Mehdi Abaakouk | |
490 | 68 | Mehdi Abaakouk | h3. Cas général un disque entier: |
491 | 68 | Mehdi Abaakouk | |
492 | 68 | Mehdi Abaakouk | $ ceph-disk prepare /dev/sdb |
493 | 68 | Mehdi Abaakouk | $ ceph-disk activate /dev/sdb |
494 | 68 | Mehdi Abaakouk | |
495 | 1 | Mehdi Abaakouk | h3. Cas particulier du SSD ou ce trouve l'OS |
496 | 68 | Mehdi Abaakouk | |
497 | 103 | Mehdi Abaakouk | En général avec ceph, on donne un disque, ceph créé 2 partitions une pour le journal de l'OSD, l'autre pour les datas |
498 | 1 | Mehdi Abaakouk | mais pour le SSD de tetaneutral qui a aussi l'OS, voici la méthode |
499 | 34 | Mehdi Abaakouk | |
500 | 103 | Mehdi Abaakouk | Création manuelle de la partition de data ceph /dev/sda2 ici |
501 | 102 | Mehdi Abaakouk | |
502 | 1 | Mehdi Abaakouk | <pre> |
503 | 1 | Mehdi Abaakouk | $ fdisk /dev/sda |
504 | 102 | Mehdi Abaakouk | |
505 | 102 | Mehdi Abaakouk | n |
506 | 102 | Mehdi Abaakouk | p |
507 | 102 | Mehdi Abaakouk | <enter> |
508 | 102 | Mehdi Abaakouk | <enter> |
509 | 102 | Mehdi Abaakouk | <enter> |
510 | 102 | Mehdi Abaakouk | <enter> |
511 | 104 | Mehdi Abaakouk | w |
512 | 104 | Mehdi Abaakouk | |
513 | 104 | Mehdi Abaakouk | $ partprobe |
514 | 104 | Mehdi Abaakouk | </pre> |
515 | 104 | Mehdi Abaakouk | |
516 | 104 | Mehdi Abaakouk | On prepare le disk comme normalement |
517 | 105 | Mehdi Abaakouk | |
518 | 104 | Mehdi Abaakouk | <pre> |
519 | 104 | Mehdi Abaakouk | ceph-disk prepare /dev/sda2 |
520 | 106 | Mehdi Abaakouk | ceph-disk activate /dev/sda2 |
521 | 104 | Mehdi Abaakouk | </pre> |
522 | 104 | Mehdi Abaakouk | |
523 | 116 | Mehdi Abaakouk | Le disque n'étant pas utilisé uniquement par ceph, le service ceph ne le chargera pas automatiquement: |
524 | 116 | Mehdi Abaakouk | Il faut ajouter ceci dans le /etc/rc.local: |
525 | 116 | Mehdi Abaakouk | |
526 | 116 | Mehdi Abaakouk | <pre> |
527 | 116 | Mehdi Abaakouk | ceph-disk activate /dev/sda2 |
528 | 116 | Mehdi Abaakouk | </pre> |
529 | 116 | Mehdi Abaakouk | |
530 | 116 | Mehdi Abaakouk | 3. Suppression OSD: |
531 | 116 | Mehdi Abaakouk | |
532 | 116 | Mehdi Abaakouk | <pre> |
533 | 116 | Mehdi Abaakouk | name="osd.2" |
534 | 116 | Mehdi Abaakouk | ceph osd out ${name} |
535 | 116 | Mehdi Abaakouk | /etc/init.d/ceph stop ${name} |
536 | 116 | Mehdi Abaakouk | ceph osd crush remove ${name} |
537 | 116 | Mehdi Abaakouk | ceph auth del ${name} |
538 | 116 | Mehdi Abaakouk | ceph osd rm ${name} |
539 | 116 | Mehdi Abaakouk | ceph osd tree |
540 | 116 | Mehdi Abaakouk | </pre> |
541 | 116 | Mehdi Abaakouk | |
542 | 116 | Mehdi Abaakouk | h2. Configuration des Placements Groups des pools: |
543 | 116 | Mehdi Abaakouk | |
544 | 116 | Mehdi Abaakouk | Par défaut les pools sont créés avec des placements groups à 8 (pg_num=8), 3 replicats dont 2 "synchrones (dans le sens ack de l'IO au client)" |
545 | 116 | Mehdi Abaakouk | |
546 | 116 | Mehdi Abaakouk | Mais cette valeur (pg_num) défini le bon fonctionnement de ceph. Dans le cas standard (ie: 1 seul pool) la recette est facile: |
547 | 116 | Mehdi Abaakouk | |
548 | 116 | Mehdi Abaakouk | <pre> |
549 | 116 | Mehdi Abaakouk | (OSDs * 100) |
550 | 116 | Mehdi Abaakouk | Total PGs = ( ------------ ) |
551 | 116 | Mehdi Abaakouk | OSD per object |
552 | 116 | Mehdi Abaakouk | </pre> |
553 | 116 | Mehdi Abaakouk | |
554 | 116 | Mehdi Abaakouk | On arrondi à la puissance de 2 supperieurs. Mais dans notre cas 3 pools ce n'est pas si simple, les pools auront des cas d'utilisation différent: |
555 | 116 | Mehdi Abaakouk | |
556 | 116 | Mehdi Abaakouk | Ma proposition de configuration: |
557 | 107 | Mehdi Abaakouk | * Pool ssds: il a 3 OSDs pour lui tout seul, on applique la recette magique: 3*100/3 ~= 128 pgs |
558 | 1 | Mehdi Abaakouk | * Pools images et disks: ils ont 3 OSDs à ce partager donc il faut répartir les 128 pgs. soit 32pgs et 96pgs (PS: il faut au moins 20pgs pour 3 réplicats) |
559 | 69 | Mehdi Abaakouk | |
560 | 1 | Mehdi Abaakouk | Soit: |
561 | 1 | Mehdi Abaakouk | <pre> |
562 | 79 | Mehdi Abaakouk | ceph osd pool set ssds pg_num 128 |
563 | 1 | Mehdi Abaakouk | ceph osd pool set images pg_num 32 |
564 | 1 | Mehdi Abaakouk | ceph osd pool set disks pg_num 96 |
565 | 1 | Mehdi Abaakouk | |
566 | 1 | Mehdi Abaakouk | # attendre un peu qu'il y est plus de pg_create dans 'ceph -s' |
567 | 121 | Mehdi Abaakouk | ceph osd pool set ssds pgp_num 128 |
568 | 121 | Mehdi Abaakouk | ceph osd pool set images pgp_num 32 |
569 | 121 | Mehdi Abaakouk | ceph osd pool set disks pgp_num 96 |
570 | 121 | Mehdi Abaakouk | </pre> |
571 | 1 | Mehdi Abaakouk | |
572 | 107 | Mehdi Abaakouk | |
573 | 1 | Mehdi Abaakouk | |
574 | 107 | Mehdi Abaakouk | _ref: http://ceph.com/docs/master/rados/operations/placement-groups/_ |
575 | 107 | Mehdi Abaakouk | |
576 | 1 | Mehdi Abaakouk | h2. Preparation du Pool SSD pour ceph |
577 | 107 | Mehdi Abaakouk | |
578 | 107 | Mehdi Abaakouk | Chaque machine se trouve dans 2 hosts, un host SSD et un host HARDDISK (même si en réalité les deux sont sur la même machine physique), |
579 | 107 | Mehdi Abaakouk | |
580 | 107 | Mehdi Abaakouk | Ensuite on créé 2 object root un pour les hosts SSD et un autre pour les host HARDDISK |
581 | 107 | Mehdi Abaakouk | |
582 | 107 | Mehdi Abaakouk | On créé ensuite 2 règles de stockage une qui envoie les objects vers le root SSD et l'autre vers le root HARDDISK |
583 | 107 | Mehdi Abaakouk | |
584 | 107 | Mehdi Abaakouk | Cela permettra d'avoir de définir une règle différente suivant les pools ceph. |
585 | 107 | Mehdi Abaakouk | |
586 | 107 | Mehdi Abaakouk | Niveau Openstack nous avons 3 pools: |
587 | 107 | Mehdi Abaakouk | * disks: Ce pool aura les disques de VM et les volumes attaché |
588 | 107 | Mehdi Abaakouk | * ssds: Ce pool contiendra les volumes sur ssd |
589 | 107 | Mehdi Abaakouk | * images: c'est la que seront stocké les images de VMs (glance). |
590 | 122 | Mehdi Abaakouk | |
591 | 122 | Mehdi Abaakouk | h3. Configuration de la crushmap de ceph: |
592 | 122 | Mehdi Abaakouk | |
593 | 122 | Mehdi Abaakouk | Création de l'arbre de ragnement physique des SSD, l'arbre nommé 'default' sera donc celui des disques durs |
594 | 122 | Mehdi Abaakouk | |
595 | 122 | Mehdi Abaakouk | <pre> |
596 | 122 | Mehdi Abaakouk | $ ceph osd crush add-bucket ssd root |
597 | 122 | Mehdi Abaakouk | $ ceph osd crush add-bucket g1-ssd host |
598 | 122 | Mehdi Abaakouk | $ ceph osd crush add-bucket g2-ssd host |
599 | 122 | Mehdi Abaakouk | $ ceph osd crush add-bucket g3-ssd host |
600 | 1 | Mehdi Abaakouk | $ ceph osd crush move g1-ssd root=ssd |
601 | 1 | Mehdi Abaakouk | $ ceph osd crush move g2-ssd root=ssd |
602 | 1 | Mehdi Abaakouk | $ ceph osd crush move g3-ssd root=ssd |
603 | 107 | Mehdi Abaakouk | $ ceph osd tree |
604 | 107 | Mehdi Abaakouk | # id weight type name up/down reweight |
605 | 1 | Mehdi Abaakouk | -5 0 root ssd |
606 | 118 | Mehdi Abaakouk | -6 0 host g1-ssd |
607 | 118 | Mehdi Abaakouk | -7 0 host g2-ssd |
608 | 118 | Mehdi Abaakouk | -8 0 host g3-ssd |
609 | 118 | Mehdi Abaakouk | -1 3 root default |
610 | 117 | Mehdi Abaakouk | -2 1 host g1 |
611 | 117 | Mehdi Abaakouk | 0 1 osd.0 up 1 |
612 | 117 | Mehdi Abaakouk | 3 1 osd.3 up 1 |
613 | 118 | Mehdi Abaakouk | -3 1 host g2 |
614 | 118 | Mehdi Abaakouk | 1 1 osd.1 up 1 |
615 | 107 | Mehdi Abaakouk | 4 1 osd.4 up 1 |
616 | 107 | Mehdi Abaakouk | -4 1 host g3 |
617 | 122 | Mehdi Abaakouk | 2 1 osd.2 up 1 |
618 | 122 | Mehdi Abaakouk | 5 1 osd.5 up 1 |
619 | 122 | Mehdi Abaakouk | </pre> |
620 | 122 | Mehdi Abaakouk | |
621 | 122 | Mehdi Abaakouk | |
622 | 122 | Mehdi Abaakouk | On range les osd qui ont des disques SSD dans ce nouvel arbre. |
623 | 122 | Mehdi Abaakouk | |
624 | 122 | Mehdi Abaakouk | <pre> |
625 | 122 | Mehdi Abaakouk | $ ceph osd crush add osd.3 1 root=ssd host=g1-ssd |
626 | 122 | Mehdi Abaakouk | $ ceph osd crush add osd.4 1 root=ssd host=g2-ssd |
627 | 122 | Mehdi Abaakouk | $ ceph osd crush add osd.5 1 root=ssd host=g3-ssd |
628 | 122 | Mehdi Abaakouk | # Ou si l'osd a déjà éte positionné une fois |
629 | 122 | Mehdi Abaakouk | $ ceph osd crush set osd.3 1 root=ssd host=g1-ssd |
630 | 122 | Mehdi Abaakouk | $ ceph osd crush set osd.4 1 root=ssd host=g2-ssd |
631 | 96 | Mehdi Abaakouk | $ ceph osd crush set osd.5 1 root=ssd host=g3-ssd |
632 | 96 | Mehdi Abaakouk | |
633 | 108 | Mehdi Abaakouk | # Vérifier le résultat |
634 | 107 | Mehdi Abaakouk | $ ceph osd tree |
635 | 96 | Mehdi Abaakouk | # id weight type name up/down reweight |
636 | 96 | Mehdi Abaakouk | -5 3 root ssd |
637 | 121 | Mehdi Abaakouk | -6 1 host g1-ssd |
638 | 96 | Mehdi Abaakouk | 3 1 osd.3 up 1 |
639 | 107 | Mehdi Abaakouk | -7 1 host g2-ssd |
640 | 107 | Mehdi Abaakouk | 4 1 osd.4 up 1 |
641 | 107 | Mehdi Abaakouk | -8 1 host g3-ssd |
642 | 107 | Mehdi Abaakouk | 5 1 osd.5 up 1 |
643 | 107 | Mehdi Abaakouk | -1 3 root default |
644 | 107 | Mehdi Abaakouk | -2 1 host g1 |
645 | 107 | Mehdi Abaakouk | 0 1 osd.0 up 1 |
646 | 107 | Mehdi Abaakouk | -3 1 host g2 |
647 | 107 | Mehdi Abaakouk | 1 1 osd.1 up 1 |
648 | 107 | Mehdi Abaakouk | -4 1 host g3 |
649 | 107 | Mehdi Abaakouk | 2 1 osd.2 up 1 |
650 | 107 | Mehdi Abaakouk | </pre> |
651 | 107 | Mehdi Abaakouk | |
652 | 107 | Mehdi Abaakouk | |
653 | 107 | Mehdi Abaakouk | h3. Definition de la crushmap de ttnn |
654 | 107 | Mehdi Abaakouk | |
655 | 107 | Mehdi Abaakouk | |
656 | 107 | Mehdi Abaakouk | Une fois la crushmap modifié on créée et applique la règle sur le pool ssds: |
657 | 107 | Mehdi Abaakouk | |
658 | 107 | Mehdi Abaakouk | <pre> |
659 | 107 | Mehdi Abaakouk | $ ceph osd crush rule create-simple ssd_replicated_ruleset ssd host firstn |
660 | 107 | Mehdi Abaakouk | $ ceph osd crush rule dump |
661 | 107 | Mehdi Abaakouk | [ |
662 | 107 | Mehdi Abaakouk | { "rule_id": 0, |
663 | 107 | Mehdi Abaakouk | "rule_name": "replicated_ruleset", |
664 | 1 | Mehdi Abaakouk | "ruleset": 0, |
665 | 107 | Mehdi Abaakouk | "type": 1, |
666 | 107 | Mehdi Abaakouk | "min_size": 1, |
667 | 107 | Mehdi Abaakouk | "max_size": 10, |
668 | 107 | Mehdi Abaakouk | "steps": [ |
669 | 107 | Mehdi Abaakouk | { "op": "take", |
670 | 107 | Mehdi Abaakouk | "item": -1, |
671 | 1 | Mehdi Abaakouk | "item_name": "default"}, |
672 | 121 | Mehdi Abaakouk | { "op": "chooseleaf_firstn", |
673 | 1 | Mehdi Abaakouk | "num": 0, |
674 | 1 | Mehdi Abaakouk | "type": "host"}, |
675 | 107 | Mehdi Abaakouk | { "op": "emit"}]}, |
676 | 1 | Mehdi Abaakouk | { "rule_id": 1, |
677 | 1 | Mehdi Abaakouk | "rule_name": "ssd_replicated_ruleset", |
678 | 107 | Mehdi Abaakouk | "ruleset": 1, |
679 | 1 | Mehdi Abaakouk | "type": 1, |
680 | 1 | Mehdi Abaakouk | "min_size": 1, |
681 | 1 | Mehdi Abaakouk | "max_size": 10, |
682 | 113 | Mehdi Abaakouk | "steps": [ |
683 | 114 | Mehdi Abaakouk | { "op": "take", |
684 | 1 | Mehdi Abaakouk | "item": -5, |
685 | 114 | Mehdi Abaakouk | "item_name": "ssd"}, |
686 | 113 | Mehdi Abaakouk | { "op": "chooseleaf_firstn", |
687 | 113 | Mehdi Abaakouk | "num": 0, |
688 | 113 | Mehdi Abaakouk | "type": "host"}, |
689 | 113 | Mehdi Abaakouk | { "op": "emit"}]}] |
690 | 113 | Mehdi Abaakouk | |
691 | 113 | Mehdi Abaakouk | $ ceph osd pool set ssds crush_ruleset 1 |
692 | 113 | Mehdi Abaakouk | </pre> |
693 | 1 | Mehdi Abaakouk | |
694 | 114 | Mehdi Abaakouk | Il faut ensuite attendre que ceph redistribue les data comme on lui a demandé, on peut suivre l'avancement avec : |
695 | 114 | Mehdi Abaakouk | |
696 | 114 | Mehdi Abaakouk | <pre> |
697 | 114 | Mehdi Abaakouk | ceph -s |
698 | 114 | Mehdi Abaakouk | </pre> |
699 | 115 | Mehdi Abaakouk | |
700 | 115 | Mehdi Abaakouk | h2. Management d'openstack |
701 | 114 | Mehdi Abaakouk | |
702 | 114 | Mehdi Abaakouk | h2. Maintenant de la VM de management |
703 | 114 | Mehdi Abaakouk | |
704 | 114 | Mehdi Abaakouk | h3. Live Migration d'un host à l'autre |
705 | 114 | Mehdi Abaakouk | |
706 | 114 | Mehdi Abaakouk | Cela fait tout à notre place niveau kvm/libvirt/ceph |
707 | 114 | Mehdi Abaakouk | |
708 | 114 | Mehdi Abaakouk | <pre> |
709 | 114 | Mehdi Abaakouk | virsh migrate --persistent --undefinesource --live --p2p openstack qemu+ssh://g2:2222/system |
710 | 114 | Mehdi Abaakouk | </pre> |
711 | 114 | Mehdi Abaakouk | |
712 | 114 | Mehdi Abaakouk | Pour le réseau le service/script 'tetaneutral-openstack-routing-daemon.sh' s'occupe de basculer les routes automatiquement. |
713 | 114 | Mehdi Abaakouk | |
714 | 114 | Mehdi Abaakouk | h3. Recover depuis une perte de la machine hote: |
715 | 114 | Mehdi Abaakouk | |
716 | 114 | Mehdi Abaakouk | Créé un fichier openstack.xml à partir d'un backup de '/etc/libvirt/qemu/openstack.xml' ou utiliser l'exemple ci-dessous: |
717 | 114 | Mehdi Abaakouk | |
718 | 114 | Mehdi Abaakouk | _Note: il faut surement viré les uuid des interfaces openvswitch qui sont différent suivant le hosts_ |
719 | 114 | Mehdi Abaakouk | |
720 | 114 | Mehdi Abaakouk | <pre> |
721 | 114 | Mehdi Abaakouk | <domain type='kvm'> |
722 | 114 | Mehdi Abaakouk | <name>openstack</name> |
723 | 114 | Mehdi Abaakouk | <uuid>8ff46696-7b94-6d0b-7022-edbcf88648c0</uuid> |
724 | 114 | Mehdi Abaakouk | <memory unit='KiB'>2097152</memory> |
725 | 114 | Mehdi Abaakouk | <currentMemory unit='KiB'>2097152</currentMemory> |
726 | 114 | Mehdi Abaakouk | <vcpu placement='static'>1</vcpu> |
727 | 114 | Mehdi Abaakouk | <os> |
728 | 124 | Mehdi Abaakouk | <type arch='x86_64' machine='pc-i440fx-2.1'>hvm</type> |
729 | 114 | Mehdi Abaakouk | <boot dev='hd'/> |
730 | 114 | Mehdi Abaakouk | </os> |
731 | 114 | Mehdi Abaakouk | <features> |
732 | 114 | Mehdi Abaakouk | <acpi/> |
733 | 114 | Mehdi Abaakouk | <apic/> |
734 | 114 | Mehdi Abaakouk | <pae/> |
735 | 114 | Mehdi Abaakouk | </features> |
736 | 114 | Mehdi Abaakouk | <clock offset='utc'/> |
737 | 114 | Mehdi Abaakouk | <on_poweroff>destroy</on_poweroff> |
738 | 114 | Mehdi Abaakouk | <on_reboot>restart</on_reboot> |
739 | 114 | Mehdi Abaakouk | <on_crash>restart</on_crash> |
740 | 114 | Mehdi Abaakouk | <devices> |
741 | 114 | Mehdi Abaakouk | <emulator>/usr/bin/kvm</emulator> |
742 | 114 | Mehdi Abaakouk | <disk type='network' device='disk'> |
743 | 114 | Mehdi Abaakouk | <driver name='qemu' type='raw'/> |
744 | 114 | Mehdi Abaakouk | <auth username='openstack-service'> |
745 | 114 | Mehdi Abaakouk | <secret type='ceph' uuid='1fe74663-8dfa-486c-bb80-3bd94c90c967'/> |
746 | 114 | Mehdi Abaakouk | </auth> |
747 | 114 | Mehdi Abaakouk | <source protocol='rbd' name='disks/openstack-disk'/> |
748 | 114 | Mehdi Abaakouk | <target dev='vda' bus='virtio'/> |
749 | 114 | Mehdi Abaakouk | <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> |
750 | 114 | Mehdi Abaakouk | </disk> |
751 | 114 | Mehdi Abaakouk | <controller type='usb' index='0'> |
752 | 114 | Mehdi Abaakouk | <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> |
753 | 114 | Mehdi Abaakouk | </controller> |
754 | 114 | Mehdi Abaakouk | <controller type='pci' index='0' model='pci-root'/> |
755 | 114 | Mehdi Abaakouk | <interface type='bridge'> |
756 | 114 | Mehdi Abaakouk | <mac address='52:54:00:90:d8:c7'/> |
757 | 114 | Mehdi Abaakouk | <source bridge='br-net'/> |
758 | 114 | Mehdi Abaakouk | <virtualport type='openvswitch'> |
759 | 114 | Mehdi Abaakouk | <parameters interfaceid='f0c8bfd0-36e3-46fb-974e-9dbe8d501c19'/> |
760 | 114 | Mehdi Abaakouk | </virtualport> |
761 | 114 | Mehdi Abaakouk | <model type='virtio'/> |
762 | 114 | Mehdi Abaakouk | <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> |
763 | 114 | Mehdi Abaakouk | </interface> |
764 | 114 | Mehdi Abaakouk | <interface type='bridge'> |
765 | 114 | Mehdi Abaakouk | <mac address='52:54:00:13:fa:13'/> |
766 | 114 | Mehdi Abaakouk | <source bridge='br-admin'/> |
767 | 114 | Mehdi Abaakouk | <virtualport type='openvswitch'> |
768 | 114 | Mehdi Abaakouk | <parameters interfaceid='25b32029-968f-49a0-aa04-45baf5c443c6'/> |
769 | 114 | Mehdi Abaakouk | </virtualport> |
770 | 114 | Mehdi Abaakouk | <model type='virtio'/> |
771 | 114 | Mehdi Abaakouk | <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> |
772 | 114 | Mehdi Abaakouk | </interface> |
773 | 114 | Mehdi Abaakouk | <serial type='pty'> |
774 | 1 | Mehdi Abaakouk | <target port='0'/> |
775 | 1 | Mehdi Abaakouk | </serial> |
776 | 1 | Mehdi Abaakouk | <console type='pty'> |
777 | 1 | Mehdi Abaakouk | <target type='serial' port='0'/> |
778 | 1 | Mehdi Abaakouk | </console> |
779 | 1 | Mehdi Abaakouk | <memballoon model='virtio'> |
780 | 1 | Mehdi Abaakouk | <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> |
781 | 1 | Mehdi Abaakouk | </memballoon> |
782 | 1 | Mehdi Abaakouk | </devices> |
783 | 1 | Mehdi Abaakouk | </domain> |
784 | 1 | Mehdi Abaakouk | </pre> |
785 | 1 | Mehdi Abaakouk | |
786 | 1 | Mehdi Abaakouk | |
787 | 1 | Mehdi Abaakouk | Puis on recréé la VM |
788 | 1 | Mehdi Abaakouk | |
789 | 1 | Mehdi Abaakouk | <pre> |
790 | 1 | Mehdi Abaakouk | $ virsh create openstack.xml |
791 | 1 | Mehdi Abaakouk | $ virsh start openstack.xml |
792 | 1 | Mehdi Abaakouk | </pre> |