Home » Genel » OpenStack Kurulum Rehberi: Ubuntu 22.04 Üzerine Kapsamlı Kılavuz

OpenStack Kurulum Rehberi: Ubuntu 22.04 Üzerine Kapsamlı Kılavuz

Merhaba

Bu yazım, Ubuntu üzerine OpenStack dökümantasyonunu takip ederek kurulum incelemesi hakkında olacak. OpenStack kurulumu için 6 adet Ubuntu 22.04 sanal makine ayarladım. Makinelerden biri diğerlerini internete çıkartmak için kullanacağım. Kuruluma başlamadan önce ağ altyapımızı ve zaman senkronizasyonu gibi işlemleri yapalım. Ağ mimarisi şu şekilde olacak

  • controller 10.0.0.11
  • compute1 10.0.0.31
  • block1 10.0.0.41
  • nat 10.0.0.1

Controller ve compute sanal makinelerinde iki ağ kartı kullanıyorum. Biri iç ağ ile haberleşirken diğeri dış ağ ile haberleşecek.

Bu ağ bilgilerini sanal makinelerin bir birlerinin isimlerini daha iyi çözümleyebilmesi için /etc/hosts dosyası içine yazıyoruz.

10.0.0.11 controller
10.0.0.31 compute1
10.0.0.41 block1

Şimdi sıra geldi zaman senkronizasyonu için chrony kurulumunu yapmaya.

apt install chrony

controller ı ntp sunucusu olarak ayarlıyoruz. Diğerleri controller dan alacak zaman bilgisini.

/etc/chrony/chrony.conf ayar dosyasında gerekli ayarlamaları yapalım.

 server pool.ntp.org iburst
# Diğer OpenStack nodelarının erişimine izin ver
allow 10.0.0.0/24

chrony servisini yeniden başlatalım.

systemctl restart chrony.service

controller harici diğer makinelere aynı kurulumu yapalım, ama onların ayar dosyasına controller ı ekleyelim.

Diğer zaman sunucularını # ile kapatalım.

server controller iburst

servisi yeniden başlatalım.

chronyc sources

bu komutu çalıştırdığımızda zaman sunucusu olarak controller ı görmemiz gerekiyor.

OpenStack kurulumu için repoyu tüm makinelere ekleyelim.

add-apt-repository cloud-archive:caracal

Veritabanı Servisi (MariaDB) Kurulumu

ilk olarak verileri tutmak için controller üzerine veritabanı sunucusu kurulumu yapıyoruz.

Dökümanda kolaylık olması için hepsini bir sunucuya kurmuş ama siz isterseniz veritabanı ve rabbitmq farklı sunuculara kurabilirsiniz. Hadi başlayalım.

apt install mariadb-server python3-pymysql python3-mysql.connector

Openstack için ayar dosyası oluşturalım. /etc/mysql/mariadb.conf.d/99-openstack.cnf

[mysqld]
bind-address = 10.0.0.11

default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8

servisi yeniden başlatalım ve diğer kurulum adımlarını takip edelim.

systemctl restart mariadb.service
mysql_secure_installation

Mesaj Kuyruğu Servisi (RabbitMQ) Kurulumu

OpenStack servisleri aralarındaki iletişimi mesajlaşma servisi üzerinden sağlıyor. Controller ın üzerinde Rabbitmq kurulumunu yapalım.

apt install rabbitmq-server

Kullanıcı oluşturup şifre belirleyelim.

rabbitmqctl add_user openstack RABBIT_PASS

RABBIT_PASS yazan yere kendi oluşturduğunuz şifreyi yazın.

Gerekli izinleri verelim.

rabbitmqctl set_permissions openstack "." "." ".*"

Cache Servisi (Memcached) Kurulumu

Controller üzerine cache servisini de kuruyoruz.

apt install memcached python3-memcache

Ayar dosyasında gerekli düzenlemeleri yapıyoruz. /etc/memcached.conf

Dosyasından 127.0.0.1 yazan yeri ip ile değiştirelim
-l 10.0.0.11

Servisi yeniden başlatıyoruz.

systemctl restart memcached.service

Koordinasyon Servisi (Etcd) Kurulumu

Controller üzerinde kurulumu yapıyoruz.

apt install etcd-server

Ayar dosyasında gerekli düzenlemeleri yapalım.

ETCD_NAME="controller"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="controller=http://10.0.0.11:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.11:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.11:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.11:2379"

Servisi etkin hale getirip başlatalım.

Systemctl enable etcd
Systemctl start etcd

Kimlik Servisi (Keystone) Kurulumu

Keystone, OpenStack’in kimlik doğrulama ve yetkilendirme servisidir. Kullanıcıları, projeleri ve rolleri yönetir.

ilk olarak veritabanı ve kullanıcı oluşturup, gerekli yetkileri verelim.

CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS'
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';

KEYSTONE_DBPASS kendi belirlediğiniz şifre.

Kurulumu yapalım.

apt install keystone

Ayar dosyasındaki düzenlemeleri yapalım. /etc/keystone/keystone.conf

[database]
connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
[token]
provider = fernet

Veritabanında tabloları oluştursun

su -s /bin/sh -c "keystone-manage db_sync" keystone

Bu komuttan sonra mutlaka gidip veritabanını kontrol edelim tablolar oluşmuş mu diye.

keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

Keystone servisini bootstrap komutuyla başlatalım.

keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  --bootstrap-admin-url http://controller:5000/v3/ \
  --bootstrap-internal-url http://controller:5000/v3/ \
  --bootstrap-public-url http://controller:5000/v3/ \
  --bootstrap-region-id RegionOne

ADMIN_PASS yazan yere kendi oluşturduğunuz şifreyi yazın.

Apache yapılandırma dosyasından serverName tanımlayalım. /etc/apache2/apache2.conf

ServerName controller

Apache servisini yeniden başlatalım.

systemctl restart apache2.service

Openstack komut satırı işlemlerinde kullanmak için ortam değişkenlerini tanımlayalım.

$ export OS_USERNAME=admin
$ export OS_PASSWORD=ADMIN_PASS
$ export OS_PROJECT_NAME=admin
$ export OS_USER_DOMAIN_NAME=Default
$ export OS_PROJECT_DOMAIN_NAME=Default
$ export OS_AUTH_URL=http://controller:5000/v3
$ export OS_IDENTITY_API_VERSION=3

Domain ekleyelim.

openstack domain create --description "An Example Domain" example

Bu komuttan sonra 500 hatası alıyorsanız. Veritabanı bağlantısını kontrol edin. bağlantı kuramamış olabilir.

Bu komutu çalıştırmak için openstack client paketini kurmuş olmanız gerekiyor.

apt install python3-openstackclient

Servis oluşturalım

openstack project create --domain default --description "Service Project" service

Demo proje oluşturalım.

openstack project create --domain default --description "Demo Project" myproject

# kullanıcı oluşturalım
openstack user create --domain default --password-prompt myuser
#role oluşturalım
openstack role create myrole

Oluşturmuş role kullanıcı ve projeyi ekleyelim.

openstack role add --project myproject --user myuser myrole

Denemeler yapmak için bir admin ve demo ortam değişkeni oluşturalım.

admin-openrc dosyası

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

Demo kullanıcı için demo-openrc dosyası

export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=myproject
export OS_USERNAME=myuser
export OS_PASSWORD=DEMO_PASS
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

DEMO_PASS myuser kullanıcısını oluştururken girmiş olduğumuz şifre.

. admin-openrc

admin ortam değişkenlerini ayarlayalım ve token kontrolü yapalım.

openstack token issue

Görüntü Servisi (Glance) Kurulumu

Glance, sanal makine imajlarını (örneğin, .iso, .qcow2) depolamanızı ve yönetmenizi sağlayan OpenStack servisidir.

Glance kurulumu için ilk olarak veritabanını ayarlayalım.

CREATE DATABASE glance;

GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'GLANCE_DBPASS';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'GLANCE_DBPASS';

Kullanıcı oluşturup gerekli izinleri de verdikten sonra admin ortam değişkenlerini tanımlayalım.

. admin-openrc

Glance için kullanıcı oluşturalım.

openstack user create --domain default --password-prompt glance

Rol atayalım.

openstack role add --project service --user glance admin

İmaj servisini oluşturalım.

openstack service create --name glance --description "OpenStack Image" image

imaj servisi için endpointler ekleyelim.

openstack endpoint create --region RegionOne image public http://controller:9292
openstack endpoint create --region RegionOne image internal http://controller:9292
openstack endpoint create --region RegionOne image admin http://controller:9292

Glance yi controller a kurulumunu yapalım.

apt install glance

Glance için veritabanı ve keystone ayarlarını yapalım. /etc/glance/glance-api.conf

[database]
# ...
connection = mysql+pymysql://glance:GLANCE_DBPASS@controller/glance

#keystone ayarları için
[keystone_authtoken]
# ...
www_authenticate_uri  = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = glance
password = GLANCE_PASS

[paste_deploy]
# ...
flavor = keystone

#GLANCE_PASS gördüğünüz yere kendi oluşturduğunuz şifreyi yazın
[DEFAULT]
# ...
enabled_backends=fs:file

[glance_store]
# ...
default_backend = fs

[fs]
filesystem_store_datadir = /var/lib/glance/images/

[oslo_limit] ayarları 
[oslo_limit]
auth_url = http://controller:5000
auth_type = password
user_domain_id = default
username = glance
system_scope = all
password = GLANCE_PASS
endpoint_id = ENDPOINT_ID
region_name = RegionOne

ENDPOINT_ID yazan yere yukarıda glance endpoint oluştururken oluşan id yi yazıyoruz.
Public de yazan id yi buraya yazalım.

Kontrol için endpointleri listeleyelim.

openstack endpoint list --service glance --region RegionOne

Veritabanında tabloları oluşturalım.

su -s /bin/sh -c "glance-manage db_sync" glance

Servisi yeniden başlatalım.

Systemctl restart glance-api.service

Admin ortam değişkenlerini tanımlayalım.

. admin-openrc

İmaj dosyasını internetten indirelim.

wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img

İndirmiş olduğumuz dosyayla imaj oluşturalım.

glance image-create --name "cirros" --file cirros-0.4.0-x86_64-disk.img --disk-format qcow2 --container-format bare --visibility=public

İmajı listeleyip kontrol edelim.

glance image-list

Placement Servisinin Kurulumu

Placement servisi kaynakların yönetimi ile ilglilenir.

veritabanımızı ve kullanıcımızı oluşturup gerekli izinleri verelim.

CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'PLACEMENT_DBPASS';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'PLACEMENT_DBPASS';

PLACEMENT_DBPASS yazan yere kendi oluşturmuş olduğunuz şifreyi yazmalısınız.

Admin ortam değişkenlerimizi tanımlayalım.

. admin-openrc

Kullanıcı oluşturalım.

openstack user create --domain default --password-prompt placement

Admin rolune atamasını yapalım.

openstack role add --project service --user placement admin

Servis oluşturalım.

openstack service create --name placement --description "Placement API" placement

Servis için endpoint oluşturalım.

openstack endpoint create --region RegionOne placement public http://controller:8778

openstack endpoint create --region RegionOne placement internal http://controller:8778

openstack endpoint create --region RegionOne placement admin http://controller:8778

Ayarlamaları bitti kurulumunu yapalım.

apt install placement-api

Ayar dosyasından veritabanı ve diğer ayarları yapalım /etc/placement/placement.conf

[placement_database]
# ...
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller/placement
#PLACEMENT_DBPASS yazan yere oluşturmuş olduğunuz şifreyi yazın

[api]
# ...
auth_strategy = keystone

[keystone_authtoken]
# ...
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = PLACEMENT_PASS

PLACEMENT_PASS yazan yere oluşturmuş olduğunuz şifreyi yazın.

