Persyaratan image

Linux

Untuk image berbasis Linux untuk memiliki fungsi penuh dalam cloud OpenStack Compute, ada beberapa persyaratan. Untuk itui, Anda dapat memenuhi persyaratan dengan menginstal paket cloud-init. Baca bagian ini sebelum Anda membuat image Anda sendiri untuk memastikan bahwa image mendukung fitur OpenStack dimana Anda berencana untuk menggunakannya.

  • Partisi disk dan mengubah ukuran partisi root pada boot (cloud-init)

  • Tidak informasi alamat MAC hard-coded

  • SSH server running

  • Firewall nonaktif

  • Akses instance menggunakan ssh public key (cloud-init)

  • Proses data pengguna dan metadata lainnya (cloud-init)

  • Paravirtualized Xen mendukung Linux kernel (Xen hypervisor hanya dengan Linux kernel version < 3.0)

Partisi disk dan mengubah ukuran partisi root pada boot (cloud-init)

Ketika Anda membuat image Linux, Anda harus memutuskan bagaimana cara partisi disk. Pilihan metode partisi dapat mempengaruhi fungsi perubahan ukuran, seperti yang dijelaskan di bagian berikut.

Ukuran disk pada image mesin virtual ditentukan saat Anda awalnya membuat image. Namun, OpenStack memungkinkan Anda meluncurkan instance dengan drive ukuran berbeda dengan menentukan rasa yang berbeda. Misalnya, jika image Anda dibuat dengan disk 5 GB, dan Anda meluncurkan sebuah instance dengan rasa m1.small. Contoh mesin virtual yang dihasilkan memiliki, secara default, ukuran disk utama sebesar 20 GB. Ketika disk untuk sebuah instance diubah ukurannya, angka nol akan ditambahkan sampai akhir.

Image Anda harus dapat mengubah ukuran partisi pada boot untuk mencocokkan ukuran yang diminta oleh pengguna. Jika tidak, setelah instance boot, Anda harus secara manual mengubah ukuran partisi untuk mengakses penyimpanan tambahan dimana Anda memiliki akses ketika ukuran disk dibuat, ukuran disk ini terkait dengan flavor melebihi ukuran disk dengan image yang Anda ciptakan.

Xen: satu partisi ext3/ext4 (tanpa LVM)

Jika Anda menggunakan driver OpenStack XenAPI, layanan Compute secara otomatis menyesuaikan partisi dan sistem file instance Anda pada saat boot. Perubahan secara otomatis terjadi jika kondisi berikut ini semua benar:

  • auto_disk_config=True diatur sebagai properti pada image di registri image.

  • Disk pada image hanya memiliki satu partisi.

  • Sistem file pada satu partisi adalah ext3 atau ext4.

Oleh karena itu, jika Anda menggunakan Xen, kami sarankan bahwa ketika Anda membuat image Anda, Anda membuat satu partisi ext3 atau ext4 (tidak dikelola oleh LVM). Jika tidak, akan membaca terus.

Non-Xen dengan cloud-init/cloud-tools: satu partisi ext3/ext4 (tanpa LVM)

Anda harus mengkonfigurasi item ini untuk image Anda:

  • Tabel partisi untuk image menggambarkan ukuran image asli.

  • Sistem file untuk image mengisi ukuran image asli.

Kemudian, selama proses boot, Anda harus:

  • Lakukan modifikasi tabel partisi dengan memperhatikan akan ruang tambahan:

    • Jika Anda tidak menggunakan LVM, Anda harus memodifikasi tabel untuk memperluas (extend) partisi root yang ada untuk mencakup ruang tambahan ini.

    • Jika Anda menggunakan LVM, Anda dapat menambahkan entri LVM baru ke dalam tabel partisi, membuat volume fisik LVM baru, tambahkan ke grup volume, dan memperluas partisi logical dengan root volume.

  • Mengubah ukuran sistem akar berkas volume.

Bergantung pada distribusi Anda, cara termudah untuk mendukungnya adalah memasang di image Anda:

  • Paket cloud-init,

  • Paket cloud-utils, dimana, pada Ubuntu dan Debian, juga berisi alat growpart untuk memperluas partisi,

  • Jika Anda menggunakan Fedora, CentOS 7, atau RHEL 7, paket cloud-utils-growpart, yang berisi alat growpart untuk memperluas partisi,

  • jika anda menggunakan Ubuntu atau Debian, paket cloud-initramfs-growroot , dimana mendukung resizing partisi root pada boot pertama.

Dengan paket ini terinstal, image melakukan partisi root resize saat boot. Misalnya, di file /etc/rc.local.

