- 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
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
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 çıkanGIT_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 bulunanhttps://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ınapip===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çıptox -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 |
+----------------------------------+-------------+----------------+
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