Beberapa tahun yang lalu, tren utamanya adalah otomatisasi, praktik DevOps, dan percepatan pengiriman nilai ke pasar. Home Credit Bank memutuskan untuk mengikuti perkembangan teknologi, apalagi bisikan pengguna yang bosan menunggu beberapa hari untuk menunggu sumber daya baru agar proyek penting mereka menyebar lebih keras di ruang terbuka.
Kami memutuskan untuk memulai dengan proses menyetujui aplikasi oleh departemen, yang, seperti di banyak perusahaan besar, membutuhkan waktu dan upaya. Sebagai tugas pertama, kami memilih proses menciptakan mesin virtual terlepas dari lingkungan virtualisasi. Membuat daftar tugas, kami menyadari bahwa perlu mengintegrasikan dengan sistem lain yang digunakan dalam infrastruktur bank kami, misalnya, melalui API.

Solusi yang paling cocok adalah ManageIQ . Ini adalah proyek yang diakuisisi Red Hat pada 2012 dan berdasarkan itu diciptakan produk Red Hat CloudForms komersial. Pada saat yang sama, ManageIQ tetap dalam status produk sumber terbuka dan berkembang secara paralel dengan CloudForms.
ManageIQ ditulis dalam Ruby dan mendukung sejumlah besar penyedia virtualisasi, cloud publik, dan penampung yang berbeda. Saat ini, kami menggunakan versi Gaprindashvili dalam konfigurasi Ketersediaan Tinggi di Rumah.
Bagaimana prosesnya telah berubah
Sebelumnya, setiap tim membutuhkan pengaturan terpisah dalam bidang tanggung jawabnya. Setelah persiapan awal, semua data dikumpulkan dan dikirim ke administrator, yang menggunakan dan mengkonfigurasi mesin virtual. Maka perlu untuk menginformasikan, misalnya, tim pemantauan bahwa tuan rumah baru telah muncul yang perlu ditambahkan ke pemantauan. Keterlambatan komunikasi, beban kerja spesialis, kesalahan yang disebabkan oleh faktor manusia, dapat memperpanjang proses ini menjadi beberapa hari.
Setelah memasukkan seluruh proses ke dalam ManageIQ, kami mendapatkan hasil berikut:
Perbedaan waktu disebabkan oleh fakta bahwa dalam kasus kedua, waktu tambahan diperlukan untuk menyiapkan host untuk bekerja dengan Docker, mengunduh dan mendegradasi gambar untuk wadah infrastruktur dari Artifactory, karena pada tahap ini masih belum ada akses ke Docker Hub. Dalam kasus Windows, perbedaan dicapai karena fakta bahwa, pertama, waktu pembuatan VM Linux tanpa penyesuaian adalah sekitar 2 menit, dan bahwa dari VM Windows adalah 6 menit. Kedua, menyesuaikan Windows itu sendiri membutuhkan waktu sekitar 10 menit, versus 2 menit untuk Linux.
10 menit tidak begitu cepat, mengingat bahwa sekitar 2-3 menit dihabiskan langsung pada proses pembuatan VM. Untuk sisa waktu, ManageIQ berhasil melakukan hal berikut:
- Sistem mengumpulkan parameter yang ditentukan oleh pengguna dalam formulir pemesanan dan menguraikannya menjadi variabel.
- Permintaan perubahan baru dibuat dalam sistem manajemen insiden, yang menampilkan data tentang sumber daya baru.
- Sistem Kueri Nama Sumber Daya ManageIQ mengirimkan nilai untuk sumber daya baru.
- Sistem manajemen alamat IP mengeluarkan alamat baru berdasarkan parameter yang dimasukkan.
- Catatan DNS baru terdaftar di server DNS lokal.
- Berdasarkan pada parameter, lingkungan dan beban sumber daya, jenis virtualisasi dan cluster untuk penempatan dipilih.
- Selanjutnya, proses pembuatan mesin virtual dengan parameter yang ditentukan.
- Ketika mesin virtual digunakan dari templat, Anda perlu menjalankan skrip yang akan membuat pengaturan akhir:
- ekspansi disk ke ukuran yang ditentukan,
- menghasilkan kata sandi root baru, mengubahnya di host Linux dan menulis ke manajer kata sandi,
- membuat file konfigurasi YAML untuk Puppet di GitLab,
- jalankan runbooks yang membawa pengaturan dan pembaruan yang diperlukan untuk Windows VMs atau
- luncurkan Puppet, yang akan memperbarui dan mengkonfigurasi mesin-mesin Linux.
- Setelah semua ini, permintaan perubahan yang dibuat pada langkah 2 ditutup. Data baru ditambahkan ke dalamnya, seperti alamat IP dan nama host.
- Unit baru terdaftar di Basis Manajemen Sumber Daya Komputasi (CMDB).
- Mesin virtual terdaftar di Zabbix dan ditambahkan ke pemantauan.
- Pelanggan dan pihak berkepentingan lainnya menerima email berisi informasi tentang unit baru yang dibuat menggunakan ManageIQ.
Apa yang ada di dalamnya
Mari kita mempelajari detail teknis dari produk ini. Secara default, ManageIQ dapat membuat mesin virtual dari templat. Bagaimana hal ini berbeda dari apa yang kita lakukan, misalnya, di vCenter? Jawaban yang benar bukanlah apa-apa. ManageIQ menggunakan metode yang sama dengan sistem virtualisasi, tetapi melakukannya dari satu tempat. Selain itu, Anda dapat menambahkan skrip Anda sendiri yang tidak sesuai dengan serangkaian fitur standar. Jadi, jika Anda memiliki sumber daya, misalnya, di Azure publik, di vCenter, yang digunakan pada perangkat keras Anda sendiri, ditambah kluster Kubernet berputar di tempat lain, maka semua ini dapat dikelola dengan mudah dari ManageIQ.
Selain berbagai penyedia untuk integrasi, ManageIQ memiliki alat yang mudah untuk kustomisasi. Ini, misalnya, membuat formulir yang mudah untuk menyelesaikan masalah Anda:

Berkat ini, memungkinkan untuk membuat antarmuka lengkap untuk memesan mesin virtual, menyesuaikan semua parameter yang diperlukan ke dalamnya:

Kami memilih jumlah sumber daya komputasi, OS, mengisi semua informasi tambahan yang diperlukan untuk integrasi dengan sistem eksternal. Selanjutnya, dengan menggunakan mekanisme internal (tentang mereka sedikit kemudian), sistem memilih di mana sumber daya baru akan ditempatkan: pusat data, cluster, host dan datastore dipilih tergantung pada semua parameter yang dimasukkan dan sumber daya dimuat.
Jangan lupa bahwa orang dapat memesan terlalu banyak sumber daya atau tidak sama sekali apa yang benar-benar mereka butuhkan. Di sini sistem permintaan dan konfirmasi berperan:

Sumber daya apa pun yang dipesan oleh pengguna harus disetujui oleh orang yang bertanggung jawab. Di Rumah, sekelompok arsitek melakukan ini.
Struktur otomasi
Jika Anda menguraikan semua proses otomatisasi di ManageIQ menjadi bagian-bagian kecil, Anda akan melihat struktur tertentu.
Otomasi Domain

Datastore meng-host semua domain yang dimiliki ManageIQ.
Secara default, ada domain ManageIQ, yang dikunci dan mirip dengan model referensi. Jika Anda perlu melakukan perubahan, domain lain dibuat, ke mana elemen dari domain ManageIQ disalin dan diubah untuk tugas Anda sendiri.
Otomatis Namespace

Di dalam, domain dibagi menjadi beberapa bagian yang bertanggung jawab atas proses individu: ini dapat menjadi bagian yang bertanggung jawab untuk mengelola infrastruktur (Infrastruktur) atau untuk bekerja dengan layanan (Layanan). Kami memiliki Namespace kami sendiri, yang berisi semua yang terkait dengan sistem bank.
Pertimbangkan struktur secara lebih rinci menggunakan contoh proses penyediaan untuk mesin virtual baru. Itu dijelaskan dalam Kelas Otomatis yang disebut VMProvision_VM .
Kelas Otomatis
Kelas memiliki struktur yang mencakup Mesin Virtual , Metode , Properti, dan Skema . Dari sudut pandang otomatisasi, Skema paling menarik:

Tata letaknya mirip dengan pipeline pada sistem CI / CD. Ini menjelaskan langkah-langkah yang akan dilakukan dalam proses otomasi.
Otomatis Mesin Virtual

Kelas yang dijelaskan di atas memiliki dua Instance Otomatis. Masing-masing dari mereka mewarisi dari sirkuit tahapan-tahapan di mana Nilai Default diatur. Tahapan yang memiliki nilai nol dijelaskan dalam contoh.