Jika Anda tidak dapat menginstal cloud-initramfs-tools, Robert Plestenjak memiliki proyek GitHub disebut linux-rootfs-resize yang berisi script yang memperbarui ramdisk dengan menggunakan growpart sehingga image dapat mengubah ukuran secara benar pada boot.

Jika Anda bisa menginstal paket cloud-init dan cloud-utils, kami menyarankan agar saat Anda membuat image, Anda membuat partisi ext3 atau ext4 tunggal (tidak dikelola oleh LVM).

Non-Xen tanpa cloud-init/cloud-tools: LVM

Jika Anda tidak dapat menginstal cloud-init dan cloud-tools dalam guest Anda, dan Anda ingin mendukung resize (perubahan ukuran), Anda harus menulis skrip dimana image Anda berjalan pada boot untuk memodifikasi tabel partisi. Dalam hal ini, kami sarankan menggunakan LVM untuk mengelola partisi Anda. Karena keterbatasan dalam kernel Linux (seperti tulisan ini), Anda tidak dapat mengubah tabel partisi dari disk baku (raw disk) yang memiliki partisi saat dipasang, tetapi Anda dapat melakukan ini untuk LVM.

Skrip Anda harus melakukan sesuatu seperti berikut:

  1. Lakkan deteksi jika ada ruang tambahan tersedia pada disk. Misalnya, mengurai output parted /dev/sda --script "print free".

  2. Buat partisi LVM baru dengan ruang tambahan. Sebagai contoh, parted /dev/sda --script "mkpart lvm ...".

  3. Buat volume fisik baru. Sebagai contoh, pvcreate /dev/sda6.

  4. Perluas (extend) kelompok volume dengan partisi fisik ini. Sebagai contoh, vgextend vg00 /dev/sda6.

  5. Perluas volume logis yang terkandung partisi root dengan luasan ruang. Sebagai contoh, lvextend /dev/mapper/node-root /dev/sda6.

  6. Ubah ukuran sistem file root. Sebagai contoh, resize2fs /dev/mapper/node-root.

Anda tidak perlu partisi /boot kecuali image Anda adalah distribusi Linux yang lebih tua yang mengharuskan dimana /boot tidak dikelola oleh LVM.

Tidak informasi alamat MAC hard-coded

Anda harus menghapus aturan kaku (persistence rule) jaringan dalam image karena mereka akan menyebabkan interface jaringan dalam instance untuk muncul sebagai interface bukannya eth0. Hal ini karena image Anda memiliki catatan alamat MAC dari kartu antarmuka jaringan ketika pertama kali diinstal, dan alamat MAC ini berbeda setiap kali instance boot. Anda harus mengubah file berikut:

  • Ganti /etc/udev/rules.d/70-persistent-net.rules dengan file kosong (berisi aturan kaku (persistence rule) jaringan, termasuk alamat MAC).

  • Ganti /lib/udev/rules.d/75-persistent-net-generator.rules dengan file kosong (file ini menghasilkan file di atas).

  • Hapus baris HWADDR dari /etc/sysconfig/network-scripts/ifcfg-eth0 image berbasis Fedora.

Catatan

Jika Anda menghapus file aturan kaku jaringan, Anda mungkin mendapatkan peringatan udev kernel pada saat boot, itulah sebabnya mengapa kami sarankan menggantinya dengan file kosong sebagai gantinya.

Pastikan server ssh berjalan

Anda harus menginstal server ssh ke dalam image dan memastikan bahwa server itu dimulai pada boot, atau Anda tidak dapat terhubung ke instance Anda dengan menggunakan ssh ketika server boot dalam OpenStack. Paket ini biasanya disebut openssh-server.

Firewall nonaktif

Secara umum, kami menyarankan Anda menonaktifkan firewall apapun di dalam image Anda dan gunakan kelompok keamanan OpenStack untuk membatasi akses ke instance. Alasannya adalah bahwa kepemilikan firewall yang terpasang pada instance Anda dapat membuatnya lebih sulit untuk memecahkan masalah jaringan jika Anda tidak dapat terhubung ke instance Anda.

Akses instance dengan menggunakan ssh public key (cloud-init)

Cara khas dimana pengguna mengakses mesin virtual yang berjalan pada OpenStack adalah dengan penggunaan ssh dalam otentikasi kunci publik. Untuk dapat berjalan, image mesin virtual Anda harus dikonfigurasi untuk men-download kunci publik ssh dari layanan metadata OpenStack atau drive yang terkonfigurasi, pada saat boot.

Jika agen XenAPI dan cloud-init berada dalam image, cloud-init akan menangani injeksi ssh-key. Sistem ini mengasumsikan bahwa cloud-init ada ketika image memiliki properti cloud_init_installed.

Gunakan cloud-init untuk mengambil kunci publik (public key).

Paket cloud-init secara otomatis mengambil kunci publik dari server metadata dan menempatkan kunci di akun. Akunnya bervariasi menurut distribusi. Pada mesin virtual berbasis Ubuntu, akun ini disebut ubuntu, pada mesin virtual berbasis Fedora, akunnya disebut fedora, dan pada mesin virtual berbasis CentOS, akun tersebut disebut ``centos` `.

Anda dapat mengubah nama akun yang digunakan oleh cloud-init dengan mengedit file /etc/cloud/cloud.cfg dan menambahkan sebuah baris dengan pengguna yang berbeda. Misalnya, untuk mengkonfigurasi cloud-init untuk meletakkan kunci di akun bernama admin, gunakan sintaks berikut di file konfigurasi:

users:
  - name: admin
    (...)

Tulis skrip khusus untuk mengambil kunci publik

Jika Anda tidak dapat atau tidak mau memasang cloud-init dalam guest, Anda dapat menulis skrip khusus untuk mengambil kunci publik dan menambahkannya ke akun pengguna.

Untuk mengambil kunci publik ssh dan menambahkannya ke account root, edit file /etc/rc.local dan tambahkan baris berikut sebelum baris touch /var/lock/subsys/local. Fragmen kode ini diambil dari rackerjoe oz-image-build CentOS 6 template.

if [ ! -d /root/.ssh ]; then
  mkdir -p /root/.ssh
  chmod 700 /root/.ssh
fi

# Fetch public key using HTTP
ATTEMPTS=30
FAILED=0
while [ ! -f /root/.ssh/authorized_keys ]; do
  curl -f http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key > /tmp/metadata-key 2>/dev/null
  if [ $? -eq 0 ]; then
    cat /tmp/metadata-key >> /root/.ssh/authorized_keys
    chmod 0600 /root/.ssh/authorized_keys
    restorecon /root/.ssh/authorized_keys
    rm -f /tmp/metadata-key
    echo "Successfully retrieved public key from instance metadata"
    echo "*****************"
    echo "AUTHORIZED KEYS"
    echo "*****************"
    cat /root/.ssh/authorized_keys
    echo "*****************"
  else
    FAILED=`expr $FAILED + 1`
    if [ $FAILED -ge $ATTEMPTS ]; then
      echo "Failed to retrieve public key from instance metadata after $FAILED attempts, quitting"
      break
    fi
    echo "Could not retrieve public key from instance metadata (attempt #$FAILED/$ATTEMPTS), retrying in 5 seconds..."
    sleep 5
  fi
done

Catatan

Beberapa klien VNC menggantikan : (colon) dengan ; (semicolon) and _ (underscore) dengan - (hyphen). Jika mengedit file selama sesi VNC, pastikan penggantian karakter itu seperti http: tidak http; dan authorized_keys tidak authorized-keys.

Proses pengguna data dan metadata lainnya (cloud-init)

Selain kunci publik ssh, image mungkin memerlukan informasi tambahan dari OpenStack, seperti memasukkan data pengguna kepada instance, yang dikirimkan pengguna saat meminta image. Misalnya, Anda mungkin ingin menetapkan nama host instance saat di-boot. Atau, Anda mungkin ingin mengkonfigurasi image Anda sehingga konten data pengguna dijalankan sebagai script saat booting.

Anda dapat mengakses informasi ini melalui layanan metadata atau mengacu Store metadata on the configuration drive. Sebagai layanan metadata OpenStack kompatibel dengan versi 2009/04/04 layanan metadata Amazon EC2, carilah keterangan dokumentasi Amazon EC2 di Using Instance Metadata untuk rincian tentang bagaimana mengambil data pengguna.

Cara termudah untuk mendukung tipe fungsi adalah dengan menginstal paket cloud-init ke image Anda, dimana image dikonfigurasi secara default untuk memperlakukan data pengguna sebagai skrip executable, dan menetapkan nama host.

Pastikan image menulis catatan booting (boot log) ke konsol

Anda harus mengkonfigurasi image sehingga kernel menulis log boot ke perangkat ttyS0. Secara khusus, argumen console = tty0 console = ttyS0,115200n8 harus dilewatkan ke kernel saat boot.

Jika image Anda menggunakan grub2 sebagai boot loader, baris grub ini harus ada di file konfigurasi grub. Sebagai contoh,``/boot/grub/grub.cfg``, yang terlihat seperti ini:

linux /boot/vmlinuz-3.2.0-49-virtual root=UUID=6d2231e4-0975-4f35-a94f-56738c1a8150 ro console=tty0 console=ttyS0,115200n8

