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.