Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save jova/2f86fee6726cd0e6d51c7dac8b05e49f to your computer and use it in GitHub Desktop.
Save jova/2f86fee6726cd0e6d51c7dac8b05e49f to your computer and use it in GitHub Desktop.

DevStack Liberty Versiyonu ve Neutron Servisinin Kurulumu

Gereksinimler

  • Ubuntu 14.04
  • 20 GB RAM
  • 50 GB Disk

Vagrant kullanımı için örnek vagrantfile aşağıdadır. Bu seride vagrant kullanılmıştır fakat zorunlu değildir.

Vagrantfile

Vagrant.configure("2") do |config|
	config.ssh.forward_agent = true
	config.vm.define "openstack" do |openstack|
		openstack.vm.box = "ubuntu/trusty64"
		openstack.vm.host_name = "openstack-test"
		openstack.vm.network "private_network", ip: "10.0.0.2"
		openstack.vm.network "forwarded_port", guest: 80, host: 8083
		openstack.vm.network "forwarded_port", guest: 8080, host: 8084
		openstack.disksize.size = "500GB"
 			config.vm.provider :virtualbox do |vb|
 				vb.customize ["modifyvm", :id, "--memory", "25600"]
		end
	end
end

Adım 1: Ön Hazırlık

Kuruluma başlamadan önce sistemimizi güncellemeli ve git kurmalıyız.

$ sudo apt-get update
$ sudo apt-get install -y git

Ardından DevStack için stack adında bir kullanıcı oluşturup projemizi klonlamalıyız.

$ sudo useradd -s /bin/bash -d /opt/stack -m stack
$ echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack
$ sudo su - stack
# stack adında kullanıcı oluşturduk ve stack olarak oturum açtık.
$ git clone https://opendev.org/openstack/devstack -b liberty-eol
$ cd devstack

Son olarak local.conf adında bir dosya oluşturmalı ve aşağıdaki satırları yazmalıyız.

