Mengapa menggunakan skrip Chef / Puppet over shell?

81

Baru menggunakan alat-alat Wayang dan Koki. Sepertinya pekerjaan yang mereka lakukan dapat dilakukan dengan skrip shell. Mungkin itu dilakukan dalam skrip shell sampai ini datang.

Saya setuju mereka lebih mudah dibaca. Tapi, apakah ada kelebihan lain selain skrip shell selain hanya bisa dibaca?

beristirahat
sumber

Jawaban:

56

Bahasa khusus domain membuat perbedaan besar dalam jumlah kode yang Anda tulis. Misalnya, Anda dapat berargumen bahwa tidak ada banyak perbedaan antara:

chmod 640 /my/file

dan

file { "/my/file":
    mode => 640,
}

tapi ada banyak perbedaan di antara ini:

FILE=/my/file
chmod 640 $FILE
chown foo $FILE
chgrp bar $FILE
wget -O $FILE "http://my.puppet.server/dist/$FILE"
     # where the URL contains "Hello world"

dan

file { "/my/file":
    mode => 640,
    owner => foo,
    group => bar,
    content => "Hello world",
}

Apa yang terjadi jika wget gagal? Bagaimana skrip Anda akan mengatasinya? Dan apa yang terjadi jika ada sesuatu setelah itu dalam skrip Anda yang membutuhkan $ FILE untuk berada di sana dengan konten yang benar?

Anda mungkin berpendapat bahwa seseorang bisa saja memasukkan echo "Hello world" > $FILEskrip, kecuali bahwa pada contoh pertama skrip harus dijalankan pada klien, sedangkan boneka mengkompilasi semua ini di server. Jadi, jika Anda mengubah konten, Anda hanya perlu mengubahnya di server dan mengubahnya untuk banyak sistem yang Anda inginkan. Dan boneka menangani dependensi dan masalah transfer untuk Anda secara otomatis.

Tidak ada perbandingan - alat manajemen konfigurasi yang tepat menghemat waktu dan kerumitan Anda. Semakin banyak Anda mencoba melakukannya, semakin banyak skrip shell yang tampaknya tidak memadai, dan semakin banyak upaya Anda akan menghemat dengan melakukannya dengan boneka.

Paul Gear
sumber
9
@ Paul Gear, ini adalah penyederhanaan berlebihan untuk mengatakan bahwa alat manajemen konfigurasi adalah cara untuk pergi dalam jangka panjang. Misalnya, dengan menggunakan AWS, skrip shell dapat membuat server dari awal, menjalankan beberapa tes, dan setelah Anda yakin instans AWS baik-baik saja, buat gambar. Kemudian Anda dapat menyebarkan gambar ini ke pratinjau atau lingkungan pementasan untuk pengujian lebih lanjut, setelah Anda memvalidasi gambar baik untuk tujuan Anda, maka Anda mendorong produksi. Alat manajemen konfigurasi tidak membantu sama sekali dalam skenario ini.
Derek Litz
Sekarang jika Anda ingin mengelola 100 server khusus yang digunakan orang setiap hari (dan Anda memiliki sedikit kendali atas apa yang mereka lakukan, secara keliru atau tidak) di situlah alat manajemen konfigurasi harus digunakan.
Derek Litz
6
Ini bukan contoh yang sangat meyakinkan. Saya bisa mulai dengan wget dan kemudian saya tidak akan berakhir dalam keadaan yang aneh. Apakah file seperti transaksi yang akan dibatalkan jika salah satu langkah tidak berhasil?
PSkocik
33

Ini akan menjadi pendapat yang tidak populer, tetapi sistem manajemen konfigurasi belum tentu lebih baik. Terkadang sederhana memang yang terbaik.

Ada kurva pembelajaran yang pasti dan overhead administrasi yang terkait dengan sistem konfigurasi yang Anda pilih. Anda semua memperkenalkan ketergantungan. Seperti halnya otomatisasi, Anda juga harus berhati-hati bahwa keamanan dipertahankan dalam konfigurasi yang digunakan.

Saya hanya punya beberapa contoh di mana kami menggunakan manajemen konfigurasi dan macet. Itu selalu ketika ada sejumlah besar sistem dengan konfigurasi berulang dan kebutuhan untuk melakukan penyebaran cookie-cutter yang dapat dikonfigurasi.

