Apa manfaat menjalankan chef-server daripada chef-solo?


33

Saya mencari solusi penyebaran otomatis untuk tim saya dan telah bermain dengan Chef selama beberapa hari terakhir. Saya sudah bisa mendapatkan aplikasi web sederhana yang berjalan dari pangkalan Red Hat VM menggunakan chef-solo.

Tujuan akhir kami adalah menggunakan Chef (atau sistem lain) untuk secara otomatis menyebarkan topologi aplikasi ke cloud saat kami menjalankan build. Proses kami pada dasarnya akan berjalan seperti ini:

  1. Kode aplikasi web, dependensi, dan buku masak koki kami disimpan di SCM
  2. Build dijalankan dan membuat satu paket untuk mendapatkan gambar dan diuji
  3. Mesin build kemudian menyebarkan gambar cloud baru yang menjalankan klien koki untuk mendapatkan paket yang diinstal.
  4. Gambar mendapatkan buku masak dari SCM atau server Chef dan menginstal semuanya untuk bangkit dan berjalan

Apa manfaat dan / atau kasus penggunaan untuk menjalankan Server Chef?

Apakah ada manfaat utama untuk memiliki Chef Server memegang dan memperoleh buku masak dari SCM vs menggunakan chef-solo dan memiliki skrip yang akan menarik buku masak dari SCM?

Jawaban:


67

Saya akan mengarahkan jawaban ini seolah pertanyaannya adalah "apa kelebihan chef-solo" karena itulah cara terbaik yang saya tahu untuk membahas perbedaan antara pendekatan.

Rekomendasi ringkasan saya sejalan dengan yang lain: gunakan chef-server jika Anda perlu mengelola lingkungan yang dinamis dan tervirtualisasi tempat Anda akan sering menambahkan dan menghapus node. Server koki juga merupakan CMDB yang baik , jika Anda membutuhkannya. Gunakan chef-solo jika Anda memiliki lingkungan yang kurang dinamis di mana node tidak akan terlalu sering berubah tetapi peran dan resep akan berubah. Ukuran dan kompleksitas lingkungan Anda kurang lebih relevan. Keduanya mendekati skala dengan sangat baik.