Jika console = tty0 console = ttyS0,115200n8 tidak muncul, Anda harus memodifikasi konfigurasi grub Anda. Secara umum, Anda seharusnya tidak mengupdate grub.cfg secara langsung, karena dibuat secara otomatis. Sebagai gantinya, Anda harus mengedit file /etc/default/grub dan mengubah nilai variabel GRUB_CMDLINE_LINUX_DEFAULT:

GRUB_CMDLINE_LINUX_DEFAULT="console=tty0 console=ttyS0,115200n8"

Selanjutnya, perbarui konfigurasi grub. Pada sistem operasi berbasis Debian seperti Ubuntu, jalankan perintah ini:

# update-grub

Pada sistem berbasis Fedora, seperti RHEL dan CentOS, dan pada openSUSE, jalankan perintah ini:

# grub2-mkconfig -o /boot/grub2/grub.cfg

Paravirtualized Xen mendukung dalam kernel (hanya Xen hypervisor)

Sebelum Linux kernel versi 3.0, percabangan utama kernel Linux tidak memiliki dukungan untuk instance mesin virtual paravirtualized Xen (dimana Xen memanggil DomU guest). Jika Anda menjalankan hypervisor Xen dengan paravirtualization, dan Anda ingin membuat image untuk distribusi Linux yang lebih tua yang memiliki kernel sebelum 3.0, Anda harus memastikan bahwa image boot kernel yang telah dikompilasi dengan dukungan Xen.

Mengelola cache image

Gunakan opsi di file nova.conf untuk mengontrol apakah, dan untuk berapa lama, image dasar yang tidak digunakan disimpan dalam /var/lib/nova/instances/_base/. Jika Anda telah mengkonfigurasi migrasi langsung (live migration) instance, semua node komputasi Anda akan berbagi dalam satu kesamaan direktori /var/lib/nova/instances/.

Untuk informasi tentang image libvirt di OpenStack, lihat The life of an OpenStack libvirt image from Pádraig Brady.

Opsi konfigurasi manajemen cache image

Configuration option=Default value

(Tipe) deskripsi

preallocate_images=none

(StrOpt) VM image preallocation mode:

none (tidak ada)

Tidak ada pengadaan storage terjadi di depan.

space

Penyimpanan sepenuhnya dialokasikan pada instance awal. Image $instance_dir/ adalah fallocated untuk segera menentukan apakah cukup ruang tersedia, dan untuk kemungkinan meningkatkan kinerja VM I/O karena menghindari alokasi yang sedang berlangsung, dan lokalitas yang lebih baik dari alokasi blok.

remove_unused_base_images=True

(BoolOpt) Apakah image dasar yang tidak terpakai harus dihapus? Bila diatur ke True, interval dimana image dasar yang dihapus akan diatur dengan dua pengaturan berikut. Jika diatur ke False, image dasar tidak pernah dihapus oleh Compute.

remove_unused_original_minimum_age_seconds=86400

(IntOpt) Image dasar unresized yang tidak terpakai lebih muda dari ini tidak dihapus. Default adalah 86400 detik, atau 24 jam.

remove_unused_resized_minimum_age_seconds=3600

(IntOpt) Image dasar ukurannya yang tidak terpakai lebih muda dari ini tidak dihapus. Default adalah 3600 detik, atau satu jam.

To see how the settings affect the deletion of a running instance, check the directory where the images are stored:

# ls -lash /var/lib/nova/instances/_base/

Dalam file /var/log/compute/compute.log, carilah pengenal (identifier):

2012-02-18 04:24:17 41389 WARNING nova.virt.libvirt.imagecache [-] Unknown base file: /var/lib/nova/instances/_base/06a057b9c7b0b27e3b496f53d1e88810a0d1d5d3_20
2012-02-18 04:24:17 41389 INFO nova.virt.libvirt.imagecache [-] Removable base files: /var/lib/nova/instances/_base/06a057b9c7b0b27e3b496f53d1e88810a0d1d5d3 /var/lib/nova/instances/_base/06a057b9c7b0b27e3b496f53d1e88810a0d1d5d3_20
2012-02-18 04:24:17 41389 INFO nova.virt.libvirt.imagecache [-] Removing base file: /var/lib/nova/instances/_base/06a057b9c7b0b27e3b496f53d1e88810a0d1d5d3

Karena 86400 detik (24 jam) adalah waktu default untuk remove_unused_original_minimum_age_seconds, Anda dapat menunggu interval waktu untuk melihat image dasar yang dihapus, atau mengatur nilai untuk periode waktu yang lebih singkat dalam file nova.conf. Restart semua layanan nova setelah mengubah pengaturan di file nova.conf.