Veritabanında tabloları oluşturalım.
su -s /bin/sh -c "placement-manage db sync" placement

Daha sonradan uğraşmamak için veritabanında tablolar oluşmuş mu kontrol edin.
Apache2 web servisini yeniden başlatalım.
Systemctl restart apache2.service

Kurulumu doğrulayalım
. admin-openrc

Eğer kurulum tamamsa success olarak çıkacak
placement-status upgrade check

Nova Kurulumu

Nova kurulumu için controller üzerinde veritabanı ve kimlik servisi üzerinde kullanıcı oluşturalım.

CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;

İzinleri verelim.

GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'NOVA_DBPASS';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'NOVA_DBPASS';

NOVA_DBPASS yazan yere kendi oluşturduğunuz şifreyi yazın.

Admin ortam değişkenlerini tanımlayalım.

. admin-openrc

Kullanıcı oluşturalım.

openstack user create --domain default --password-prompt nova

Admin rolüne atayalım.

openstack role add --project service --user nova admin

Nova için bir servis oluşturalım.

openstack service create --name nova --description "OpenStack Compute" compute

Endpointleri oluşturalım.

openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1

openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1

openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1

Bileşenleri kuralım.

apt install nova-api nova-conductor nova-novncproxy nova-scheduler

Ayar dosyasında gerekli değişiklikleri yapalım. /etc/nova/nova.conf