kenchilada
sumber
10
Ketika biaya mengelola lingkungan begitu besar sehingga mengelola otomatisasi benar-benar lebih murah. Jika lebih mudah untuk mengubah skrip yang dikelola di Git atau mengatur semuanya dalam multiplexer ssh, kami melakukannya. Yang paling penting bagi saya adalah saya memonitor sistem dan memverifikasi semuanya berfungsi seperti yang diharapkan. Selama saya diberitahu ketika ada kesalahan konfigurasi, tidak begitu penting bagaimana hal itu dikonfigurasi.
kenchilada
10
@ewwhite "kapan Anda memutuskan untuk mengotomatisasi vs. tidak" xkcd.com/1205
MikeyB
3
Alat-alat yang lebih modern seperti Ansible memiliki lebih sedikit penyebaran / manajemen overhead daripada Chef atau Wayang, membutuhkan sedikit atau tidak ada ketergantungan (Ansible pada khususnya tanpa agen). Ini benar-benar menurunkan standar adopsi.
GomoX
2
@ewwhite Anda diotomatiskan saat Anda menginginkan produktivitas pribadi. Anda belajar dengan mengotomatisasi, Anda tidak belajar dengan melakukan tugas-tugas duniawi. Belajar = peningkatan produktivitas dan peningkatan berulang. Otomatisasi digabungkan dengan ini untuk menghasilkan lebih banyak hal positif. Ini bola salju positif, bukan yang negatif. Kemajuan Teknis vs Hutang Teknis.
Derek Litz
2
@ ABB Tidak, itu tidak tersirat. Saya bahkan tidak menyebutkan skrip shell, saya menyebutkan otomatisasi sebagai praktik umum. Anda dapat mengotomatiskan hal-hal dengan skrip shell dan mempelajari abstraksi skrip alih-alih melakukan hal-hal secara manual yang tidak hanya akan menghemat waktu Anda melakukan tugas itu lagi, itu akan mencegah kesalahan. Selain itu, Anda harus dapat menulis skrip berikutnya sedikit lebih baik daripada yang terakhir. Bola salju yang positif ... Namun, jika Anda ahli dalam menulis skrip dan Anda tidak membuat skrip sesuatu yang akan Anda jalankan lagi, itu tidak membantu Anda mempelajari atau menghemat waktu dengan cara apa pun.
Derek Litz
23

Anda telah menjawab pertanyaan Anda sendiri ...

Otomasi menjadi lebih terukur dan diformalkan . Wayang dan Koki dianggap standar akhir-akhir ini (lihat iklan pekerjaan ).

Script shell berbatu bersama memiliki tempat mereka, tetapi mereka tidak scalable dalam konteks gerakan DevOps. Keterbacaan adalah bagian dari itu.

putih
sumber
7
Apakah skrip shell entah bagaimana kurang formal? Apakah mengutip iklan pekerjaan membuat argumen meyakinkan? Dan seorang devo sangat memalukan, karena dia kurang dieksploitasi sebagai pengembang. Tautan tersebut tidak mengatakan apa pun tentang skalabilitas. Apakah klaim bahwa skrip shell tidak dapat diskalakan? Saya pikir Wayang itu menarik, tetapi belum tentu karena alasan dalam jawabannya.
Acumenus
Iklan pekerjaan mencerminkan pasar nyata untuk keterampilan tertentu. Ya, menggunakan manajemen konfigurasi untuk tujuan yang dimaksud lebih dapat diskalakan, lebih kuat, dan lebih mudah didokumentasikan daripada skrip shell. Saya telah berada di banyak lingkungan, dan sebagian besar skrip yang saya lihat tidak dibuat sedemikian rupa sehingga orang akan menganggap "kualitas produksi" dan terorganisir untuk menangani pengecualian. Lihat jawaban yang diterima untuk memahami alasannya.
ewwhite
1
"Dan seorang devo sangat memalukan, karena dia kurang dieksploitasi sebagai pengembang." Ini tidak benar. DevOps adalah spesialisasi pengembangan, seperti halnya Pengembangan Web. Pola dan praktik pengembangan perangkat lunak masih berlaku. Anda harus membaca tentang DevOps.
Chaim Eliyah
13

Chef membuatnya lebih mudah untuk mengelola dan membuat versi pengaturan infrastruktur yang kompleks, terutama dalam semua jenis lingkungan cloud vs harus secara manual ftp atau scp sekelompok skrip shell yang disusun dengan cara yang tidak standar. Bergantung pada berapa banyak dependensi yang Anda butuhkan untuk mengelola, ukuran kemenangan ini dapat sangat bervariasi, membuat keputusan untuk beralih ke solusi CM yang tidak jelas bagi banyak orang.

Manfaat nyata (sering tanpa tanda jasa) dari Chef adalah idempoten . Mampu memastikan keadaan sumber daya terlepas dari kombinasi resep yang dijalankan dengan minat yang tumpang tindih adalah manfaat besar atas konfigurasi skrip shell. Jika Anda memiliki skrip shell untuk konfigurasi sekarang, tanyakan pada diri sendiri berapa banyak dari mereka dapat dijalankan beberapa kali tanpa konsekuensi yang tidak diinginkan / tidak diinginkan?

