Praktik / Pertanyaan terbaik Chef

48

Saya menggunakan dan mencintai Wayang. Saya pindah ke perusahaan baru dan mereka mengadopsi Chef. Jadi saya mencoba untuk belajar Chef tetapi mengalami kesulitan menyatukan semuanya karena saya masih berpikir dalam Wayang =)

Ini adalah pertanyaan saya:

  • Apakah lebih baik untuk mengatur peran di Ruby DSL, JSON, atau dari konsol manajemen? Mengapa ada banyak cara untuk melakukan hal yang sama?
  • Bisakah Anda mengatur buku masak ke dalam subdirektori? misalnya: kami memiliki perangkat lunak khusus yang saya ingin menulis buku masak untuk dan memasukkannya ke: chef-repo / buku masak / buku pedoman perusahaan kami / bea cukai bukuwarwarababank apakah ini akan menjadi praktik yang baik?
  • Apakah saya membuat buku masak untuk setiap jenis peran yang menentukan fungsinya? Apakah saya memiliki buku resep ini termasuk buku resep lain (yaitu buku resep untuk peran server web saya termasuk buku resep apache). Saya tidak yakin bagaimana inter-dependensi buku resep dan pewarisan ditangani.
  • Apakah ada sesuatu seperti classifier node eksternal Puppet sehingga node secara otomatis menentukan peran mereka?
  • Sepertinya Anda dapat mengonfigurasi hal-hal dengan pisau atau di dalam konsol manajemen, atau mengedit file JSON? Ini sangat membingungkan bagi saya mengapa ada begitu banyak cara untuk melakukan sesuatu, itu melumpuhkan! Apakah ada alasan untuk menggunakan satu atau yang lain? Berasal dari boneka sepertinya akan mudah untuk secara tidak sengaja mengonfigurasi sesuatu dengan alat ini (mis., Meninggalkan sesuatu)
  • Bagaimana saya bisa secara otomatis menyediakan node dengan Chef di cluster dev saya? Dengan Puppet, saya menjalankan VM yang menghubungkan ke puppermaster dan memulai menjalankan boneka dan mengatur dirinya sendiri (peran ditentukan oleh classifier node eksternal). Bagaimana saya melakukan ini dengan Chef? Instal chef dengan file pem / rb yang mengikatnya ke server chef, secara manual memberi tahu node perannya dengan pisau atau mengedit ini di antarmuka manajemen, dan kemudian memulai menjalankan chef-client untuk mengatur dirinya sendiri?

Saya menyelesaikan tutorial memulai dan saya melihat mereka memiliki tutorial EC2, tapi saya tidak pernah menggunakan EC2 sehingga sulit bagi saya untuk mengikuti. Pada titik ini saya telah menyelenggarakan Chef yang sedang berjalan dan saya mulai bermain-main dengan mengkonfigurasi satu node. Kemana saya harus pergi dari sini? Apakah saya perlu mulai melihat buku masak umum?

Dokumen pada Opscode tidak apa-apa, tapi tidak sebagus Wayang. Apakah ada sumber daya Chef lain yang baik yang mungkin saya lewatkan dalam pencarian saya?

rizen
sumber
5
Terlalu banyak pertanyaan dalam satu posting. Pertimbangkan untuk membagi masing-masing menjadi miliknya. Ini lebih baik untuk komunitas secara keseluruhan dan juga akan memberi Anda jawaban yang lebih baik dan lebih rinci.
Wesley

Jawaban:

84

Sunting Pertanyaan dan jawaban ini sudah berumur bertahun-tahun. Praktik terbaik definitif diajarkan melalui modul pelatihan mandiri Self- Rally Learn Chef yang diproduksi oleh Chef Software, Inc. Sebagian besar jawaban asli ada di bawah ini.

Dalam jawaban ini, "Chef" atau "chef-client" biasanya merujuk ke Chef Infra, produk. Opscode diganti nama menjadi Chef Software, Inc pada 2013 . Pada bulan April, 2019, Chef membuka kode sumber untuk semua produknya, bersama dengan menciptakan penamaan merek yang konsisten.

Tidak jelas apakah lebih baik untuk mengatur peran dalam ruby ​​DSL, JSON, atau dari konsol manajemen? Mengapa ada banyak cara untuk melakukan hal yang sama?

Pembaruan 2019 : Policyfiles adalah alur kerja terbaik untuk digunakan. Peran dianggap sebagai praktik yang inferior, dan Chef Software, Inc. merekomendasikan migrasi ke Policyfiles.

Ada banyak cara untuk melakukan hal yang sama karena orang memiliki alur kerja yang berbeda. Anda memilih alur kerja yang terbaik untuk lingkungan Anda. Biarkan saya menjelaskan apa perbedaannya sehingga Anda dapat membuat keputusan.

Ruby DSL untuk Peran ada untuk membuatnya lebih mudah untuk menulis peran tanpa mengetahui sintaks JSON. Ini adalah cara sederhana untuk memulai dengan Peran. Setelah Anda membuat perubahan, Anda mengunggahnya ke Server Chef dengan pisau.

