Göç işlemini gerçekleştirmek için öncelikle her iki bulutada admin düzeyinde bağlanabilen bir ortamda bulunmamız gerekiyor. Ayrıca bulutumuzda göç edecek disk ve volumelerin NFS üzerinde olduğunu düşünürsek, ortamın bu NFS noktalarınıda mount edebilmesi gerekmekte. Sırasıyla gerekli python paketlerini yükleyip ayarları yapalım.
1- OpenStack Cli ve SDK
Bağlantımızı test etmek ve ileride gerekirse bazı komutları çalıştırabilmek için openstackclient'i yükleyelim, ayrıca gerekli kod parçalarını çalıştırabilmek için de openstacksdk'yı yükleyelim.
pip3 install python-openstackclient
pip3 install openstacksdk
Sonrasında versiyonlarına göz atalım.
pip3 list | grep openstack
Sonrasında clouds.yaml dosyamızı /etc/openstack/clouds.yaml yolunda oluşturarak sonrasında openstack cli komutlarımız ile kontrol edelim.
clouds:
oldstack:
auth:
auth_url: http://172.16.0.10:5000
project_domain_name: Default
user_domain_name: Default
project_name: admin
username: admin
password: YOURoldstackPASSWORD
region_name: RegionOne
newstack:
auth:
auth_url: http://172.16.0.11:5000
project_domain_name: Default
user_domain_name: Default
project_name: admin
username: admin
password: YOURnewstackPASSWORD
region_name: RegionOne
clouds.yaml dosyasınıda oluşturduysak her iki bulut içinde kullanıcıları listeterek denememizi gerçekleştirebiliriz.
Çıktıdan da görüldüğü gibi openstack cli çalışmakta, hatta oldstack üzerinde göç ettireceğimiz kullanıcı bulunmakta. Aynı denemeyi openstacksdk yapalım.
import pprint
import openstack
# Initialize PP and turn on OpenStack debug logging
pp = pprint.PrettyPrinter(indent=4)
openstack.enable_logging(debug=False)
# Initialize connection
connold = openstack.connect(cloud='oldstack')
connnew = openstack.connect(cloud='newstack')
print("---------- oldstack ----------")
for user in connold.identity.users():
pp.pprint(user['name'])
print("---------- newstack ----------")
for user in connnew.identity.users():
pp.pprint(user['name'])
Yukarıda scripti python ile çalıştırınca aldığımız sonuç:
---------- oldstack ----------
'admin'
'glance'
'cinder'
'placement'
'nova'
'neutron'
'heat'
'heat_domain_admin'
'deneme_user'
---------- newstack ----------
'admin'
'glance'
'cinder'
'placement'
'nova'
'neutron'
'heat'
'heat_domain_admin'
Eğer clouds.yaml dosyaysını gerekli yerde oluşturmadıysanız, bu scriptin çalıştığı yolda da oluşturabilir ve sdk'yı bu şekilde de kullanabilirsiniz.
2- Ramdisk
Neden ramdisk'e ihtiyacımız var gibi bir soru gelebilir akla. Kısaca söyleyecek olursak, yapacağımız göç esnasında bazı VM'leri mevcut haliyle direkt göç ettirmek mümkün olmayacak, bu VM'leri snapshot alıp o snapshot imajından kaldıracağız. Hatta bazı VM'ler OpenStack kurulumumuz tarafından sağlanan imajlar yerine, kullanıcı tarafından yüklenmiş imajlardan üretilmiş olacaklar. Bu imajların hepsini oldstack glance'ı üzerinden indirip, newstack tarafına yüklememiz gerekecek.
Eğer bunu sabit diskimiz üzerinde yaparsak hem yavaşlarız, hemde diskimizi boş yere yıpratmış oluruz. Bu sebeple göçü gerçekleştireceğimiz sisteme, mevcut oldstack üzerinde bulunan göç edecek en büyük imaj dosyasından daha büyük bir ramdisk yaratıp bunu mount edeceğiz.
Öncelikle sistemimizde yeterince boşta ram olup olmadığını kontrol edelim.
free -h
Çıktı kişisel bilgisayarım için aşağıdaki gibi olmakta.
Buradan gördüğümüz kadarıyla, gönül rahatlığıyla 20GB'lık bir ramdisk ayırabiliriz. Sırasıyla ramdisk için bir yol yaratalım, ve o yola gerekli-gereksiz tüm izinleri verelim.
sudo mkdir /tmp/ramdisk
sudo chmod 777 /tmp/ramdisk
sudo mount -t tmpfs -o size=20G mytemporaryramdisk /tmp/ramdisk
Ramdiskimizi kontrol edecek olursak edelim:
Ramdiskimiz yerinde görünüyor, peki 10GB lık bir dosya oluşturursak gerçekten boşta kalan ram hacmimizden harcayacak mıyız?
Beklediğimiz gibi 26GB olan boşta ram miktarımız 16GB'a düşmüş. Yani ramdiskimiz çalışıyor. Oluşturduğumuz 10GB'lık dosyayı silerek ramdisk işimizide tamamlayalım.
rm /tmp/ramdisk/deneme.file
sudo umount /tmp/ramdisk
komutu ile ramdisk'i kaldırabilirsiniz. Oluşturduğumuz yol kalacak fakat ramdisk bırakılacak, yani içineki dosyaları kaybedeceğiz. Sırf bu sebepten ramdisk kullandığınız cihazlarınızın herhangi bir elektrik kesintisinde veri kaybı yaşamaması için başka bir güç kaynağından beslenip çalışabiliyor olması iyi olacaktır.
3- NFS Bağlantısı
Bu işlemleri gerçekleştireceğimiz cihazın OpenStack kurulumlarında olduğu gibi cinder ve nova servislerinin bağlı olduğu yollara bağlanabilmesi gerekmekte. Bu sebeple gerekli NFS bağlantılarını da sağlayalım.
sudo apt -y install nfs-common
Sonrasında nfsserver üzerinde bulunan export yollarına bakalım.
showmount -e 10.10.10.2
Gerekli yolları ortamımızda oluşturarak mount edelim:
sudo mkdir -p /mnt/instances
sudo mkdir -p /mnt/cinder
sudo mount 10.10.10.2:/mnt/nfs_pool/instances /mnt/instances
sudo mount 10.10.10.2:/mnt/nfs_pool/cinder /mnt/cinder
Kontrol edelim:
Hazırlık işleri buraya kadar, artık Kullanıcı Göçü aşamasına geçebiliriz.
OpenStack'ten OpenStack'e Göç:
- Yazı Dizisi
- Kurulum Bilgileri
- Hazırlık
- Kullanıcı Göçü
- Proje Göçü
- Nitelik Göçü
- Güvenlik Göçü
- Ağ Göçü
- Devam Edecek..
Teşekkür:
Ana fotoğraf: Noah Holm orjinaline Unsplash üzerinden ulaşabilirsiniz.