Dalam contoh tersebut, nilai muncul untuk langkah-langkah yang kosong dalam deskripsi skema. Anda juga dapat melihat siapa dan kapan melakukan perubahan terakhir.
Mari kita lihat apa yang diwakili oleh salah satu nilai Value:

Ini adalah Kelas Otomatis yang disebut Metode, yang memiliki satu Mesin Virtual Otomatis. Diagramnya menggambarkan atribut ipam_base_uri dan metode eksekusi . Metode eksekusi, pada gilirannya, memanggil Metode Automate acquir_ip .
Metode Otomatis
Ini adalah skrip Ruby yang memungkinkan mesin virtual untuk berkomunikasi melalui REST API dengan sistem lain. Misalnya, seperti halnya dengan sistem manajemen ruang alamat IPAM. Dalam IPAM kita mendapatkan alamat, mask, subnet, dan VLAN untuk VM. Kesulitannya adalah bahwa mesin dapat digunakan dalam lingkungan pengujian atau produktif, untuk aplikasi atau database. Atau mungkin layanan keamanan memutuskan untuk meletakkannya di loop PCI-DSS. Semua informasi ini dikumpulkan pada tahap pembuatan VM atau ditransmisikan dalam parameter instance yang disebut (dalam screenshot di atas, Anda dapat melihat bahwa parameter berisi uri dimana metode ini akan mengakses IPAM):
Ini beberapa kode Rubybase_uri = $evm.object['ipam_base_uri'] prov = $evm.root["miq_provision"] site = prov.get_option(:site) app = prov.get_option(:dialog_dropdown_list_information_system) crq = prov.get_option(:crq) descr = prov.get_option(:dialog_textarea_box_usernotes) owner = $evm.root['user'].name scope = prov.get_option(:dialog_dropdown_scope) environment = prov.get_option(:landscape)
$ evm.root adalah metode yang mengembalikan semua yang dapat disimpan di ManageIQ. Ini bisa berupa informasi tentang pengguna, lingkungan, variabel, permintaan saat ini ('miq_request'), dll. Kami tertarik dengan proses penyediaan saat ini.

Kemudian kita dapat mengambil nilai yang diperlukan: get_option (: situs) mengambil nilai yang ditransfer pada salah satu langkah sebelumnya, dan, misalnya, get_option (: dialog_dropdown_list_information_system) mengambil dari formulir yang diisi pengguna saat memesan sumber daya baru.
Semua nilai yang diterima ditransmisikan oleh variabel dalam tubuh permintaan dalam format JSON:
options = { verify: false, headers: {"Content-Type" => "application/json"}, body: { "site" => "#{site}", "env" => "#{env}", "app" => "#{app}", "scope" => "#{scope}", "role" => "#{role}", "crq" => "#{crq}", "descr" => "#{descr}", "owner" => "#{owner}", }.to_json, }
Dengan menggunakan set parameter ini, IPAM akan secara pasti menentukan VLAN mana yang harus ditemukan oleh mesin virtual, dan akan mengembalikan parameter jaringan.
Selain menerima data untuk konfigurasi VM yang benar, ManageIQ juga dapat menghasilkan informasi tambahan untuk membuat beberapa pengaturan pada tahap yang disebut penyediaan pos (setelah mesin virtual digunakan dan diluncurkan). Di Rumah, kami menggunakan Wayang untuk mengelola konfigurasi host Linux. Untuk setiap unit komputasi, buat file GAML dalam YAML dengan sekelompok grup:
Beberapa kode Ruby lagi options = { headers: {"Private-Token" => "#{api_token}", "Content-Type" => "application/json"}, } body = { "branch" => "#{branch}", "author_email" => "email@your.domain", "author_name" => "ManageIQ Bot", "content" => "", "commit_message" => "New host created by ManageIQ", } descr = prov.get_option(:long_description) if descr.include?('rancher') && descr.include?('test') then body[:content] = "---\ngroups:\n - #{yaml_server}\n - rancher\n - user-devops-UDCR" end unless descr.include?('test') then if descr.include?('rancher') then body[:content] = "---\ngroups:\n - #{yaml_server}\n - rancher\n" end end unless descr.include?('rancher') then body[:content] = "---\ngroups:\n - #{yaml_server}\n - #{$is_id}" end
Grup bergantung pada jenis mesin virtual, lingkungan tempat mesin itu dibuat, dan sistem informasi.
Setelah berhasil menyelesaikan prosedur, pengguna menerima email berisi informasi:

Teks surat juga dapat disesuaikan dengan menambahkan informasi yang diperlukan.
Jika kesalahan terjadi pada salah satu tahap kritis proses, Anda dapat menambahkan kondisi yang secara eksplisit menyatakan bahwa proses tersebut harus terganggu. Jika kesalahan tidak memiliki konsekuensi fatal, tunjukkan juga apa yang dapat dilanjutkan, meskipun ada masalah.
Penebangan
ManageIQ menulis log dari semua yang dapat dilacak. Proses otomasi ditulis dalam automation.log. Selain itu, ada log API, berbagai penyedia cloud, log keamanan, bahkan output dari perintah teratas dicatat.
Untuk setiap acara di sirkuit, Anda dapat mengonfigurasi entri log dari awal dan akhir mereka:

Selain itu, Anda dapat menulis pesan di log:
$evm.log(:info, "Call job status uri: #{item_uri}/#{job_id}/api/json")
Ini sangat berguna ketika mengakses sistem dengan API untuk memahami mengapa ada masalah. Atau, untuk melacak status saat ini dari proses yang panjang, seperti menjalankan pekerjaan Jenkins atau SCCM Runbook:
$evm.log(:info, "acquire_osname --- naming jobStatus: #{jobStatus}") break if jobStatus.to_s == "Completed"
Anda dapat menggunakan fungsi standar untuk pengecualian untuk menulis ke log:
raise “VM not specified” if vm.nil?
Secara default, semua log disimpan di bagian / var / log / manageiq / *, tetapi dari pengalaman saya sendiri, saya dapat mengatakan bahwa mencari masalah melalui tail dan grep bukanlah solusi yang paling nyaman. Mengingat bahwa ManageIQ menulis banyak log yang berbeda, Anda harus berhati-hati untuk mengarahkan kembali log, misalnya, ke tumpukan ELK.
API ManageIQ
Selain antarmuka web yang ramah pengguna, ManageIQ memiliki API fungsional. Dengan itu, misalnya, kami memecahkan masalah secara dinamis menentukan pengidentifikasi template yang akan ditentukan
saat membuat VM: def get_template(vendor, os, ems) user = '#{user}' pass = '#{pass}' options = { verify: false, headers: {"Accept" => "*/*", "accept-encoding" => "gzip, deflate"}, basic_auth: { username: "#{user}", password: "#{pass}" }, } response = HTTParty.get("#{host}/api/templates?filter[]=vendor=%27#{vendor}%27&filter[]=name=%27%2A#{os}%2A%27&filter[]=ems_id=%27#{ems}%27", options).to_s link = JSON.parse(response) link["resources"].each do |r| $url = r["href"] end response = HTTParty.get($url,options).to_s template = ["#{JSON.parse(response)['id']}"+", "+"#{JSON.parse(response)['name']}"] return template end
Menggunakan permintaan POST dan menentukan filter untuk pencarian, kami mendapatkan template yang diinginkan.
Selain menyelesaikan masalah internal, Anda dapat membuat metode API baru untuk digunakan oleh sistem eksternal. Di awal artikel, proses pemesanan mesin virtual baru menggunakan antarmuka web ditunjukkan. Dan ini adalah tampilannya jika Anda melakukannya dengan
Permintaan POST: curl -X POST \ http://Manageiq.hostname/api/service_catalogs/4/service_templates/31 \ -H 'Authorization: Basic Token-Value' \ -H 'Content-Type: application/json' \ -d '{ "action": "order", "resource": { "radio_button_vcpu": "a_2", "radio_button_vram": "a_2", "hdd_size": "40", "dropdown_os": "CentOS", "text_box_filter": "dns", "dropdown_list_information_system": "DNS ", "text_box_validator": "OK (DNS )", "textarea_box_usernotes": " ", "dropdown_env": "production", "date_control_retirement_dt": "2022-05-21", "dropdown_scope": "-" } }'
Kesimpulan
Pro:
- Fleksibilitas yang luar biasa: ManageIQ tidak hanya memungkinkan Anda untuk menyesuaikan proses otomasi sesuai kebutuhan, tetapi juga memungkinkan untuk mengubah bagian visualnya dengan menambahkan tombol, bidang, dll. Tambahan
- Editor kode bawaan dengan penyorotan sintaksis dan validasi kode. Bagi saya itu solusi yang sangat bagus, jika Anda perlu segera memperbaiki sesuatu.
- Sejumlah besar sumber yang dapat bekerja dengan sistem. Awan: Amazon EC2, Google Compute Engine, Azure, OpenStack, VMware vCloud. Infrastruktur: Microsoft SCVMM, Direktur Platform OpenStack, Virtualisasi Red Hat, VMware vCenter. Wadah: Kubernetes, OpenShift.
Cons:
- Kemampuan hebat alat ini juga membawa poin negatif. Tidak semua dokumentasi terstruktur dengan baik, dan kadang-kadang sulit untuk mencari tahu di mana mencari apa yang Anda butuhkan. Namun, perlu dicatat bahwa situasinya berubah menjadi lebih baik, dokumentasi ditambah dan ditingkatkan.
- Komunitas kecil. Jika Anda menemui beberapa masalah yang sangat spesifik, Anda mungkin tidak dapat dengan cepat "google" jawabannya. Atau tidak berhasil sama sekali.
- Paragraf yang mengikuti dari dua sebelumnya. Beberapa hal dasar, pengaturan dan skenario dapat ditemukan dalam dokumentasi atau di Internet, tetapi pertanyaan yang lebih spesifik dan sempit memerlukan banyak waktu untuk memahami dan mempelajari, termasuk metode pencarian ilmiah: senyum:.
Seperti yang kita miliki sekarang:
Karena kenyataan bahwa ManageIQ dapat memanfaatkan sepenuhnya bahasa Ruby, kami dapat mengintegrasikannya untuk bekerja dengan API berikut:
- Pengelola Kata Sandi Ini menghasilkan kata sandi root sesuai dengan persyaratan layanan keamanan, menulisnya ke database-nya, dan ManageIQ menggunakannya di dalam OS;
- Layanan Orkestrasi Pusat Layanan untuk mengelola catatan DNS dan nama host;
- Obat BMC. Seluruh proses dicatat sebagai komentar atas permintaan. Setelah eksekusi berhasil, permintaan ditutup;
- CMDB Informasi tentang unit konfigurasi baru dibuat dalam database dengan semua data yang diperlukan.
- Zabbix Bergantung pada afiliasi dengan sistem informasi dan lingkungan, host ditambahkan ke grup pemantauan yang sesuai.
- Peternak. Menerapkan penciptaan lingkungan baru, pemasangan agen dan pendaftaran host di lingkungan yang ada.
- Jenkins Jenkins menjalankan pekerjaan untuk mengkonfigurasi VM di oVirt;
- LDAP Buat grup baru yang digunakan untuk mengontrol akses di lingkungan Rancher dan untuk mengkonfigurasi kebijakan di Vault;
- Vault Di Home, integrasi produk ini ke dalam proses perbankan baru saja dimulai, tetapi kami telah membuat metode untuk membuat grup, kebijakan, dan bagian baru untuk penyimpanan;
- Wayang dan IPAM disebutkan sebelumnya.
Fungsi dan kemampuan sistem sangat luas, dan saya berkenalan dengan banyak dari mereka dan terus berkenalan dalam proses penerapan sistem.
Sebagai contoh, saya tidak menyebutkan bahwa sistem memiliki kemampuan untuk membuat dasbor Anda sendiri dengan statistik, pengaturan atau tombol penagihan, di mana Anda dapat melampirkan skrip individual atau seluruh skrip. Anda dapat menambahkan bidang Anda sendiri untuk merekam informasi tambahan tentang layanan dan mesin virtual, dll.
Apa yang diperjuangkan Home:
- Upgrade ke versi Hammer, di mana dalam mode HA Anda dapat mencoba untuk bekerja dengan Ansible built-in.
- Transisi dari koordinasi untuk setiap unit sumber daya virtual ke manajemen. Tim akan dapat menerima VM baru bahkan lebih cepat jika kuota tidak habis.
- Pengembangan metode baru untuk penyediaan lebih lanjut untuk sistem eksternal.
- Misalnya, berbagai SaaS seperti jenkins, logstash, dll.
- Implementasi metode API baru di portal yang ada untuk pemilik sistem informasi. Pengguna tidak perlu memikirkan bagaimana mengintegrasikan dengan elemen infrastruktur baru, mereka hanya akan menggunakannya sebagai layanan untuk mendapatkan sumber daya baru atau mengubah yang sudah ada.
Pada akhirnya, saya ingin mengingatkan Anda bahwa alat itu hebat, tetapi jangan lupa tentang pentingnya interaksi antara tim yang berbeda. Perubahan yang dijelaskan dalam artikel tidak akan mungkin terjadi tanpa komunikasi yang mapan dan interaksi terus-menerus tentang masalah yang muncul dari semua pihak yang berkepentingan.