knife role from file myrole.rb

Ini mengonversi peran ke JSON dan menyimpannya di server. Jika Anda memiliki lingkungan yang menegakkan Repositori Chef tempat peran Anda hidup sebagai sumber kebenaran, ini berfungsi dengan baik.

JSON adalah apa yang disimpan oleh Server Chef, jadi Anda juga mengedit JSON langsung di konsol manajemen. Itu memang membutuhkan lebih banyak bidang daripada Ruby DSL agar Knife mengenalinya dengan benar untuk diunggah. Detail-detail itu tersembunyi sampai tingkat tertentu melalui web UI.

Kerugian menggunakan konsol webui / manajemen untuk peran penyuntingan adalah mereka tidak ada dalam sistem kontrol versi lokal Anda kecuali Anda mengunduhnya dari server. Anda dapat melakukan ini dengan pisau:

knife role show myrole -Fj

The -Fjmemberitahu pisau untuk "tampilan dalam format JSON." Anda dapat mengarahkan output ke file .json jika Anda suka.

Pembaruan bertahun-tahun yang lalu : Ada perintah pisau tambahan untuk bekerja dengan file dalam repositori chef lokal. Saat ini perintah ini hanya mendukung file berformat JSON. Sebuah RFC masyarakat terbuka yang akan membahas menambahkan dukungan untuk DSL Ruby untuk plugin ini. Berikut ringkasan singkat alur kerja.

Periksa perbedaan konten antara server dan file lokal.

knife diff roles/myrole.json

Unggah file peran yang diformat JSON. The roles/path diperlukan. Ini dipetakan ke titik akhir API yang sama di server.

knife upload roles/myrole.json

Unduh konten dari server yang menimpa konten file dalam repositori.

knife download roles/myrole.json

Perintah-perintah ini datang dari knife-essentials, yang dibangun ke dalam paket klien koki.

Bisakah Anda mengatur buku masak ke dalam subdirektori? misalnya- kami memiliki perangkat lunak khusus yang ingin saya tuliskan buku masak dan memasukkannya ke: chef-repo / buku masak / buku pedoman perusahaan kami / bea cukai bukuwarwarababank apakah ini akan menjadi praktik yang baik?

Tidak. Knife memiliki harapan di mana buku masak harus hidup karena menggunakan API untuk mengunggah buku masak ke Server. Ini diatur dalam knife.rbdengan cookbook_path. Dalam versi Chef Infra yang lebih lama, Anda bisa menentukan lintasan untuk buku masak, tetapi ini tidak digunakan lagi karena memerlukan lebih banyak perawatan dan membingungkan pengguna.

Berdasarkan konvensi, kami menamai buku resep khusus pelanggan atau spesifik situs dengan nama yang diawali dalam direktori buku resep. Sebagai contoh Anda, itu akan menjadi:

chef-repo/cookbooks/ourcompany_customsoftware

Mungkin ada beberapa buku masak yang berbeda untuk "perusahaan kami" tergantung pada apa yang Anda lakukan.

Referensi lebih lanjut:

Apakah saya membuat buku masak untuk setiap jenis peran yang menentukan fungsinya? Apakah saya memiliki buku resep ini termasuk buku resep lain (yaitu- buku resep untuk peran server web saya termasuk buku resep apache). Saya tidak yakin bagaimana inter-dependensi buku resep dan pewarisan ditangani.

Tidak ada hubungan atau ketergantungan langsung antara peran dan buku masak.

Peran memiliki daftar run, yang menentukan resep dan peran lain yang harus diterapkan ke simpul apa pun yang memiliki peran itu. Node memiliki daftar run yang dapat berisi peran atau resep. Ketika Chef berjalan di node, itu akan memperluas daftar run untuk semua peran dan resep yang ada di dalamnya, dan kemudian mengunduh buku masak yang diperlukan. Dalam daftar run node:

recipe[apache2]

Chef akan mengunduh apache2buku masak untuk simpul sehingga dapat menerapkan resep ini.

Anda mungkin memiliki buku masak khusus untuk berperan dalam infrastruktur Anda. Lebih umum Anda akan memiliki buku masak yang untuk mengatur jenis layanan tertentu seperti apache2, mysql, redis, haproxy, dll. Kemudian Anda akan menempatkannya dalam peran yang sesuai. Jika Anda memiliki aplikasi khusus hal-hal khusus yang perlu terjadi untuk memenuhi peran, maka Anda dapat menulis ini ke buku masak khusus (seperti yang saya rujuk di atas).

Referensi lebih lanjut:

Apakah ada sesuatu seperti boneka node eksternal sehingga node secara otomatis menentukan peran mereka?

"Iya." Server Chef Infra melakukan penyimpanan data simpul (dalam JSON) secara otomatis, dan server juga secara otomatis mengindeks semua data simpul untuk pencarian.

Referensi lebih lanjut:

Sepertinya Anda dapat mengonfigurasi hal-hal dengan pisau atau di dalam konsol manajemen, atau mengedit file JSON? Ini sangat membingungkan bagi saya mengapa ada begitu banyak cara untuk melakukan sesuatu, itu melumpuhkan! Apakah ada alasan untuk menggunakan satu atau yang lain?

Server Chef Infra memiliki API TENANG yang mengirim dan menerima respons JSON. Knife dan konsol manajemen adalah antarmuka pengguna untuk berinteraksi dengan API dari sudut pandang administrasi.

Anda dapat menggunakan alat yang Anda sukai dengan lebih baik, meskipun konsol manajemen tidak memiliki banyak fitur seperti Knife. Kebanyakan orang yang menggunakan Chef Infra lebih suka antarmuka perintah-baris untuk kekuatan dan fleksibilitas yang disediakannya, bahkan orang-orang yang menggunakan Chef Infra di Windows. Selanjutnya, knifeadalah alat berbasis plugin yang Anda dapat membuat plugin baru untuk berinteraksi dengan Server Infra Chef, atau dengan bagian lain dari infrastruktur Anda.

Chef Infra adalah seperangkat perpustakaan, primitif, dan API. Ini memberi Anda fleksibilitas untuk membangun sistem manajemen konfigurasi yang berfungsi paling baik untuk infrastruktur Anda.

Bacaan lebih lanjut:

Bagaimana saya bisa secara otomatis menyediakan node dengan chef di cluster dev saya? Dengan wayang saya jalankan VM yang terhubung ke puppermatser dan memulai menjalankan wayang dan mengatur dirinya sendiri (peran ditentukan oleh classifier node eksternal). Bagaimana saya melakukan ini dengan koki? - Instal chef dengan file pem / rb yang mengikatnya ke server chef, secara manual memberi tahu node perannya dengan pisau atau mengedit ini di antarmuka manajemen, dan kemudian memulai menjalankan chef-client untuk mengatur dirinya sendiri?

Anda ingin menggunakan plugin pisau bootstrap. Ini adalah plugin bawaan yang dilengkapi dengan pisau. Anda memintanya seperti ini:

knife bootstrap 10.1.1.112 -x root -i ~/.ssh/root_id_rsa -r 'role[webserver]'

Ini akan:

  • SSH ke sistem target (10.1.1.112) sebagai rootpengguna menggunakan kunci SSH (Anda bisa ssh sebagai pengguna lain dan kemudian menggunakan --sudo).
  • Instal Ruby
  • Instal Chef
  • Buat file konfigurasi Chef untuk Server Chef Anda, baca konfigurasi pisau (.chef / knife.rb).
  • Salin kunci pribadi "validasi" RSA, yang akan digunakan simpul untuk mendaftar secara otomatis ke Server Chef.
  • Jalankan chef-clientmenggunakan tanda pisah koma yang ditentukan. Dalam contoh ini hanya webserverperan yang diterapkan.

Ini mengasumsikan bahwa sistem target telah disediakan, memiliki alamat IP dan Anda dapat SSH sebagai root. Bergantung pada kebijakan dan proses penyediaan lokal Anda, Anda mungkin perlu menyesuaikan cara kerjanya. Halaman bootstrap pisau di wiki menjelaskan lebih lanjut tentang cara kerjanya.

Knife juga memiliki plugin untuk sejumlah penyedia komputasi awan publik seperti Amazon EC2 dan Rackspace Cloud. Ada plugin yang tersedia untuk lingkungan cloud pribadi seperti Eucalyptus dan OpenStack. Ada juga plugin untuk VMware, Vsphere dan lainnya. Anda dapat melihat informasi lebih lanjut dalam dokumentasi.

Bacaan lebih lanjut:

Apakah ada sumber chef bagus lainnya yang mungkin saya lewatkan dalam pencarian saya?

The Chef Dokumentasi sumber utama dokumentasi.

The Pelajari Chef Rally adalah serangkaian modul sendiri keliling yang Anda dapat mempelajari semua tentang berbagai aspek Chef Infra, dan produk lainnya Chef.

Saya biasa memelihara blog tempat saya memposting tips, trik, dan panduan tentang Chef Infra: http://jtimberman.housepub.org/ . Saya memiliki seri yang disebut " tips cepat ". Karena keadaan kehidupan nyata dan komitmen lainnya, saya tidak lagi punya waktu untuk memelihara situs, tetapi saya dapat kembali ke sana di masa depan.

Pelanggan Chef dapat memperoleh bantuan dan dukungan di situs dukungan:

Komunitas pengguna Chef adalah sumber bantuan tambahan yang luar biasa:

Sumber daya tambahan yang tersedia di Chef Software, situs web Inc .

Saya harap ini membantu.

jtimberman
sumber
2
Ini adalah sumber yang berharga, harap tautkan lebih sering ke sana.
Pooyan Khosravi
Ada yang ingin ditambahkan / perbarui 7 tahun kemudian? ;)
Spechal