OpenStack'ten OpenStack'e Göç - Hazırlık


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

pip3list

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.

userlist

Çı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.

free

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:

ramdisk

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?

fallocate

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

exports

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:

mounts

Hazırlık işleri buraya kadar, artık Kullanıcı Göçü aşamasına geçebiliriz.

OpenStack'ten OpenStack'e Göç:

  1. Yazı Dizisi
  2. Kurulum Bilgileri
  3. Hazırlık
  4. Kullanıcı Göçü
  5. Proje Göçü
  6. Nitelik Göçü
  7. Güvenlik Göçü
  8. Ağ Göçü
  9. Devam Edecek..

Teşekkür:

Ana fotoğraf: Noah Holm orjinaline Unsplash üzerinden ulaşabilirsiniz.

Previous Next