Hubungan antara Vagrant, Docker, Chef dan OpenStack (atau produk serupa)?

Saya seorang pengembang web, tetapi saya juga tertarik pada beberapa tugas administratif. Oleh karena itu, langkah baru dari administrasi murni Ke dev-ops berguna bagi saya.

Bagaimanapun, saya memiliki beberapa masalah untuk memasukkan beberapa hal ke dalam suatu hubungan. Mungkin tidak ada, jadi saya ingin meminta bantuan untuk mengklarifikasi.

Pada dasarnya, apa yang ingin saya masukkan ke dalam relasi adalah empat jenis perangkat lunak (dari pemahaman saya). Produk yang tepat tidak masalah, Anda dapat menempatkan perangkat lunak serupa sebagai alternatif:

  • Gelandangan: dari pemahaman saya adalah mengotomatiskan pembuatan dan pengelolaan vm: menyiapkannya, memulai, dan menghentikannya. Hal ini dapat dilakukan dengan menggunakan VM lokal atau remote, misalnya pada platform cloud.
  • Docker: "VM ringan", berdasarkan beberapa konsep kernel Linux, yang dapat digunakan untuk menjalankan proses secara terpisah, misalnya di lingkungan hosting web bersama.
  • Chef: alat untuk mengatur dan mengkonfigurasi sistem operasi, misalnya di dalam VM.
  • OpenStack: alat yang memungkinkan Anda membangun cloud pribadi Anda sendiri, karenanya sebanding dengan sesuatu seperti AWS.

Pertanyaan # 1: Apakah penjelasan saya benar, atau apakah saya salah dengan beberapa (atau semua) konsumsi ini?

Pertanyaan # 2: Bagaimana Saya bisa mencampur semua alat itu? Apakah itu masuk akal?

Dalam imajinasi saya dan dari sudut pemahaman saya, Anda bisa pergi dan

  • gunakan OpenStack untuk membangun cloud Anda sendiri,
  • gunakan Vagrant untuk mengelola VM yang dijalankan di cloud,
  • gunakan Chef untuk mengatur vm ini
  • dan akhirnya gunakan Docker untuk menjalankan proses di dalam VM.

Apakah ini benar? Dan jika demikian, dapatkah anda memberi saya saran tentang cara mulai menggunakan semua ini (cukup banyak pada saat yang sama, dan saya belum tahu harus mulai dari mana)?

Mari kita gunakan halaman web masing-masing untuk mencari tahu tentang apa semua proyek ini. Aku akan mengubah urutan di mana Anda Terdaftar, meskipun:

  • Chef: Chef adalah platform otomatisasi yang mengubah infrastruktur menjadi kode.

    Ini adalah perangkat lunak manajemen konfigurasi. Kebanyakan dari mereka menggunakan paradigma yang sama: mereka memungkinkan Anda untuk mendefinisikan negara Anda ingin mesin menjadi, berkaitan dengan file konfigurasi, perangkat lunak yang diinstal, pengguna, grup, dan banyak jenis sumber daya lainnya. Kebanyakan dari mereka juga menyediakan fungsionalitas untuk mendorong perubahan ke mesin tertentu, sebuah proses yang biasanya disebut orkestrasi.

  • Vagrant: Buat dan konfigurasikan lingkungan pengembangan yang ringan, dapat direproduksi, dan portabel.

    Ini menyediakan dapat direproduksi cara untuk menghasilkan mesin tervirtualisasi sepenuhnya menggunakan teknologi VirtualBox atau VMWare Oracle sebagai penyedia. Vagrant dapat berkoordinasi dengan perangkat lunak manajemen konfigurasi untuk melanjutkan proses instalasi di mana installer sistem operasi selesai. Ini dikenal sebagai provisi.

  • Docker: Sebuah proyek open source untuk berkemas, kapal dan menjalankan aplikasi sebagai wadah ringan

    Fungsionalitas perangkat lunak ini agak tumpang tindih dengan Vagrant, di mana ia menyediakan sarana untuk mendefinisikan instalasi sistem operasi, tetapi sangat berbeda dalam teknologi yang digunakan untuk tujuan ini. Docker menggunakan Linux kontainer, yang bukan mesin virtual itu sendiri, tetapi proses terisolasi yang berjalan di sistem file terisolasi. Docker juga dapat menggunakan sistem manajemen konfigurasi untuk menyediakan wadah.

  • OpenStack: Perangkat lunak sumber terbuka untuk membangun awan pribadi dan publik.

    Meskipun benar bahwa OpenStack dapat digunakan pada satu mesin, penerapan semacam itu murni untuk pembuktian konsep, mungkin tidak terlalu fungsional karena keterbatasan sumber daya.

    Target utama untuk instalasi OpenStack adalah lingkungan multi-node bare metal, di mana komponen yang berbeda dapat digunakan dalam perangkat keras khusus untuk mencapai hasil yang lebih baik.

    Fungsionalitas utama OpenStack adalah dukungannya untuk banyak teknologi virtualisasi, dari virtualisasi penuh (VirtualBox, VMWare), hingga paravirtualized (KVM / Qemu) dan juga container (LXC) dan bahkan User Mode Linux (UML).

