Suatu hari saya menemukan alat Juju Canonical.
Memo dari internet mengklaim itu adalah alat manajemen konfigurasi seperti Chef, Ansible, atau Wayang.
Saya membaca secara tidak sengaja dok-dok di dalamnya, melihat ke dalam repositori dengan mantra-modul (analog dari buku resep atau buku pedoman) dan berpendapat bahwa ini tidak benar.
Juju lebih seperti orkestra agnostik-VM (seperti Nomad atau Kubernetes). Di atasnya, Anda dapat mendeskripsikan konfigurasi infrastruktur aplikasi secara deklaratif: aplikasi mana yang kami jalankan, pada mesin mana, dalam berapa banyak salinan, bagaimana mereka terhubung dengan layanan lain.
Tetapi tidak seperti Kubernetes, ini dapat bekerja tidak hanya dengan Docker, tetapi juga dengan segala jenis mesin virtual.
Mereka mengatakan bahwa kernel, agen dan klien ditulis dalam Golang - dan saya tidak melihatnya.
Bagian yang berkaitan dengan konfigurasi itu sendiri biasanya dijelaskan dalam kombinasi dengan YAML dan Python (dermaga mengatakan bahwa Anda dapat menggunakan bahasa lain selain python).
Bagaimana cara kerjanya?
Penafian : artikel ini tidak mengklaim sebagai deskripsi yang lengkap dan akurat, saya lebih suka melihatnya sebagai cara untuk menurunkan ambang entri bagi mereka yang ingin melihat Juju dan membantu menavigasi dokumentasi.
Dokumentasi lengkap ada di sini: https://docs.jujucharms.com/
Seperti yang sudah ditulis di atas, di Juju ada beberapa komponen:
- Pengontrol adalah bagian server yang mengalokasikan mesin virtual. Setiap penyedia [cloud] memiliki pengontrolnya sendiri (termasuk untuk penyedia cloud yang tidak cukup, seperti LXD lokal atau Logam sebagai Layanan ).
Pengontrol adalah aplikasi monolitik dari satu komponen. Setidaknya satu salinan pengontrol harus dijalankan di setiap penyedia. Ada beberapa HA, tapi saya tidak menyelidiki itu. - Agen - pakai setiap mesin virtual. Ada dua jenis agen - untuk mesin dan untuk unit. Tampaknya salah satu dari mereka memakai mesin host, dan satu di mesin virtual - saya juga tidak membahasnya secara terperinci.
- Klien adalah alat CLI untuk mengelola semua ekonomi ini.
- GUI
- Deskripsi deklaratif semua komponen pengguna (aplikasi, mesin, dll.)
- Kode kustom untuk mengatur mesin virtual yang terpisah, itu disebut Mantra
(Sebenarnya, ada komponen pohon yang lebih besar, tetapi untuk cerita ini kami akan menyederhanakannya sehingga lebih mudah untuk memahami apa apa)
Pada deskripsi deklaratif, Anda dapat membuat kira-kira struktur komponen berikut (grafik digambar secara otomatis oleh GUI):

Bagian server entah bagaimana menciptakan mesin virtual di sana, menarik ketergantungan, membangun hubungan di antara mereka, melacak sinyal yang muncul - semuanya tampaknya cukup standar di sana, seperti untuk orkestra lain.
Dan di sini adalah modul untuk mengkonfigurasi mesin virtual yang disebut mantra (unit - pesona), mari kita lihat lebih dekat.
Tampaknya saya tahu Chef, Ansible dan Wayang, mungkin tidak ada yang baru di sini, tetapi ini tidak begitu. Pembuat Juju tidak membuat DSL untuk secara deskriptif menggambarkan sumber daya dalam sistem. Sebagai gantinya, mereka membuat kerangka kerja yang memungkinkan kode python atau bash yang benar-benar normal menjadi idempoten dan menghubungkannya dengan pengontrol Juju.
Perangkat pesona
Pesona itu sendiri tidak terlalu sederhana. Dengan kompleksitas struktural, mereka mengingatkan buku masak chef atau peran yang dimungkinkan. Dan pada kenyataannya, mereka lebih cenderung analog dari sumber daya, bukan buku masak.
Mereka terdiri dari metadata / bagian deklaratif, kait peremptory (reaksi terhadap peristiwa) dan semua jenis file data seperti skrip tambahan, dokumentasi atau konfigurasi khusus.
Bagian deklaratif menggambarkan antarmuka ketergantungan pesona (misalnya, pesona wordpress bergantung pada mysql, dan pesona mysql menyediakan antarmuka ini), kompatibilitas sistem, tag, parameter konfigurasi (seperti atribut cookie) dan lapisan program tergantung pada pesona lain ( misalnya, sebagian besar mantra menyertakan layer:basic
).
Dalam kait imperatif, reaksi terhadap semua jenis peristiwa eksternal dijelaskan. Misalnya, kami install
paket yang diperlukan pada acara install
, configure
pada acara configure
, dan start
layanan pada acara start
.
Ini semua ditulis pada python biasa dengan dekorator (saya membaca suatu pernyataan bahwa Anda dapat menulis apa pun, bahkan pada bash, tapi saya belum melihat contoh).
Contoh ringan klasik adalah NTP: https://github.com/lampkicking/charm-ntp
Menariknya, rupanya, ketika mengkompilasi pesona, diperoleh aplikasi mandiri yang dapat dijalankan di server tanpa dependensi tambahan - dalam versi kompilasi saya melihat bahwa itu termasuk isi semua lapisan yang digunakan olehnya, serta tarbal dari semua modul Python yang digunakan.
Contoh untuk NTP: https://jaas.ai/ntp/32 (lihat daftar file di sisi kanan halaman).
Ringkasan
Juju memiliki pendekatan yang sangat menarik dan tidak biasa untuk menggambarkan dan menyiapkan infrastruktur.
Kemungkinan besar, juju memiliki ambang masuk yang lebih tinggi daripada koki, kemungkinan besar pesona lebih lambat untuk dikembangkan dibandingkan dengan buku masak dan buku pedoman dan membutuhkan lebih banyak keterampilan pemrograman.
Di sisi lain, saya kira bahwa model dengan kait peristiwa mendorong Anda untuk menulis kode yang lebih tepat.
Tampak bagi saya bahwa Juju lebih ditujukan untuk programmer infrastruktur (mereka yang menulis banyak alat CLI pada python di Linux 5-7 tahun yang lalu), yang sekarang perlu mengkonfigurasi server, sementara Chef / Ansible - pada administrator, yang alih-alih satu -Dua sekarang Anda perlu mengkonfigurasi seratus atau dua server.
Haruskah saya menggunakan Juju pada tahun 2019?
Tidak yakin:
- Anda akan membungkus aplikasi baru (cloud asli) ke buruh pelabuhan di buruh pelabuhan dan meluncurkannya di cuber atau ECS
- Untuk aplikasi "lama", Anda mungkin sudah memiliki skrip penerapan yang ditulis di ensemble atau bos
- Untuk proyek baru dengan arsitektur "lama" - mungkin. TAPI :
- Hampir tidak ada yang tahu tentang Juju di RuNet, ini adalah artikel pertama dalam bahasa Rusia yang menjelaskan sedikit tentang apa itu
Jika Anda bekerja dengan Juju, tulis di komentar di mana saya membuat kesalahan - setelah semua, saya hanya membaca dok untuknya selama 2-3 jam.