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 çıkacakplacement-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 gerekiyorsu -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 edelimopenstack 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 ekleyinnet.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çelimapt 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.