Solusi CM yang tepat membantu memastikan kesuksesan pada skala dengan menyederhanakan otomatisasi lintas platform dan kolaborasi tim. Meskipun dimungkinkan untuk mencapai semua ini dengan kelompok skrip shell versi terorganisasi dengan baik, versi terawat; Anda harus bertanya pada diri sendiri "mengapa". Koki / Wayang dan teknologi serupa muncul karena sekelompok SysOps yang berbakat bosan harus menyelesaikan masalah yang sama berulang-ulang dan berangkat untuk memberi kami pilihan yang lebih baik.

Potongan kunci:

  • Idempotensi
  • Kemudahan Manajemen Ketergantungan (versi)
  • Organisasi Standar (diterima di tingkat industri)
  • Abstraksi untuk memisahkan tugas konfigurasi server dari detail level sistem
  • Kemampuan untuk meningkatkan pengetahuan masyarakat (yang dijamin untuk merangkul semua prinsip di atas)
Matt Surabian
sumber
3
Idempoten hampir tidak mungkin dengan ss. Dependensi dikelola dengan baik oleh yum / apt, dll. Penerimaan tidak relevan. Pengetahuan komunitas ada untuk ss. Saya menerima, bagaimanapun, bahwa tidak harus menyalin banyak skrip, dan juga mengkonfigurasi sistem secara terpusat, keduanya berguna. Saya mendengar boneka membutuhkan agen sisi klien.
Acumenus
10

Alat manajemen konfigurasi modern seperti Puppet dan Chef memungkinkan Anda untuk menentukan keadaan sistem alih-alih mengkhawatirkan kegiatan yang diperlukan untuk mencapai server yang dikonfigurasi.

Misalnya, perintah chmod Anda mengasumsikan bahwa file itu ada, pengguna yang memiliki file itu ada, bahwa direktori telah dibuat, dan sebagainya. Karena itu skrip Anda harus mempertimbangkan semua prasyarat ini.

Alat manajemen konfigurasi berbasis negara lebih sederhana: Anda hanya peduli bahwa file tersebut memiliki izin yang benar. Bagaimana hal itu dicapai adalah masalah alat.

Jon Jaroker
sumber
1
Sebenarnya saya chmodtidak menganggap bahwa file itu ada karena file itu dibuat oleh atau diuji untuk keberadaan oleh skrip.
Acumenus
9

Jika server dapat digunakan oleh Anda, atau Anda memiliki alasan untuk berdiri lebih dari satu pasangan sekaligus, sistem CM full-blown akan jauh lebih baik memenuhi kebutuhan Anda daripada serangkaian skrip shell.

Jika kebutuhan bangunan Anda sederhana, (atau ingin membuat server perdagangan bebas organik buatan tangan secara artistik), maka tetap sederhana.

Secara pribadi, setelah menggunakan Chef secara luas di pertunjukan sebelumnya, saya berusaha 'tetap sederhana' di pertunjukan ini, tetapi saya benar-benar merindukan primitif, abstraksi, dan kekuatan yang diberikan oleh Chef. Bahkan jika Anda sampai pada situasi di mana Anda bisa mendapatkan apa yang Anda butuhkan dari beberapa perintah shell, Anda bisa menjalankannya dengan blok 'command', memasukkan perintah shell Anda persis seperti yang Anda tuliskan di shell.

Dengan itu, Anda dapat menjalankan Chef tanpa server (chef-solo), dan saya cukup yakin bahwa Wayang memiliki analog, di mana Anda masih dapat memanfaatkan buku resep dan resep orang lain tanpa menjalankan server pusat.

Manfaat lain adalah komunitas: ada banyak orang (banyak di antaranya akan lebih pintar dan / atau lebih berpengalaman dari Anda). Secara pribadi saya suka ketika orang lain telah melakukan pekerjaan saya untuk saya, seringkali lebih luas daripada yang saya lakukan.

gWaldo
sumber
1

Saya membuat kerangka kerja otomatisasi server berbasis skrip shell: https://github.com/myplaceonline/posixcube

Saya yakin saya bukan orang pertama yang membuat proyek semacam ini tetapi saya tidak dapat menemukan sesuatu yang sesuai dengan kebutuhan saya, jadi saya pikir orang lain mungkin menganggap ini berguna. Saya hanya memiliki pengalaman dengan Chef, tetapi ketika saya mulai melihat-lihat Ansible dan yang lainnya, saya ingin mencoba skrip shell, dan saya sangat menyukai hasilnya sejauh ini.

Kevin
sumber