[api_database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova_api

[database]
# ...
connection = mysql+pymysql://nova:NOVA_DBPASS@controller/nova

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller:5672/
my_ip = 10.0.0.11

[api]
# ...
auth_strategy = keystone

[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS

[service_user]
send_service_user_token = true
auth_url = https://controller/identity
auth_strategy = keystone
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = NOVA_PASS

[vnc]
enabled = true
# ...
server_listen = $my_ip
server_proxyclient_address = $my_ip

[glance]
# ...
api_servers = http://controller:9292

[oslo_concurrency]
# ...
lock_path = /var/lib/nova/tmp

[placement]
# ...
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = PLACEMENT_PASS

veritabanına tabloları ekleyelim.

su -s /bin/sh -c "nova-manage api_db sync" nova

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

su -s /bin/sh -c "nova-manage db sync" nova

Doğrulama yapmak için

su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova

Servisleri yeniden başlatalım.

systemctl restart nova-api
systemctl restart nova-scheduler.service
systemctl restart nova-conductor.service
systemctl restart nova-novncproxy.service

Compute node üzerinde kuruluma devam edelin.

apt install nova-compute

Ayar dosyasında gerekli ayarlamaları yapalım. /etc/nova/nova.conf

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller

[api]
# ...
auth_strategy = keystone

[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000/
auth_url = http://controller:5000/
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = nova
password = NOVA_PASS

[service_user]
send_service_user_token = true
auth_url = https://controller/identity
auth_strategy = keystone
auth_type = password
project_domain_name = Default
project_name = service
user_domain_name = Default
username = nova
password = NOVA_PASS

[DEFAULT]
# ...
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS

[vnc]
# ...
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://controller:6080/vnc_auto.html

[glance]
# ...
api_servers = http://controller:9292

[oslo_concurrency]
# ...
lock_path = /var/lib/nova/tmp

[placement]
# ...
region_name = RegionOne
project_domain_name = Default
project_name = service
auth_type = password
user_domain_name = Default
auth_url = http://controller:5000/v3
username = placement
password = PLACEMENT_PASS

egrep -c '(vmx|svm)' /proc/cpuinfo

komutunu çalıştıralım eğer çıktı 1 veya büyükse kvm ve qemu kullanılabilir. küçükse qemu kullanılabilir.

Ayar dosyasında gerekli ayarı yapalım. /etc/nova/nova-compute.conf

[libvirt]
# ...
virt_type = qemu

Servisi yeniden başlatalım.

systemctl restart nova-compute

Controller üzerinden kontrolleri yapalım.

. admin-openrc

openstack compute service list --service nova-compute

Eklemeler yaptığımızda bu kodu çalıştırmamız gerekiyor
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova

istersek /etc/nova/nova.conf ayar dosyasında zamanlı olarak ayarlayabiliriz

[scheduler]
discover_hosts_in_cells_interval = 300

kurulum yaptıklarımız çalışıyor mu kontrol edelim
openstack compute service list

Katalogları listeler.

openstack catalog list

İmajları listeler.

openstack image list

nova-status upgrade check

Success sonucu verirse her şey yolundadır.

Neutron kurulumu

OpenStack’un ağ (network) bileşenidir. Bu bileşen, kullanıcıların sanal ağlar, alt ağlar, yönlendirme kuralları, güvenlik duvarı kuralları vb. oluşturmasına ve yönetmesine olanak tanır.

Controller üzerinde kurulumlarını yapıyoruz.

Veritabanı oluşturup kullanıcıya yetki verelim.

CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'NEUTRON_DBPASS';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'NEUTRON_DBPASS';

Admin ortam değişkenlerini tanımlayalım.

. admin-openrc

Kullanıcı oluşturalım.

openstack user create --domain default --password-prompt neutron

Admin rolüne ekleyelim.

openstack role add --project service --user neutron admin

Servis oluşturalım.

openstack service create --name neutron --description "OpenStack Networking" network

Endpoint oluşturalım.

openstack endpoint create --region RegionOne network public http://controller:9696


openstack endpoint create --region RegionOne network internal http://controller:9696


openstack endpoint create --region RegionOne network admin http://controller:9696

endpointleri oluşturduktan sonra ağ için iki yöntem var.

✅ Seçenek 1 (Option 1): En Basit Ağ Yapısı
• Sadece provider (harici) ağlar desteklenir.
• VM’ler sadece dış dünyaya bağlı olan ağlara bağlanabilir.
• Private ağlar, router’lar veya floating IP gibi özellikler YOKTUR.
• Ağları yalnızca admin veya yetkili kullanıcılar yönetebilir.
🧠 Bu yapı basit ama kısıtlıdır. Gelişmiş ağ özelliklerini desteklemez.


✅ Seçenek 2 (Option 2): Gelişmiş Ağ Mimarisidir
• Seçenek 1’in üzerine ek olarak:
o Private (self-service) ağlar oluşturabilirsin
o Router ile bu ağları dış dünyaya bağlayabilirsin
o Floating IP desteği vardır (VM’ye dış IP atayabilirsin)
• Artık sadece admin değil, normal kullanıcılar da ağ kurabilir.
🧠 Bu yapı daha karmaşıktır ama gerçek bir bulut ortamı sağlar.

Seçenek 2 den devam edelim.

Controller üzerine ağ için kurulum adımlarına başlayalım.

apt install neutron-server neutron-plugin-ml2 \
neutron-openvswitch-agent neutron-l3-agent neutron-dhcp-agent \
neutron-metadata-agent

Veritabanı ayarlarını yapalım. /etc/neutron/neutron.conf

[database]
# ...
connection = mysql+pymysql://neutron:NEUTRON_DBPASS@controller/neutron
#NEUTRON_DBPASS yazan yere kendi oluşturduğunuz şifreyi yazın
#Router servisi ekleyelim
#mesaj kuyruğunu ekleyelim
#keystone ayarlayalım
[DEFAULT]
# ...
core_plugin = ml2
service_plugins = router
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
notify_nova_on_port_status_changes = true
notify_nova_on_port_data_changes = true

[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = neutron
password = NEUTRON_PASS

[nova]
# ...
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = nova
password = NOVA_PASS


[oslo_concurrency]
# ...
lock_path = /var/lib/neutron/tmp

Eklenti ayarlarını yapalım. /etc/neutron/plugins/ml2/ml2_conf.ini

[ml2]
# ...
type_drivers = flat,vlan,vxlan

#self servis için vxlan ı aktif edelim
[ml2]
# ...
tenant_network_types = vxlan

#köprüyü de kuralım
[ml2]
# ...
mechanism_drivers = openvswitch,l2population

#port güvenliği olmazsa olmaz
[ml2]
# ...
extension_drivers = port_security

flat network 
[ml2_type_flat]
# ...
flat_networks = provider

#vxlan ı da unutmayalım
[ml2_type_vxlan]
# ...
vni_ranges = 1:1000

open switch ayarları /etc/neutron/plugins/ml2/openvswitch_agent.ini

[ovs]
bridge_mappings = provider:PROVIDER_BRIDGE_NAME
local_ip = OVERLAY_INTERFACE_IP_ADDRESS
#köprü için ayarlamaları yapalım
# ovs-vsctl add-br $PROVIDER_BRIDGE_NAME
# ovs-vsctl add-port $PROVIDER_BRIDGE_NAME $PROVIDER_INTERFACE_NAME

[agent]
tunnel_types = vxlan
l2_population = true

[securitygroup]
# ...
enable_security_group = true
firewall_driver = openvswitch
#firewall_driver = iptables_hybrid

İptables eklerseniz sysctl ye alttakileri 1 değeriyle ekleyin
net.bridge.bridge-nf-call-iptables
net.bridge.bridge-nf-call-ip6tables

dhcp agent i ayarlayalım /etc/neutron/dhcp_agent.ini

[DEFAULT]

dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
enable_isolated_metadata = true

compute üzerinde kurulum işlemlerine geçelim
apt install neutron-openvswitch-agent

ayarlarımızı yapalım. /etc/neutron/neutron.conf

[DEFAULT]
transport_url = rabbit://openstack:RABBIT_PASS@controller

[oslo_concurrency]

lock_path = /var/lib/neutron/tmp

Bu ayarları yaptıktan sonra seçtiğiniz ağ seçeneğine göre takip etmeniz gereken adımlar var. Ben 2. seçeneği seçtiğim için o adımları izliyorum.
Compute üzerinde işlemlere devam ediyoruz.

Ayarları yapalım. /etc/neutron/plugins/ml2/openvswitch_agent.ini

[ovs]
bridge_mappings = provider:PROVIDER_BRIDGE_NAME
local_ip = OVERLAY_INTERFACE_IP_ADDRESS

#provider bridge name yazan yere kendi oluşturğunuz köprü ismini yazıyorsunuz ip adresi için compute node #ip adresini yazıyoruz.
[agent]
tunnel_types = vxlan
l2_population = true

[securitygroup]
# ...
enable_security_group = true
firewall_driver = openvswitch
#firewall_driver = iptables_hybrid

Bu işlemleri yaptıktan sonra controller node geri dönüyoruz
Ayarları yapalım /etc/nova/nova.conf

[neutron]
# ...
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = neutron
password = NEUTRON_PASS
service_metadata_proxy = true
metadata_proxy_shared_secret = METADATA_SECRET

veritabanını güncelleyelim

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

Servisleri yeniden başlatalım.

systemctl restart nova-api.service
systemctl restart neutron-server.service
systemctl restart neutron-openvswitch-agent.service
systemctl restart neutron-dhcp-agent.service
systemctl restart neutron-metadata-agent.service
systemctl restart neutron-l3-agent.service

Cinder Kurulumu

OpenStack’ta bulunan bir blok depolama hizmetidir. Bu bileşen, sanal makineler ve diğer uygulamalar için blok depolama sağlar. Cinder, sanal diskleri, sanal makineleri ve diğer blok cihazlarını yönetir.

controller node üzerinde veritabanı işlemlerini halledelim

CREATE DATABASE cinder;
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'CINDER_DBPASS';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'CINDER_DBPASS';

Admin ortam değişkenlerini atayalım.
. admin-openrc
Kullanıcımızı oluşturalım.
openstack user create --domain default --password-prompt cinder

Admin rolüne atayalım.
openstack role add --project service --user cinder admin

Servis oluşturalım.

openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3

Cinder için endpointleri oluşturalım.

openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/%\(project_id\)s
openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/%\(project_id\)s
openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/%\(project_id\)s

Gerekli paketleri kuralım.

apt install cinder-api cinder-scheduler

veritabanı ve diğer ayarları yapalım. /etc/cinder/cinder.conf

[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
my_ip = 10.0.0.11

[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = CINDER_PASS

[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp

Veritabanı tablolarını oluşturalım.


su -s /bin/sh -c "cinder-manage db sync" cinder

nova da ayarımızı yapalım. /etc/nova/nova.conf

[cinder]
os_region_name = RegionOne

Servisleri yeniden başlatalım.

systemctl restart nova-api.service
systemctl restart cinder-scheduler.service
systemctl restart apache2.service

storage node da kuruluma devam edelim.


apt install lvm2 thin-provisioning-tools

kendi fiziksel diskinize göre ayarlamayı yapın


pvcreate /dev/sdb

volume group oluşturalım


vgcreate cinder-volumes /dev/sdb

Diskleri taraması için ayar yapalım. /etc/lvm/lvm.conf

devices {
...
filter = [ "a/sdb/", "r/.*/"]
}

Kuruluma devam edelim.
apt install cinder-volume tgt

Ayarlarımızı yapalım. /etc/cinder/cinder.conf

[database]
# ...
connection = mysql+pymysql://cinder:CINDER_DBPASS@controller/cinder

[DEFAULT]
# ...
transport_url = rabbit://openstack:RABBIT_PASS@controller
auth_strategy = keystone
my_ip = MANAGEMENT_INTERFACE_IP_ADDRESS
enabled_backends = lvm
glance_api_servers = http://controller:9292

[keystone_authtoken]
# ...
www_authenticate_uri = http://controller:5000
auth_url = http://controller:5000
memcached_servers = controller:11211
auth_type = password
project_domain_name = default
user_domain_name = default
project_name = service
username = cinder
password = CINDER_PASS

[lvm]
# ...
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
target_protocol = iscsi
target_helper = tgtadm

[oslo_concurrency]
# ...
lock_path = /var/lib/cinder/tmp

Başka bir ayar dosyasına ekleme yapalım /etc/tgt/conf.d/cinder.conf

include /var/lib/cinder/volumes/*

Servisleri yeniden başlatalım.

systemctl restart tgt
systemctl restart cinder-volume

Dashboard(horizon) kurulumu

Openstack ı yönetmek için kullanılan arayüz.

kurulumu controller üzerine yapıyoruz.

apt install openstack-dashboard

Ayarlarını yapalım. /etc/openstack-dashboard/local_settings.py

OPENSTACK_HOST = "controller"

ALLOWED_HOSTS = ['one.example.com', 'two.example.com','*']

SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

CACHES = {
    'default': {
         'BACKEND': 'django.core.cache.backends.memcached.PyMemcacheCache',
         'LOCATION': 'controller:11211',
    }
}


OPENSTACK_KEYSTONE_URL = "http://%s/identity/v3" % OPENSTACK_HOST
'''
%s sonra :5000 portunu ekleyelim eğer sizin ayarlarınız farklıysa ona göre düzenleme yapın
Api versiyonları
'''
OPENSTACK_API_VERSIONS = {
    "identity": 3,
    "image": 2,
    "volume": 3,
}

Ayar dosyasında COMPRESS_OFFLINE = True varsa ve dashboardı açtığınızda birşeyler ters gitti yazarsa False yapın.

Apache web serverda ayarlar tam mı kontrol edelim. /etc/apache2/conf-available/openstack-dashboard.conf

WSGIApplicationGroup %{GLOBAL}

Apache2 servisini yeniden başlatalım.
Systemctl restart apache2.service

Sonuç olarak api, veritabanı, rabbitmq gibi haberleşme araçlarını controller üzerine kuruyoruz. Compute ve diğer servisler için farklı sunucular oluşturup controller üzerinden birbiri ile haberleşmelerini sağlıyoruz.

Yorum yapın