Saya sudah mencoba menyajikan produk ini sebagai komponen arsitektur tertentu. Dari sudut pandang saya, masuk akal untuk pertama-tama dapat menentukan kebutuhan Anda berkaitan dengan lingkungan yang Anda butuhkan (koki, boneka, Ansible, ...), kemudian dapat menerapkannya dengan cara yang terkontrol (Vagrant, Docker, ...) dan akhirnya skala ke ukuran global jika perlu.

Berapa banyak dari semua fungsi ini yang Anda butuhkan harus didefinisikan dalam lingkup proyek Anda.

Perhatikan juga bahwa saya telah menyederhanakan sebagian besar penjelasan teknis. Silakan gunakan link direferensikan untuk informasi rinci.

Saya pikir berasal dari latar belakang pengembang akan membuat menjadi 'devops' sebenarnya lebih rumit, pertanyaan Anda hampir 3 tahun sehingga akan menarik untuk mendengar bagaimana Anda menemukan perjalanan, saya akan memberikan jawaban dari sudut pandang admin sys tentang aplikasi yang Anda sebutkan di atas dan mudah-mudahan itu akan menjelaskan, atau memberikan perspektif non teknis yang akan menjelaskan mengapa seseorang (admin atau dev) akan mulai mempertimbangkan dengan tepat apa yang anda tanyakan misalnya dari perspektif devops apa hubungan antara x, y, z adalah alat-alat ini lebih besar dari jumlah bagian mereka?

Saya benar-benar berpikir admin sys berada di atas angin di sini, sebagian besar aplikasi yang Anda sebutkan dalam pertanyaan Anda memecahkan 'masalah' admin dan dengan demikian menyediakan lingkungan pusat data yang lebih abstrak, dan ini pada gilirannya lebih dapat diprogram untuk pengembang dan strategi 'devops' baru (baca strategi/tim, devops bukan orang). Jadi apa hubungannya dengan aplikasi yang Anda sebutkan? bagaimana ini memberikan pendekatan holistik untuk layanan TI?

OpenStack: alat yang memungkinkan Anda membangun cloud pribadi Anda sendiri, karenanya sebanding dengan sesuatu seperti AWS

Itulah apa itu, tapi apa fungsinya? - sistem operasi sebagian besar aptly bernama adalah D. O. S-dioperasikan disk Anda dengan abstrak BIOS, OpenStack mengoperasikan pusat data Anda dan abstrak Infrastruktur Anda (IaaS - adalah Jargon untuk sistem operasi data center). Sekarang pusat data Anda memiliki API, sintaks perintah, dan GUI, OpenStack dapat menggerakkan hypervisor, sakelar, router, firewall, jaringan area penyimpanan, penyeimbang beban, host docker, dll.. Openstack menggunakan hardware Anda memproduksi'plugin' atau fungsi tertentu dapat eksis hanya dalam perangkat lunak sebagai perangkat lunak didefinisikan sesuatu atau virtualisasi fungsi jaringan. Di atas OpenStack ini, dan semua cloud lainnya, dapat mengatur infrastrukturnya sendiri dengan membaca skrip yang Anda lemparkan ke mesin orkestrasi atau dipicu berdasarkan aturan (tingkatkan, turunkan, dll.). Jadi openstack adalah lapisan abstraksi raksasa, misalnya saya tidak peduli sakelar apa yang saya miliki, beri saya jaringan ini perintah, atau, membangun saya beban yang rumit seimbang, HA, tersedia untuk umum, Auto scaling, nama domain terdaftar, penyimpanan terpasang thingy - dengan script ini saya temukan di internet.

Docker: "VM ringan", berdasarkan beberapa konsep kernel Linux, yang dapat digunakan untuk menjalankan proses secara terpisah, misalnya di lingkungan hosting web bersama.

Docker adalah lapisan abstraksi lain dan seperti cloud adalah teknologi yang mengganggu, ini mengubah industri karena memecahkan banyak 'masalah' operasional seperti ketergantungan perangkat lunak, peningkatan, isolasi data, dan portabilitas belaka. Java menjadi populer karena itu kode sumber portabilitas bahwa pengembang tidak perlu berpikir tentang, JVM berjalan berarti bahwa kode mereka harus berjalan pada mesin kopi asalkan didukung java. Docker memecahkan masalah serupa, untuk menjalankan aplikasi saya, Anda memerlukan host docker, tidak, Anda memerlukan versi python ini, kernel ini, distro linux ini dan sebagainya, aplikasi masih memiliki dependensi tersebut tentu saja, tetapi host yang mendasarinya tidak peduli dan admin tidak peduli apa yang anda lakukan di dalam wadah yang terisolasi (ke titik). Docker mengubah paradigma pengembangan dan operasi, memperlakukan seluruh sistem operasi dan layanannya seperti biner. kita bisa mendapatkannya dari repositori, versi mereka, modifikasi mereka, jalankan dengan parameter dll.

