Panduan ini untuk pengembang perangkat lunak berpengalaman yang ingin mengerahkan aplikasi ke awan OpenStack.
Jika Anda sudah familiar dengan OpenStack namun belum membuat aplikasi cloud secara umum atau aplikasi OpenStack pada khususnya, bagian ini mengajarkan Anda bagaimana memprogram dengan komponen OpenStack.
Menerapkan aplikasi di lingkungan awan bisa sangat berbeda dengan menerapkannya di lingkungan TI tradisional. Panduan ini mengajarkan Anda cara menerapkan aplikasi pada OpenStack dan beberapa praktik terbaik untuk pengembangan aplikasi awan.
Tutorial ini menunjukkan dua aplikasi. Aplikasi pertama adalah generator fraktal sederhana yang menggunakan persamaan matematis untuk menghasilkan keindahan fractal images. Kami menunjukkan aplikasi ini secara keseluruhan sehingga Anda bisa membandingkannya dengan aplikasi kedua yang lebih kuat.
Aplikasi kedua adalah aplikasi OpenStack yang memungkinkan Anda untuk:
Buat dan hapus sumber daya komputasi. Sumber daya ini adalah instance mesin virtual tempat aplikasi Fractals berjalan.
Buat keputusan arsitektur cloud-related seperti mengubah fraction menjadi layanan micro-service dan memodulasinya.
Skala sumber daya yang tersedia naik dan turun.
Gunakan penyimpanan Object dan Block untuk file dan database persistence.
Gunakan layanan Orchestration untuk menyesuaikan diri secara otomatis dengan lingkungan.
Sesuaikan jaringan untuk kinerja dan segregasi yang lebih baik.
Jelajahi dan terapkan fitur awan OpenStack yang canggih.
Siapapun dengan latar belakang pemrograman dapat dengan mudah membaca kode dalam panduan ini. Meskipun panduan ini berfokus pada SDK tertentu, Anda dapat menggunakan bahasa dan toolkit lain dengan awan OpenStack:
Bahasa |
Nama |
Deskripsi |
URL |
---|---|---|---|
Python |
OpenStack SDK |
Perpustakaan berbasis Python yang resmi untuk OpenStack. |
|
Python |
Perpustakaan berbasis Python yang dikelola Apache Foundation. Gunakan untuk bekerja dengan beberapa jenis awan. |
https://libcloud.readthedocs.org/en/latest/compute/drivers/openstack.html |
|
Python |
Shade |
Perpustakaan berbasis Python yang dikembangkan oleh tim OpenStack Infra. Gunakan untuk mengoperasikan beberapa awan OpenStack. |
|
Java |
Perpustakaan berbasis Java yang dikelola Apache Foundation. Gunakan untuk bekerja dengan beberapa jenis awan. |
||
Ruby |
SDK berbasis Ruby. Gunakan untuk bekerja dengan beberapa awan. |
https://github.com/fog/fog-openstack/blob/master/docs/getting_started.md |
|
node.js |
SDK berbasis Node.js. Gunakan bekerja dengan banyak awan. |
https://github.com/pkgcloud/pkgcloud/tree/master/docs/providers/openstack |
|
PHP |
Sebuah perpustakaan berbasis PHP. Gunakan untuk menulis kode PHP yang bekerja dengan awan OpenStack. |
http://php-opencloud.readthedocs.org/en/latest/getting-started-with-openstack.html |
|
.NET Framework |
OpenStack SDK untuk Microsoft .NET |
Perpustakaan berbasis .NET. Gunakan untuk menulis kode C ++ atau C # untuk aplikasi Microsoft. |
|
Go |
SDK berbasis go. Gunakan untuk menulis kode Golang yang bekerja dengan awan OpenStack. |
Untuk daftar SDK yang tersedia, lihat Software Development Kits.
Versi lain dari panduan ini menunjukkan cara menggunakan SDK dan bahasa lainnya untuk menyelesaikan tugas ini. Jika Anda adalah pengembang untuk toolkit lain yang ingin disertakan dalam panduan ini, jangan ragu untuk mengirimkan cuplikan kode. Untuk informasi lebih lanjut, hubungi anggota OpenStack Documentation team.
Kami berasumsi bahwa Anda sudah dapat mengakses awan OpenStack. Anda harus memiliki sebuah proyek, juga dikenal sebagai tenant (penyewa), dengan kuota minimal enam instance. Karena aplikasi Fractals berjalan di distribusi berbasis Ubuntu, Debian, Fedora, dan openSUSE, Anda harus membuat instance yang menggunakan salah satu dari sistem operasi ini.
Untuk berinteraksi dengan awan, Anda juga harus memiliki
OpenStack Cloud SDK for Microsoft .NET 1.4.0.1 or later installed.
Catatan
Untuk menginstal OpenStack .NET SDK, gunakan NeGet Package Manager yang disertakan dengan Visual Studio dan Xamarin Studio. Anda cukup menambahkan sebuah paket bernama 'openstack.net' dan NeGet Package Manager secara otomatis menginstal dependensi yang diperlukan.
Peringatan
Dokumen ini belum selesai untuk .NET SDK.
Dapatkan informasi berikut dari penyedia awan Anda:
auth URL
user name
password
ID atau nama proyek (proyek juga dikenal sebagai tenant/penyewa)
cloud region
Anda juga bisa mendownload file RC OpenStack dari dashboard Horizon OpenStack. Masuk ke dasbor dan klik Project->Access & Security->API Access->Download OpenStack RC file. Jika Anda menggunakan metode ini, perhatikan bahwa "URL auth" tidak termasuk jalurnya. Misalnya, jika file openrc.sh
Anda menunjukkan:
export OS_AUTH_URL=http://controller:5000/v2.0
URL auth sebenarnya adalah:
http://controller:5000
Dalam tutorial ini, Anda berinteraksi dengan awan OpenStack Anda melalui SDK yang Anda pilih di "Choose your OpenStack SDK." Panduan ini mengasumsikan bahwa Anda tahu cara menjalankan code snippet (cuplikan kode) dalam bahasa pilihan Anda.
Untuk menggunakan OpenStack .NET SDK, tambahkan kode berikut di bagian namespace yang dibutuhkan.
using net.openstack.Core.Domain;
using net.openstack.Core.Providers;
using net.openstack.Providers.Rackspace;
Karena semua titik akhir layanan menggunakan Layanan Identity untuk otentikasi dan otorisasi, letakkan kode berikut di fungsi entry-point 'void Main ()'.
var username = "your_auth_username";
var password = "your_auth_password";
var project_name = "your_project_name";
var project_id = "your_project_id";
var auth_url = "http://controller:5000/v2.0";
var region = "your_region_name";
var networkid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
var identity = new CloudIdentityWithProject () {
Username = username,
Password = password,
ProjectId = new ProjectId(project_id),
ProjectName = project_name
};
var identityProvider = new OpenStackIdentityProvider (
new Uri (auth_url));
var conn = new CloudServersProvider (identity, identityProvider);
Catatan
Karena tutorialnya menggunakan kembali obyek conn
, pastikan selalu ada yang berguna.
Untuk menjalankan aplikasi Anda, Anda harus meluncurkan sebuah instance. Contoh ini berfungsi sebagai mesin virtual.
Untuk meluncurkan sebuah instance, Anda memilih flavor dan image. Flavor mewakili ukuran instance, termasuk jumlah CPU dan jumlah RAM dan ruang disk. Image adalah instalasi OS yang disiapkan dari mana Anda mengkloning instance Anda. Saat Anda melakukan booting di awan publik, flavor yang lebih besar bisa lebih mahal daripada yang lebih kecil dari segi sumber daya dan biaya moneter.
Untuk daftar image yang tersedia di awan Anda, jalankan beberapa panggilan API:
var images = conn.ListImages (region: region);
foreach (var image in images) {
Console.WriteLine (string.Format(
"Image Id: {0} - Image Name: {1}",
image.Id,
image.Name));
}
Kode ini menghasilkan output seperti ini:
Image Id: dce1a289-2ad5-4aaa-a7a6-fe30adc2094e - Image Name: snap1
Image Id: 97f55846-6ea5-4e9d-b437-bda97586bd0c - Image Name: cirros-0.3.4-x86_64-uec
Image Id: 3e0e8270-0da4-4fec-bfc7-eeb763604cad - Image Name: cirros-0.3.4-x86_64-uec-ramdisk
Image Id: 0b151382-d2f1-44d7-835b-6408bd523917 - Image Name: cirros-0.3.4-x86_64-uec-kernel
Anda juga bisa mendapatkan informasi tentang flavor yang tersedia:
var flavors = conn.ListFlavors (region: region);
foreach (var flavor in flavors) {
Console.WriteLine (string.Format(
"Flavor Id: {0} - Flavor Name: {1}",
flavor.Id,
flavor.Name));
}
Kode ini menghasilkan output seperti ini:
Flavor Id: 1 - Flavor Name: m1.tiny
Flavor Id: 2 - Flavor Name: m1.small
Flavor Id: 3 - Flavor Name: m1.medium
Flavor Id: 4 - Flavor Name: m1.large
Flavor Id: 42 - Flavor Name: m1.nano
Flavor Id: 5 - Flavor Name: m1.xlarge
Flavor Id: 84 - Flavor Name: m1.micro
Flavor dan image Anda akan berbeda, tentu saja.
Pilih flavor dan image untuk instance Anda. Anda memerlukan RAM 1GB, 1 CPU, dan disk 1GB. Contoh ini menggunakan image Ubuntu dengan sedikit flavor, yang merupakan pilihan yang aman. Di bagian tutorial berikutnya dalam panduan ini, Anda harus mengubah ID image dan flavor agar sesuai dengan image dan flavor yang Anda pilih.
Jika image yang Anda inginkan tidak tersedia di awan Anda, biasanya Anda dapat mengunggahnya berdasarkan setelan kebijakan awan Anda. Untuk informasi tentang cara mengunggah image, lihat obtaining images.
Tetapkan variabel image dan ukuran ke nilai yang sesuai untuk awan Anda. Kami akan menggunakan variabel-variabel ini di bagian selanjutnya.
Pertama, beritahu koneksi untuk mendapatkan image tertentu dengan menggunakan ID image yang Anda pilih di bagian sebelumnya:
var image_id = "97f55846-6ea5-4e9d-b437-bda97586bd0c";
var _image = conn.GetImage(image_id, region:region);
Console.WriteLine (string.Format(
"Image Id: {0} - Image Name: {1}",
_image.Id,
_image.Name));
Kode ini menghasilkan output seperti ini:
Image Id: 97f55846-6ea5-4e9d-b437-bda97586bd0c - Image Name: cirros-0.3.4-x86_64-uec
Selanjutnya, beritahu script yang flavor ingin Anda gunakan:
var flavor_id = "2";
var _flavor = conn.GetFlavor (flavor_id, region: region);
Console.WriteLine (string.Format(
"Flavor Id: {0} - Flavor Name: {1}",
_flavor.Id,
_flavor.Name));
Kode ini menghasilkan output seperti ini:
Flavor Id: 2 - Flavor Name: m1.small
Sekarang, Anda bisa meluncurkan instance.
Gunakan flavor dan image pilihan Anda untuk membuat sebuah instance.
Catatan
Contoh pembuatan instance berikut mengasumsikan bahwa Anda memiliki jaringan single-tenant. Jika Anda menerima kesalahan'Exception: 400 Bad Request Multiple possible networks found, use a Network ID to be more specific', Anda memiliki beberapa jaringan multiple-tenant. Anda harus menambahkan parameter networks ke panggilan yang membuat server. Lihat Appendix untuk rinciannya.
Buat instance.
Catatan
SDK Anda mungkin memanggil instance 'node' atau 'server'.
var instance_name = "testing";
var testing_instance = conn.CreateServer (instance_name,
_image.Id,
_flavor.Id,
region: region,
networks: new List<String> () { networkid });
Console.WriteLine (string.Format(
"Instance Id: {0} at {1}",
testing_instance.Id,
testing_instance.Links
));
Kode ini menghasilkan output seperti ini:
Instance Id: 4e480ef1-68f0-491f-b237-d9b7f500ef24 at net.openstack.Core.Domain.Link[]
Jika Anda mendaftar instance yang ada:
var instances = conn.ListServers(region:region);
foreach (var instance in instances) {
Console.WriteLine (string.Format(
"Instance Id: {0} at {1}",
testing_instance.Id,
testing_instance.Links));
}
Instance baru muncul.
Instance Id: 4e480ef1-68f0-491f-b237-d9b7f500ef24 at net.openstack.Core.Domain.Link[]
Sebelum melanjutkan, Anda harus melakukan satu hal lagi.
Sumber daya awan, seperti instance yang tidak Anda gunakan lagi, bisa menghabiskan biaya. Untuk menghindari biaya tak terduga, hancurkan sumber daya awan.
conn.DeleteServer(testing_instance.Id, region:region);
Jika Anda mendaftar instance lagi, instance menghilang.
Biarkan shell Anda terbuka untuk menggunakannya pengerahan instance lain di bagian ini.
Sekarang setelah Anda tahu cara membuat dan menghapus instance, Anda dapat menerapkan contoh aplikasi tersebut. Instance yang Anda buat untuk aplikasi ini mirip dengan instance pertama yang Anda buat, tapi kali ini, kami memperkenalkan beberapa konsep tambahan.
Catatan
Konektivitas internet dari instance awan Anda diperlukan untuk mendownload aplikasi.
Saat Anda membuat sebuah instance untuk aplikasi ini, Anda ingin memberikan sedikit informasi lebih banyak daripada yang Anda berikan pada instance kosong yang baru saja Anda buat dan hapus. Kami akan membahas lebih terperinci di bagian selanjutnya, tapi untuk saat ini, cukup buat sumber daya berikut sehingga Anda bisa memberi mereka instance:
Pasangan kunci Untuk mengakses instance Anda, Anda harus mengimpor kunci publik SSH ke OpenStack untuk membuat pasangan kunci. OpenStack menginstal pasangan kunci ini pada instance baru. Biasanya, kunci publik Anda ditulis ke .ssh/id_rsa.pub
. Jika Anda tidak memiliki file kunci publik SSH, ikuti these instructions sebelumnya. Kami akan membahas instruksi ini secara mendalam Pengantar arsitektur aplikasi fraktal.
Pada contoh berikut, mengatur pub_key_file
ke lokasi file kunci SSH publik Anda.
Akses jaringan. Secara default, OpenStack menyaring semua lalu lintas. Anda harus membuat grup keamanan dan menerapkannya pada instance Anda. Grup keamanan mengizinkan akses HTTP dan SSH. Kami akan membahas lebih rinci Pengantar arsitektur aplikasi fraktal.
Userdata (dara pengguna). Selama pembuatan instance, Anda dapat menyediakan userdata ke OpenStack untuk mengonfigurasi instance setelah booting. Layanan cloud-init menerapkan data pengguna ke sebuah instance. Anda harus melakukan pra-instal layanan cloud-init pada image yang Anda pilih. Kami akan membahas lebih rinci Pengantar arsitektur aplikasi fraktal.
Sekarang, Anda bisa boot dan mengkonfigurasi instance.
Gunakan image, flavor, key pair, dan userdata untuk membuat sebuah instance. Setelah Anda meminta instance, tunggulah untuk membangunnya.
Ketika instance boot, nilai variabel ex_userdata menginstruksikan instance untuk menerapkan aplikasi Fractals.
Kami meliput networking secara rinci di Jaringan.
Untuk melihat aplikasi berjalan, Anda harus tahu di mana mencarinya. Secara default, instance Anda memiliki akses jaringan keluar. Untuk membuat instance Anda dapat dijangkau dari Internet, Anda memerlukan alamat IP. Secara default dalam beberapa kasus, instance Anda tersedia dengan alamat IP yang dapat digunakan secara publik. Dalam kasus ini, Anda melihat alamat IP yang tercantum di bawah public_ips atau` private_ips` saat Anda mencantumkan instance. Jika tidak, Anda harus membuat dan menghubungkan alamat IP mengambang ke instance Anda.
Jalankan skrip untuk memulai pengerahan.
Menyebarkan data dan konfigurasi aplikasi ke instance bisa memakan waktu lama. Pertimbangkan menikmati secangkir kopi sambil menunggu. Setelah aplikasi menyebar, Anda dapat menggunakan browser pilihan Anda untuk mengunjungi antarmuka grafis yang mempesona di link berikut.
Catatan
Jika Anda tidak menggunakan alamat IP mengambang, ganti alamat IP lain, jika sesuai.
Jangan khawatir jika konsep ini belum sepenuhnya jelas. Dalam Pengantar arsitektur aplikasi fraktal, kami mengeksplorasi konsep ini secara lebih rinci.
Scaling out: Pelajari bagaimana melakukan skala aplikasi Anda.
Make it durable: Pelajari cara menggunakan Object Storage agar aplikasi Anda awet.
Block Storage: Migrasikan database untuk memblokir penyimpanan, atau gunakan komponen basis data as-a-service.
Orchestration: Automatically orchestrate your application.
Jaringan: Learn about complex networking.
Saran bagi pengembang baru untuk operasi: Get advice about operations.
Going crazy: Pelajari beberapa hal gila yang mungkin tidak Anda pikirkan untuk dilakukan;)
File berikut berisi semua kode dari bagian tutorial ini. Sampel kode komprehensif ini memungkinkan Anda melihat dan menjalankan kode sebagai satu skrip.
Sebelum menjalankan skrip ini, konfirmasikan bahwa Anda telah menyetel informasi autentikasi, flavor ID, dan image ID.
using System;
using System.Collections.Generic;
using net.openstack.Core.Domain;
using net.openstack.Core.Providers;
using net.openstack.Providers.Rackspace;
namespace openstack
{
class MainClass
{
public static void Main (string[] args)
{
// step-1
var username = "your_auth_username";
var password = "your_auth_password";
var project_name = "your_project_name";
var project_id = "your_project_id";
var auth_url = "http://controller:5000/v2.0";
var region = "your_region_name";
var networkid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
var identity = new CloudIdentityWithProject () {
Username = username,
Password = password,
ProjectId = new ProjectId(project_id),
ProjectName = project_name
};
var identityProvider = new OpenStackIdentityProvider (
new Uri (auth_url));
var conn = new CloudServersProvider (identity, identityProvider);
// step-2
var images = conn.ListImages (region: region);
foreach (var image in images) {
Console.WriteLine (string.Format(
"Image Id: {0} - Image Name: {1}",
image.Id,
image.Name));
}
// step-3
var flavors = conn.ListFlavors (region: region);
foreach (var flavor in flavors) {
Console.WriteLine (string.Format(
"Flavor Id: {0} - Flavor Name: {1}",
flavor.Id,
flavor.Name));
}
// step-4
var image_id = "97f55846-6ea5-4e9d-b437-bda97586bd0c";
var _image = conn.GetImage(image_id, region:region);
Console.WriteLine (string.Format(
"Image Id: {0} - Image Name: {1}",
_image.Id,
_image.Name));
// step-5
var flavor_id = "2";
var _flavor = conn.GetFlavor (flavor_id, region: region);
Console.WriteLine (string.Format(
"Flavor Id: {0} - Flavor Name: {1}",
_flavor.Id,
_flavor.Name));
// step-6
var instance_name = "testing";
var testing_instance = conn.CreateServer (instance_name,
_image.Id,
_flavor.Id,
region: region,
networks: new List<String> () { networkid });
Console.WriteLine (string.Format(
"Instance Id: {0} at {1}",
testing_instance.Id,
testing_instance.Links
));
// step-7
var instances = conn.ListServers(region:region);
foreach (var instance in instances) {
Console.WriteLine (string.Format(
"Instance Id: {0} at {1}",
testing_instance.Id,
testing_instance.Links));
}
// step-8
conn.DeleteServer(testing_instance.Id, region:region);
// step-9
// step-10
// step-11
// step-12
// step-13
// step-14
// step-15
Console.Read ();
}
}
}
Except where otherwise noted, this document is licensed under Creative Commons Attribution 3.0 License. See all OpenStack Legal Documents.