Jika Anda menggunakan chef-solo, gunakan cronjob dengan rsync, 'git pull', atau mekanisme transfer file idempoten lainnya untuk mempertahankan salinan lengkap dari repositori chef pada setiap node. Cronjob harus mudah dikonfigurasi untuk (a) tidak berjalan sama sekali dan (b) berjalan, tetapi tanpa menyinkronkan repositori lokal. Tambahkan node / direktori di repositori chef Anda dengan file json untuk setiap node. Cronjob Anda dapat secanggih yang Anda inginkan dalam hal mengidentifikasi nodefile yang tepat (meskipun saya akan merekomendasikan $ (hostname -s) .json. Anda juga mungkin ingin membuat akun opscode dan mengkonfigurasi klien dengan koki yang dihosting, jika untuk tidak ada alasan lain selain menggunakan pisau untuk mengunduh buku resep komunitas dan membuat kerangka.

Ada beberapa keuntungan dari pendekatan ini, selain jelas "tidak harus mengelola server". Kontrol sumber Anda akan menjadi wasit terakhir dari semua perubahan konfigurasi, repositori akan mencakup semua node dan daftar putar, dan setiap server yang sepenuhnya independen memfasilitasi beberapa skenario pengujian yang nyaman.

Chef-server memperkenalkan sebuah lubang di mana Anda menggunakan "unggahan pisau" untuk memperbarui buku masak, dan Anda harus menambal lubang ini sendiri (seperti dengan kait pascakomit) atau perubahan situs risiko ditimpa secara diam-diam oleh seseorang yang "unggah pisau" Ini adalah resep usang dari repositori lokal yang sudah ketinggalan zaman di laptop-nya. Ini lebih kecil kemungkinannya terjadi pada chef-solo, karena semua perubahan akan disinkronkan ke server langsung dari repositori master. Masalahnya di sini adalah disiplin dan jumlah kolaborator. Jika Anda adalah pengembang solo atau tim yang sangat kecil, mengunggah buku masak melalui API tidak terlalu berisiko. Dalam tim yang lebih besar bisa jadi jika Anda tidak menempatkan kontrol yang baik di tempat.

Selain itu, dengan chef-solo Anda dapat menyimpan semua peran node Anda, atribut khusus dan daftar run sebagai file node.json di repositori chef utama Anda. Dengan chef-server, peran dan daftar run dimodifikasi dengan cepat menggunakan API. Dengan chef-solo, Anda dapat melacak informasi ini dalam kontrol revisi. Di sinilah konflik antara lingkungan statis dan dinamis dapat terlihat jelas. Jika daftar node Anda (tidak peduli berapa lama mungkin) tidak sering berubah, memiliki data ini dalam kontrol revisi sangat berguna. Di sisi lain, jika Anda sering memunculkan node baru dan menghancurkan yang lama (tidak pernah melihat nama host atau fqdn lagi) menjaga semuanya dalam kontrol revisi hanya merepotkan, dan memiliki API untuk melakukan perubahan sangat nyaman. Chef-server memiliki seluruh fitur yang diarahkan untuk mengelola lingkungan cloud yang dinamis juga, seperti opsi nama pada "knife bootstrap" yang memungkinkan Anda mengganti fqdn sebagai cara default untuk mengidentifikasi sebuah node. Tetapi dalam lingkungan yang statis fitur-fitur tersebut memiliki nilai terbatas, terutama dibandingkan dengan memiliki peran dan runlists dalam kontrol revisi dengan yang lainnya.

Akhirnya, lingkungan pengujian resep dapat diatur dengan cepat untuk hampir tidak ada pekerjaan tambahan. Anda dapat menonaktifkan cronjobs yang berjalan di server dan membuat perubahan langsung ke repositori lokalnya. Anda dapat menguji perubahan dengan menjalankan chef-solo dan Anda akan melihat persis bagaimana server akan mengkonfigurasi sendiri dalam produksi. Setelah semuanya diuji, Anda dapat memeriksa perubahan dan mengaktifkan kembali cronjobs lokal. Ketika menulis resep, Anda tidak akan dapat menggunakan API "Cari", yang berarti bahwa jika Anda ingin menulis resep dinamis (mis. Loadbalancers) Anda harus meretas batasan ini, mengumpulkan data dari file json di direktori / node Anda, yang kemungkinan kurang nyaman dan akan kekurangan beberapa data yang tersedia di CMDB lengkap. Sekali lagi, lingkungan yang lebih dinamis akan mendukung pendekatan berbasis database, lingkungan yang kurang dinamis akan baik-baik saja dengan file json pada disk lokal. Di lingkungan server tempat koki menjalankan harus membuat panggilan API ke database pusat, Anda akan bergantung pada pengelolaan semua lingkungan pengujian dalam database itu.

Yang terakhir juga bisa digunakan dalam keadaan darurat. Jika Anda memecahkan masalah kritis pada server produksi dan menyelesaikannya dengan perubahan konfigurasi, Anda dapat segera melakukan perubahan pada repositori server lalu mendorongnya ke atas ke master.

Itulah keunggulan utama chef-solo. Ada beberapa yang lain, seperti tidak harus mengelola server atau membayar untuk koki yang dihosting, tetapi itu adalah masalah yang relatif kecil.

Singkatnya: Jika Anda dinamis dan sangat tervirtualisasi, chef-server menyediakan sejumlah fitur hebat (dibahas di tempat lain) dan sebagian besar keunggulan chef-solo akan kurang terlihat. Namun ada beberapa keuntungan pasti, sering tidak disebutkan untuk chef-solo terutama di lingkungan yang lebih tradisional. Perhatikan bahwa penggunaan di cloud tidak selalu berarti Anda memiliki lingkungan yang dinamis. Jika Anda tidak dapat, misalnya, menambahkan lebih banyak node ke sistem Anda tanpa merilis versi baru perangkat lunak Anda, Anda mungkin tidak dinamis. Akhirnya, dari perspektif tingkat tinggi, CMDB dapat berguna untuk sejumlah hal yang hanya berkaitan secara tangensial dengan administrasi dan konfigurasi sistem seperti akuntansi dan berbagi informasi antar tim. Menggunakan chef-server mungkin layak untuk fitur itu saja.


Bagaimana Anda menyimpan / mendistribusikan data sensitif (yaitu: kunci pribadi / kata sandi) dengan chef-solo? Bagaimana cara melacaknya dengan kontrol revisi tanpa menyimpannya sebagai plaintext?
Limbo Peng

@LimboPeng Anda dapat menyimpan tas data terenkripsi di repo Chef. Anda harus menyimpan kunci enkripsi secara eksternal.
Willie Wheeler

27

Pengungkapan: Saya bekerja untuk Opscode.

Manfaat utama Chef Server over Solo adalah kemampuan untuk menggunakan pencarian dengan infrastruktur Anda. Contoh klasik adalah penyeimbang beban dengan server web. Load balancer dapat secara otomatis memperbarui konfigurasinya ketika server web ditambahkan dan dihapus ke infrastruktur, hanya dengan mencari mereka. Solo hanya itu, mesin tunggal, sementara Chef Server membawa kemampuan untuk menanyakan hal-hal seperti "semua mesin dengan lebih dari 4 gigs RAM" atau "master database".

Chef Server juga memberi Anda kemampuan untuk mengelola infrastruktur Anda tanpa menyalin tarbal di sekitar, untuk memvisualisasikan infrastruktur Anda dengan konsol manajemen dan untuk mengelola mesin mana yang menjalankan versi buku masak mana dengan Lingkungan. Ada manfaat lain, tetapi itu adalah yang terbaik di kepala saya. Jika Anda ingin mencoba Server Chef tanpa menginstalnya, cukup mendaftar untuk akun Chef yang Di-Opscode, 5 node pertama adalah gratis.


1
Terima kasih mray, informasi itu membantu satu TON. Apakah Anda tahu bagaimana orang akan merangkul filosofi DevOps saat menggunakan server Chef? Yang saya maksud dengan ini adalah memiliki semua buku masak kami tinggal di SCM. Apakah ada cara mudah untuk membuat server Chef mendapatkan buku masak yang diperbarui saat kami memberikan kode baru?
linusthe3rd

2
@ strife25 Anda harus pasti memiliki buku masak Anda dalam sistem kontrol versi. Jika Anda tidak terikat pada satu, Opscode merekomendasikan Git karena mudah untuk bekerja dengan cabang dan batu untuk tim yang didistribusikan. Anda dapat menulis kait pasca-komitmen yang mengunggah buku masak ke server Chef. Anda tidak hanya mengklon buku masak di server Chef karena Anda mengunggahnya melalui API, dan ini sangat disengaja.
jtimberman

1

chef-server mengelola buku resep dan data konfigurasi untuk node Anda.

Anda menambahkan buku masak ke server chef menggunakan alat pisau dan kemudian memberikan masing-masing node daftar resep sehingga mereka mengambil buku resep yang mereka butuhkan ketika simpul mengatur sendiri menggunakan koki-klien. Karena chef-client berjalan di latar belakang, node Anda akan memeriksa secara berkala jika ada buku masak yang diperbarui di server chef Anda.

chef-server juga menyimpan data & variabel konfigurasi Anda sehingga Anda dapat mengubah pengaturan agar node Anda mengambil secara otomatis. Ini bagus untuk pengaturan yang lebih dinamis yang tidak boleh atau tidak dapat dikodekan dalam resep Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.