Chef: alat untuk mengatur dan mengkonfigurasi sistem operasi, misalnya di dalam VM.

Ya, dan tidak mengganggu seperti dua yang pertama, Chef, puppet, ansible, salt, system center operations manager, dan sejumlah besar aplikasi lain di ruang ini menyediakan cara bagi pengembang dan admin untuk memodelkan penerapan, peningkatan, dan tindakan lainnya (perubahan konfigurasi), tampaknya tidak ada badan standar yang melihat upaya ini seperti ada untuk cloud. Tapi kita tidak berurusan dengan sesuatu yang pasti seperti infrastruktur jadi, lebih menyakitkan untuk mempelajarinya dan tidak banyak yang dapat ditransfer dari satu ke yang lain.

Gelandangan: dari pemahaman saya adalah mengotomatiskan pembuatan dan pengelolaan vm: menyiapkannya, memulai, dan menghentikannya. Hal ini dapat dilakukan dengan menggunakan VM lokal atau remote, misalnya pada platform cloud.

Ini adalah yang aneh dalam daftar aplikasi yang Anda sebutkan, Vagrant adalah alat untuk pengembang dan mainan untuk admin, anda dapat dengan cepat berdiri di lingkungan pengembangan dengan vagrant, misalnya saya ingin mengembangkan aplikasi android, ambil IDE dari vagrant, saya pikir itu akan segera diambil alih oleh Docker.

Bisakah Anda memberi saya saran tentang cara mulai menggunakan semua ini (cukup banyak pada saat yang sama, dan saya belum tahu harus mulai dari mana)?

Inilah mengapa saya pikir admin berada di atas angin, kami harus melakukan sebagian besar ini secara manual dan tahu apa yang bisa salah, manifes boneka, komputasi awan dan orkestrasi buruh pelabuhan akan lebih mudah bagi kami, pengembang akan menemukan diri mereka mengambil banyak garis singgung jadi saran saya untuk setiap devops potensial adalah menjadi admin terlebih dahulu.

Pada akhirnya, saya menggunakan kombinasi Vagrant dan Docker saja.

Saya menggunakan vagrant untuk menyediakan Mesin (ada penyedia cloud tambahan tapi saya menggunakan dibangun di VirtualBox. Karena saya menggunakan pendekatan ini, jaringan dan penyimpanan eksternal cukup banyak manual, tetapi jika Anda menggunakan sesuatu seperti vagrant-aws plugin Anda dapat memberi tahu AWS untuk menyediakan suku cadang yang diperlukan untuk anda.

Skrip penyediaan yang saya gunakan menunjuk ke lokasi aman yang berisi sertifikat CA dan kunci yang digunakan untuk menandatangani CSR bersama dengan docker swarm join token. Selain itu saya menginstal docker-engine dan mengkonfigurasinya untuk bergabung dengan swarm (inisialisasi jika tidak ada).

Setelah itu diselesaikan, saya hanya melakukan docker stack deploy dari mesin lokal saya atau kotak build untuk menyebarkan tumpukan dengan semua yang saya butuhkan.

Dalam kasus saya, saya baru saja menjatuhkan chef mendukung hanya menggunakan skrip instalasi posting sederhana yang melakukan yum atau apt-get sebagai skrip penyediaan saya.

Saya juga menggunakan vagrant-pemicu plugin untuk menambahkan skrip tambahan sebelum menghancurkan (dalam kasus saya untuk meninggalkan swarm).

Bagian yang baik dari sentralisasi dengan Vagrant adalah Anda dapat mereplikasi lingkungan pada sistem lain atau komputer tunggal untuk pengembangan hanya perlu menambahkan atau mengubah provider bagian. Pikiran Anda saya belum melalui pengaturan OpenStack pada satu komputer untuk mengelola VirtualBox.

Saya baru saja menyelesaikan proyek penyebaran OpenStack yang menggunakan server Chef di dalam instance Vagrant: https://github.com/bluechiptek/bluechipstack/blob/master/README.md

Masalah utama dengan melakukannya dengan cara ini adalah mendapatkan instance Vagrant IP yang sama setiap kali Anda ingin mengelola node. Jika Anda melakukan pengalamatan statis, itu berfungsi dengan baik. Melakukannya melalui VPN kurang dari ideal.

Tidak cukup terampil untuk menjawab ini sepenuhnya, tetapi penilaian Anda tentang Vagrant dan Chef tampaknya benar. Di kotak pengembangan saya, saya memutar VM menggunakan Vagrant dan kemudian menyediakannya dengan Chef dan itu bekerja dengan sangat baik.