[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=$ADMIN_PASSWORD

HOST_IP=127.0.0.1
SERVICE_HOST=$HOST_IP
MYSQL_HOST=$HOST_IP
RABBIT_HOST=$HOST_IP
GLANCE_HOSTPORT=$HOST_IP:9292

FORCE=yes

Adım 2: Kurulum

DevStack Liberty versiyonu artık desteklenmediği için (end of life) bu adımda çok fazla versiyon uyumsuzluğu ile karşılaşacağız. Bu problemleri sırası geldikçe çözeceğiz.

  • PROBLEM 1: OpenStack git repolarını farklı bir domaine taşıdığı için bu değişikliği uygulamalıyız. Aksi halde gereken projelerimiz klonlanamayacaktır.

    stackrc dosyamızı metin düzenleyicisi (vim) ile açıp GIT_BASE aramasını yapmalıyız. Ardından karşımıza çıkan GIT_BASE=${GIT_BASE:-git://git.openstack.org} satırını GIT_BASE=${GIT_BASE:-https://opendev.org} olarak değiştirmeliyiz.

  • PROBLEM 2: Eskiden var olan stable/liberty isimli branch artık liberty-eol olarak geçmekte. Bu nedenle stackrc isimli dosyamızda bulunan stable/liberty kısımlarını liberty-eol olarak değiştirmeliyiz. Tüm bu satırları otomatik olarak değiştirmek için dosyayı vim ile açıp :%s/stable\/liberty/liberty-eol/g komutunu kullanmalıyız.

    Bu işlemin ardından stackrc dosyamız aşağıdaki şekilde gözükecektir.


Bu iki problemi çözdükten sonra ./stack.sh scriptini çalıştırarak kuruluma başlayabiliriz. Projelerimizin klonlandığını göreceksiniz.

$ ./stack.sh

Cloning into '/opt/stack/requirements'..
remote: Enumerating objects: 34744, done.
remote: Counting objects: 100% (34744/34744), done.
remote: Compressing objects: 100% (12040/12040), done.
Receiving objects: 100% (34744/34744), 5.51 MiB | 63.00 KiB/s, done.
remote: Total 34744 (delta 23631), reused 33570 (delta 22680)
Resolving deltas: 100% (23631/23631), done.
...
Could not find a version that satisfies the requirement aioeventlet===0.4 (from -c /opt/stack/requirements/upper-constraints.txt (line 58)) (from versions: 0.5.2)
  • PROBLEM 3: Yukarıda da görüldüğü gibi kurulum; aioeventlet isimli paketin 0.4 versiyonunu bulamadığını belirtip iptal ediliyor. Bu aşamada yalnızca bu paketi değil, ileride de problem olacak olan paketlerin tümünü güncelleyeceğiz.

    /opt/stack/requirements/upper-constraints.txt dosyasını açmalı ve aşağıdaki paketlerin versiyonlarını karşılarında belirtildiği gibi değiştirmeliyiz.

     aioeventlet===0.5.2
     contextlib2===0.5.2
     packaging===16.5
     virtualenv===14.0.1
     oslo.utils=2.8.0
     PyYAML===3.12
     pyparsing===2.1.0
     pbr===1.10.0
     stevedore===1.20.0
     trollius===2.1
    

    NOT: Yukarıdaki satırları doğrudan dosyaya kopyalamayınız. Belirtilen paketlerin yalnızca versiyonlarını yukarıdaki gibi güncelleyiniz.

    /opt/stack/requirements/global-requirements.txt dosyasını açmalı ve pip versiyonunu 6.0 yerine 9.0 olarak güncellemeliyiz.

     pip>=9.0
    

    /opt/stack/devstack/tools/cap-pip.txt dosyasını açmalı ve pip versiyonunu 8 yerine 10 olarak güncellemeliyiz.

     pip<10
    

    NOT: Pip versiyonumuz 9 ila 10 arasında olmalıdır.


Bu problemi de çözdükten sonra ./stack.sh scriptini yeniden çalıştırarak kuruluma kaldığımız yerden devam ediyoruz.

NOT: ./stack.sh her çağrıldığında DevStack yeniden derlenecek ve veritabanı silinip yeniden oluşturulacaktır.

$ ./stack.sh
...
ERROR: could not install deps [-chttps://releases.openstack.org/constraints/upper/master, -r/opt/stack/tempest/requirements.txt]; v = InvocationError(u'/opt/stack/tempest/.tox/tempest/bin/pip install -chttps://releases.openstack.org/constraints/upper/master -r/opt/stack/tempest/requirements.txt', 2)
  • PROBLEM 4: Şimdiki problemimiz Tempest'in gereksinimler dosyasını bulamaması. Elimizde mevcut bulunan gereksinimler dosyasını Tempest'e tanıtarak bu problemi çözeceğiz.

    NOT: Gereksinim dosyasını bizim düzenlediğimiz dosya (upper-constraints.txt) yerine uzak sunucuda bulunan requirements.txt dosyası olarak göstermek başka hatalara sebebiyet verecektir.

    /opt/stack/tempest/tox.ini dosyasında bulunan https://releases.openstack.org/constraints/upper/master kısmını /opt/stack/requirements/upper-constraints.txt olarak değiştirmeliyiz.

         -c{env:UPPER_CONSTRAINTS_FILE:/opt/stack/requirements/upper-constraints.txt}  
    

    Yukarıdaki değişim işlemi aynı dosyada 5 farklı yerde yapılmalıdır.


Konu Tempest'e gelmişken Tempest'ten kaynaklanan problemleri de bu aşamada çözeceğiz. Bununla birlikte kurulumun sorunsuz bir şekilde tamamlanması gerekmekte.

  • PROBLEM 5: Tempest'in pip versiyonunu düşürmesi.

    Bu problemi çözmek için /opt/stack/tempest/requirements.txt dizininde bulunan dosyayı açıp ilk satırına pip===9.0.3 deyimini eklememiz yeterli olacaktır.

  • PROBLEM 6: verify-tempest-config scriptinin kullanımdan kaldırılmış olması.

    Bu test scripti temel olarak config dosyamızı doğrulamaya yaramakta. Fakat artık kullanılmadığı için yapmamız gereken bu scripti çağırmamak.

    /opt/stack/devstack/lib/tempest dosyasını vim ile açıp tox -revenv -- tempest-verify-config -u -r -o $tmp_cfg_file satırını tox -revenv --notest ile değiştirerek bu problemi de çözebiliriz.

     #tox -revenv-tempest -- verify-tempest-config -u -r -o $tmp_cfg_file
     tox -revenv --notest

Son kez ./stack.sh scriptimizi çalıştıralım ve DevStack kurulumunu tamamlayalım.

$ ./stack.sh

This is your host IP address: 127.0.0.1
This is your host IPv6 address: ::1
Horizon is now available at http://127.0.0.1/dashboard
Keystone is serving at http://127.0.0.1:5000/
The default users are: admin and demo
The password: secret
2019-07-19 11:42:57.102 | stack.sh completed in 500 seconds.

Kurulum tamamlandı. Şimdi yapmamız gereken servislerin doğru çalışıp çalışmadığını kontrol etmek. openstack service list komutu ile DevStack sayesinde kurulan OpenStack servislerini görüntüleyebiliriz. Fakat öncesinde openrc dosyamızı source olarak terminalimize sağlamalıyız.

$ source /opt/stack/devstack/openrc
$ openstack service list

You are not authorized to perform the requested action: admin_required 

Admin olmadığımızı belirten bir 403 hatası aldıysanız bunun sebebi openrc dosyasında OS_USERNAME=demo olarak kullanıcı adının demo olmasından kaynaklanmaktadır. Dilerseniz bu dosyayı düzenleyebilir veya hızlı çözüm için export OS_USERNAME=admin komutunu çalıştırabilirsiniz.

$ source /opt/stack/devstack/openrc
$ export OS_USERNAME=admin
$ openstack service list

+----------------------------------+-------------+----------------+
| ID                               | Name        | Type           |
+----------------------------------+-------------+----------------+
| 125105fed2dc4170ac55f562a79788fb | cinderv2    | volumev2       |
| 6bbec77bc876474789908e016a2dceb4 | nova_legacy | compute_legacy |
| 7bf9928d966f48269db4155a30516c95 | keystone    | identity       |
| a934cdebccc74ac5952abe1055d18e77 | nova        | compute        |
| cc205d320f7747ca9b02871d5a24194b | cinder      | volume         |
| d509d221b4ef4499bc065e6207e4e1f8 | glance      | image          |
| d5d2339a3c4e440ea2d7d9608046ec55 | ec2         | ec2            |
+----------------------------------+-------------+----------------+

Neutron Servisinin Kurulması

DevStack organizasyonumuza Neutron servisini kurmak için yapmamız gereken local.conf dosyasına yalnızca bir kaç satır eklemek.

local.conf dosyasını aşağıdaki gibi güncellemeliyiz.

[[local|localrc]]
ADMIN_PASSWORD=secret
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
SERVICE_TOKEN=$ADMIN_PASSWORD

HOST_IP=127.0.0.1
SERVICE_HOST=$HOST_IP
MYSQL_HOST=$HOST_IP
RABBIT_HOST=$HOST_IP
GLANCE_HOSTPORT=$HOST_IP:9292

FORCE=yes

disable_service  n-net
enable_service q-svc, q-agt, q-dhcp, q-l3, q-meta, neutron

Ardından ./stack.sh yaparak DevStack'ı başlatmalıyız.

NOT: Daha önce DevStack çalıştırdıysanız lütfen ./unstack.sh yaparak sonlandırınız.

./stack.sh scripti tamamlandıktan sonra openstack service list veya neutron net-list komutlarını çalıştırarak Neutron servisinin başarılı bir şekilde kurulduğundan emin olabiliriz.

$ openstack service list

+----------------------------------+-------------+----------------+
| ID                               | Name        | Type           |
+----------------------------------+-------------+----------------+
| 3758802ec3d6413aa391d7459b8943ba | ec2         | ec2            |
| 40ef3a2fb084440f98260bc5475546db | nova_legacy | compute_legacy |
| 808cedbc72d44207a4d4588b4c9a2fc1 | nova        | compute        |
| a0923afd154048989505114150bdf7a9 | cinderv2    | volumev2       |
| b15a4cf30de845548235f5261597b468 | keystone    | identity       |
| c75ad2c8fd6c4264974a906eb14d1a42 | cinder      | volume         |
| f5f883a6aebd40a39df3a46ba7094d0b | glance      | image          |
| f9bce6c1ff28416186e2a1b0618c389a | neutron     | network        |
+----------------------------------+-------------+----------------+

$ neutron net-list

+--------------------------------------+---------+--------------------------------------------+
| id                                   | name    | subnets                                    |
+--------------------------------------+---------+--------------------------------------------+
| 832fbd78-69a0-4269-9f15-bbb0a2511284 | public  | 41dce4a6-c8e1-00ce7fd4 2001:db8::/64       |
|                                      |         | e4fecc6f-3f4e-1aacdebd 172.24.4.0/24       |
| 80a0ea44-a72c-4686-bfaa-cc8ffaff7112 | private | 73a56420-2ac5-b929b8ef 10.0.0.0/24         |
|                                      |         | df256f83-9d04-6d40320d fdbc:4825:879a::/64 |
+--------------------------------------+---------+--------------------------------------------+

NOT: Neutron servisindeki default ağı kullanarak oluşacak örneklere otomatik olarak dns vermek için neutron subnet-update private-subnet --dns-nameserver 8.8.8.8 komutunu yazmanız yeterlidir.

Bu dökümanda DevStack Liberty versiyonunun kurulumundan ve Neutron servisinin aktif edilmesinden bahsettik. Gelecek dökümanda ise mevcut DevStack organizasyonumuza Heat servisini ekleyeceğiz ve ölçeklendirme testi gerçekleştireceğiz.

Heat Servisi için DevStack Yapılandırması ve Otomatik Ölçeklendirme

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment