Daily Archives: June 11, 2018

Upgrade Openstack de la Liberty la Queens

Pentru upgrade-ul cluster-ului vom trece prin fiecare release în parte, dar nu vom face upgrade fiecărui serviciu
la acel release, în afară de Ocata și Queens.

Liberty –> Mitaka.
Singurul serviciu care are nevoie de upgrade la Liberty la Mitaka este Nova, dar este nevoie de un pas manual aici.
În primul rând se închid toate serviciile, atât pe controller cât și pe node-urile de compute.
1. Se face upgrade la Mitaka pe controller.
1.1 Se șterge repository-ul de Liberty (oricum nu mai este actual).
yum remove centos-release-openstack-liberty

 
1.2 Se instalează un repository de Mitaka, îl putem folosi pe acesta:
yum-config-manager –add-repo http://distro.ctinetworks.com/distro/mirror/centos/7.3.1611/cloud/x86_64/openstack-mitaka/
dar va trebuie dat argumentul –nogpgcheck la install, deoarece repository-ul nu are chei.

 
1.3 Se face update la endpoint-uri, deocamdată ele arată așa:
http://controller:8774/v2/%\(tenant_id\)s
Noile endpoint-uri vor fi de forma:
http://controller:8774/v2.1/%\(tenant_id\)s
Pentru a modifica endpoint-urile se caută id-urile folosind coamanda:
openstack endpoint list | grep compute, și se ia fiecare ID în parte și se dă mai departe
la comanda:
openstack endpoint set –url http://controller:8774/v2.1/%\(tenant_id\)s <id>

 
1.4 Se face update la serviciile ce compun Nova:
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler –nogpgcheck

 
1.5 Se face update la config.
Cea mai importantă schimbare este modul în care se face conexiunea la baza de date.
Sub header-ul [database] va fi de forma:
connection = mysql+pymysql://nova:NOVA_PASS@controller/nova
Sub header-ul [api_database] va fi de forma:
connection = mysql+pymysql://nova:NOVA_PASS@controller/nova_api
În rest, se folosește fișierul de configurare de la Mitaka pentru a găsi ce elemente de configurare
sunt de actualitate și care sunt învechite:
https://docs.openstack.org/mitaka/config-reference/compute/config-options.html

 
1.6 Se face sincronizarea bazei de date:
su -s /bin/sh -c “nova-manage api_db sync” nova
su -s /bin/sh -c “nova-manage db sync” nova

 
2. Se face update la Mitaka pe node-uri de compute:
2.1 Se șterge repository-ul de la Liberty:
yum remove centos-release-openstack-liberty

 
2.2 Se instalează un repository de Mitaka:
yum-config-manager –add-repo http://distro.ctinetworks.com/distro/mirror/centos/7.3.1611/cloud/x86_64/openstack-mitaka/

 
2.3 Se face upgrade la pachete:
yum install openstack-nova-compute python2-os-brick –nogpgcheck

 
2.4 Se actualizează fișierul de configurare folosind template-ul de mai sus.

 
3. Se deschid doar serviciile ce compun Nova atât pe controller cât și pe node-urile de compute.
Motivul pentru care este necesară redeschiderea serviciului de compute este schimbarea pe care o aduce
Mitaka bazei de date. Aceasta adaugă o coloană în tabela compute_nodes din baza de date nova numită uuid.
Dacă node-urile de compune nu se conectează iar la controller acest câmp va rămâne gol, ceea ce va creea probleme
la upgrade-ul către Newton, deoarece orice intrare în baza de date cu uuid=NULL va trebui șteargă înainte de sincronizare.

 
4. Se închide Nova atât pe controller cât și pe compute-uri.

 

Mitaka –> Newton
Se șterge repository-ul de Mitaka:
rm -f /etc/yum.repos.d/distro.ctinetworks.com_distro_mirror_centos_7.3.1611_cloud_x86_64_openstack-mitaka.repo
Se adaugă repository-ul de Newton
yum-config-manager –add-repo http://distro.ctinetworks.com/distro/mirror/centos/7.3.1611/cloud/x86_64/openstack-newton/

 

[Cinder]
1. Se face upgrade la Cinder pe controller:
1.1 Se face upgrade la pachete:
yum install openstack-cinder python2-os-brick –nogpgcheck

 
1.2 Se actualizează fișierul de configurare.
https://docs.openstack.org/newton/config-reference/block-storage/samples/cinder.conf.html
O schimbare importantă care este bine să fie făcută, chiar dacă opțională în acest release, este modul în care
serviciile se conectează la coada de mesaje.
De la Newton în prezent se face în felul următor. Sub [DEFAULT] se pune:
transport_url = rabbit://RABBIT_USER:RABBIT_PASSWORD@controller

 
1.3 Deoarece o funcție din sqlalchemy caută un parametru de config care nu există în Cinder, trebuie făcut un fix.
vim /usr/lib/python2.7/site-packages/cinder/db/sqlalchemy/api.py
La linia 89 se adaugă un `if hasattr(CONF, ‘profiler’):` peste acel bloc mic de cod.

 
1.4 Se sincronizează baza de date:
su -s /bin/sh -c “cinder-manage db sync” cinder

 

[Nova]
2. Se face upgrade la Nova pe controller:
2.1 Se face upgrade la pachete:

yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler –nogpgcheck

 
2.2 Se face update la fișierul de configurare. Noul template este:
https://docs.openstack.org/newton/config-reference/compute/config-options.html

 
2.3 Se sincronizează bazele de date și se fac migrări în ele:
su -s /bin/sh -c “nova-manage api_db sync” nova
su -s /bin/sh -c “nova-manage db sync” nova
su -s /bin/sh -c “nova-manage db online_data_migrations” nova

 

[Neutron]
3.1 Se face upgrade la pachete:
yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-openvswitch ebtables openstack-neutron-vpnaas openstack-neutron-fwaas \
openstack-neutron-lbaas openstack-neutron-metering-agent python2-pecan –nogpgcheck

 
3.2 Se actualizează fișierele de configurare.
https://docs.openstack.org/newton/config-reference/networking/samples/index.html

 
3.3 Se sincronizează baza de date:
su -s /bin/sh -c “neutron-db-manage –config-file /etc/neutron/neutron.conf \
–config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head” neutron

 

Newton –> Ocata
Se șterge repository-ul de Newton:
rm -f /etc/yum.repos.d/distro.ctinetworks.com_distro_mirror_centos_7.3.1611_cloud_x86_64_openstack-newton_.repo
Se adaugă repository-ul de Ocata
yum install centos-release-openstack-ocata

 

[Glance]
1.1 Se face upgrade la pachete:
yum install openstack-glance python-osprofiler

 
1.2 Se actualizează fișierul de configurare.
https://docs.openstack.org/ocata/config-reference/image/sample-configuration-files.html

 
1.3 Se sincronizează baza de date:
su -s /bin/sh -c “glance-manage db_sync” glance

 

[Keystone]
2.1 Se face update la endpoint-uri, deocamdată ele arată așa:
public: http://controller:5000/v2.0
internal: http://controller:5000/v2.0
admin: http://controller:35357/v2.0
În Ocata trebuie să arate așa:
public: http://controller:5000/v3
internal: http://controller:5000/v3
admin: http://controller:35357/v3
Update-ul se face ca mai sus.

 
2.2 Se face update la pachete:
yum install openstack-keystone httpd mod_wsgi python2-oslo-middleware

 
2.3 Se face update la fișierul de configurare:
https://docs.openstack.org/ocata/config-reference/identity/samples/keystone.conf.html

 
2.4 Se sincronizează baza de date:
su -s /bin/sh -c “keystone-manage db_sync” keystone

 
2.5 Dacă se dorește să se folosească token-uri de tip Fernet se rulează:
keystone-manage fernet_setup –keystone-user keystone –keystone-group keystone
keystone-manage credential_setup –keystone-user keystone –keystone-group keystone

 
2.6 Dacă nu există deja, se creează un link simbolic către wsgi-keystone.conf:
rm -f /etc/httpd/conf.d/wsgi-keystone.conf
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

 
2.7 Din cauza unor probleme de permisiuni se rulează următoarea comandă:
chown keystone:keystone /usr/bin/keystone-wsgi-admin /usr/bin/keystone-wsgi-public

 

[Cinder]
3.1 Se modifică endpoint-urile cinderv2 pentru a folosi `project_id` în loc de `tenant_id`.

 
3.2 Se creează serviciul cinderv3:
openstack service create –name cinderv3 \
–description “OpenStack Block Storage” volumev3

 
3.3 Se creează endpoint-urile pentru cinderv3:
openstack endpoint create –region REGION_NAME \
volumev3 public http://controller:8776/v3/%\(project_id\)s
openstack endpoint create –region REGION_NAME \
volumev3 internal http://controller:8776/v3/%\(project_id\)s
openstack endpoint create –region REGION_NAME \
volumev3 admin http://controller:8776/v3/%\(project_id\)s

 
3.4 Se face upgrade la pachete:
yum upgrade openstack-cinder

 
3.5 Se actualizează fișierul de configurare:
https://docs.openstack.org/ocata/config-reference/block-storage/samples/cinder.conf.html

 
3.6 Se sincronizează baza de date:
su -s /bin/sh -c “cinder-manage db sync” cinder

 

 

[Heat]
4.1 Se face upgrade la pachete:
yum install openstack-heat-api openstack-heat-api-cfn \
openstack-heat-engine

 
4.2 Se actualizează fișierul de configurare:
https://docs.openstack.org/ocata/config-reference/orchestration.html

 
4.3 Se sincronizează baza de date:
su -s /bin/sh -c “heat-manage db_sync” heat

 

 

[Nova]
5.1 Se creează baza de date `nova_cell0` și i se oferă privlegii user-ului nova asupra acesteia:
MariaDB [(none)]> CREATE DATABASE nova_cell0;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO ‘nova’@’localhost’ \
IDENTIFIED BY ‘NOVA_DBPASS’;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nova_cell0.* TO ‘nova’@’%’ \
IDENTIFIED BY ‘NOVA_DBPASS’;

 
5.2 Se face update la endpoint-uri. Deocamdată sunt de forma:
http://controller:8774/v2/%\(tenant_id\)s
În Ocata sunt de forma:
http://controller:8774/v2.1

 
5.3 Se creează user-ul `placement`:
openstack user create –domain default –password-prompt placement

 
5.4 Se adaugă user-ul placement la proiectul `service` și la rolul de admin:
openstack role add –project service –user placement admin

 
5.5 Se creează serviciul placement:
openstack service create –name placement –description “Placement API” placement

 
5.6 Se creează endpoint-urile pentru serviciul placement:
openstack endpoint create –region REGION_NAME placement public http://controller:8778
openstack endpoint create –region REGION_NAME placement internal http://controller:8778
openstack endpoint create –region REGION_NAME placement admin http://controller:8778

 
5.7 Se face upgrade la pachete:
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler openstack-nova-placement-api python2-oslo-middleware

 
5.8 Se actualizează fișierul de configurare:
https://docs.openstack.org/ocata/config-reference/compute.html

 
5.9 În /etc/httpd/conf.d/00-nova-placement-api.conf se adaugă:
<Directory /usr/bin>
<IfVersion >= 2.4>
Require all granted
</IfVersion>
<IfVersion < 2.4>
Order allow,deny
Allow from all
</IfVersion>
</Directory>

 
5.10 Se modifică fișierul /usr/lib/python2.7/site-packages/nova/db/sqlalchemy/api.py și se adaugă
la linia 115 `if hasattr(CONF, ‘profiler’):` ca și mai sus.

 
5.11 De la Ocata a devenit obligatorie tranziția către cell-uri, care sunt niște baze de date ce țin
evidența node-urilor de compute:
su -s /bin/sh -c “nova-manage cell_v2 map_cell0” nova
su -s /bin/sh -c “nova-manage cell_v2 create_cell –name=cell1 –verbose” nova

 
5.12 Se sincronizează baza de date:
su -s /bin/sh -c “nova-manage api_db sync” nova
su -s /bin/sh -c “nova-manage db sync” nova

 

[Neutron]
6.1 Se face upgrade la pachete:
yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-openvswitch ebtables openstack-neutron-vpnaas openstack-neutron-fwaas \
openstack-neutron-lbaas openstack-neutron-metering-agent

 
6.2 Se actualizează fișierele de configurare:
https://docs.openstack.org/ocata/config-reference/networking/samples/index.html

 
6.3 Se sincronizează baza de date:
su -s /bin/sh -c “neutron-db-manage –config-file /etc/neutron/neutron.conf \
–config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head” neutron

 

Ocata –> Pike
Se șterge repository-ul de Ocata:
yum remove centos-release-openstack-ocata
Se
instalează cel de Pike:
yum install centos-release-openstack-pike
[Neutron]
1.1 Se face upgrade la pachete:
yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-openvswitch ebtables openstack-neutron-vpnaas openstack-neutron-fwaas \
openstack-neutron-lbaas openstack-neutron-metering-agent

 
1.2 Se face upgrade la fișierele de configurare:
https://docs.openstack.org/neutron/pike/configuration/

 
1.3 Se sincronizează baza de date:
su -s /bin/sh -c “neutron-db-manage –config-file /etc/neutron/neutron.conf \
–config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head” neutron

 

Pike –> Queens
Se șterge repository-ul de Pike și cel învechit de Ceph:
yum remove centos-release-openstack-pike
yum remove centos-release-ceph-jewel-1.0-1.el7.centos.noarch
Se instalează repository-ul de Queens și cel nou de Ceph:
yum install centos-release-ceph-luminous
yum install centos-release-openstack-queens

 

[Keystone]
1.1 Se face upgrade la endpoint-uri. Rămân la fel, însă Keystone ascultă numai pe port-ul 5000, deci
vor arăta așa:
public: http://controller:5000/v3
internal: http://controller:5000/v3
admin: http://controller:5000/v3

 

1.2 Se face upgrade la pachete:
yum install openstack-keystone httpd mod_wsgi

 

1.3 Se actualizează fișierul de configurare:
https://docs.openstack.org/keystone/queens/configuration/samples/keystone-conf.html

 

1.4 Se sincronizează baza de date:
su -s /bin/sh -c “keystone-manage db_sync” keystone

 

[Cinder]
2.1 Se face upgrade la pachete:
yum install pyparsing openstack-cinder

 

2.2 Se actualizează fișierele de configurare:
https://docs.openstack.org/cinder/queens/configuration/block-storage/samples/cinder.conf.html

 

2.3 Se sincronizează baza de date:
su -s /bin/sh -c “cinder-manage db sync” cinder

 

[Nova]
Pe controller:
3.1 Se face upgrade la pachete:
yum install openstack-nova-api openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy \
openstack-nova-scheduler openstack-nova-placement-api

 
3.2 Se face update la config:
https://docs.openstack.org/nova/queens/configuration/sample-config.html

 

3.3 Se sincronizează bazele de date:
su -s /bin/sh -c “nova-manage api_db sync” nova
su -s /bin/sh -c “nova-manage db sync” nova

 

Pe compute:
3.4 Se face upgrade la pachete:
yum install openstack-nova-compute

 

3.5 Se face upgrade la config.

 

[Neutron]
Pe controller:
4.1 Se face upgrade la pachete:
yum install openstack-neutron openstack-neutron-ml2 \
openstack-neutron-openvswitch ebtables openstack-neutron-vpnaas openstack-neutron-fwaas \
openstack-neutron-lbaas openstack-neutron-metering-agent

 
4.2 Se actualizează fișierele de configurare:
https://docs.openstack.org/neutron/queens/configuration/

 
4.3 Se sincronizează baza de date:
su -s /bin/sh -c “neutron-db-manage –config-file /etc/neutron/neutron.conf \
–config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head” neutron

 

Pe compute:
4.4 Se face upgrade la pachete:
yum install openstack-neutron-openvswitch ebtables

 
4.5 Se actualizează fișierele de configurare

 

[Heat]
5.1 Se face upgrade la pachete:
yum install openstack-heat-api openstack-heat-api-cfn \
openstack-heat-engine

 
5.2 Se actualizează fișierul de configurare:
https://docs.openstack.org/heat/queens/configuration/

 
5.3 Se sincronizează baza de date:
su -s /bin/sh -c “heat-manage db_sync” heat

 

[Glance]
6.1 Se face upgrade la pachete:
yum install openstack-glance

 

6.2 Se actualizează fișierul de configurare:
https://docs.openstack.org/glance/queens/configuration/

 

6.3 Se sincronizează baza de date:
su -s /bin/sh -c “glance-manage db_sync” glance

 

[Horizon]
7.1 Se face upgrade la pachete:
yum install openstack-dashboard

 

7.2 Se actualizează fișierul de configurare:
https://docs.openstack.org/horizon/queens/configuration/settings.html

Things to watch out for:
– lbaas este învechit, se trece la Openstack Octavia pentru Load Balancing
– vpnaas e integrat în l3_agent în Queens.
– e bine să se pună un SECRET_KEY în local_settings (Horizon), deoarece există un bug care nu îl lasă
să caute în /tmp