Chef-solo yerine chef-server kullanmanın faydaları nelerdir?


33

Ekibimin otomatik dağıtım çözümlerine bakıyorum ve son birkaç gündür Chef ile birlikte oynuyorum. Şef-solo kullanarak basit bir web uygulamasını temel Red Hat VM'den kullanabiliyorum.

Nihai hedefimiz, uygulama topolojilerini buluta çalıştırdıkça buluta otomatik olarak yerleştirmek için Chef (veya başka bir sistemi) kullanmaktır. Bizim sürecimiz temelde şöyle gerçekleşecekti:

  1. Web uygulama kodumuz, bağımlılıklar ve şef yemek kitapları SCM'de saklanmaktadır.
  2. Bir derleme yürütülür ve görüntülerin edinilmesi ve denenmesi için tek bir paket oluşturur
  3. Derleme motoru daha sonra paketleri kurmak için bir şef istemcisi çalıştıran yeni bulut görüntüleri dağıtır.
  4. Görüntüler, yemek kitaplarını SCM'den veya Chef sunucusundan alır ve çalışmaya başlamak için her şeyi yükler

Chef Server'ı çalıştırmanın yararları ve / veya kullanım durumları nelerdir?

Bir Chef Server'ın, SCM'den yemek kitapları tutup alması ve şef-solo kullanması ve yemek kitaplarını SCM'den çekecek bir senaryosu bulundurmasının büyük yararları var mı?

Yanıtlar:


67

Bu cevabı "şef-solo'nın avantajları neler" sorusuymuş gibi yönlendireceğim çünkü yaklaşımlar arasındaki farklılıkları ele almanın en iyi yolu budur.

Özet önerim diğerleriyle aynı doğrultuda: düğümleri sık sık ekleyip çıkaracağınız dinamik, sanallaştırılmış bir ortamı yönetmeniz gerekirse, bir şef sunucu kullanın. Gerekirse, bir şef sunucusu da iyi bir CMDB'dir . Düğümlerin çok sık değişmeyeceği ancak rol ve tariflerin değişeceği daha az dinamik bir ortamınız varsa chef-solo kullanın. Ortamınızın büyüklüğü ve karmaşıklığı aşağı yukarı alakasızdır. Her iki yaklaşım da çok iyi ölçeklenir.

Chef-solo'yu konuşlandırırsanız, her düğümdeki şef deposunun tam bir kopyasını korumak için rsync, 'git pull' ya da başka bir idempotent dosya aktarma mekanizması olan bir cronjob kullanın. Cronjob (a) hiç çalışmamasına ve (b) çalışmasına, ancak yerel depoyu senkronize etmeden kolayca yapılandırılabilir olmalıdır. Şef deponuza her düğüm için bir json dosyası içeren bir düğüm / dizin ekleyin. Doğru düğüm bilgisini belirlemek için istediğiniz gibi cronjob, istediğiniz kadar sofistike olabilir (her ne kadar sadece $ (hostname -s) öneririm. Topluluk yemek kitapları indirmek ve iskeletler oluşturmak için bıçak kullanabilmekten başka bir sebep yok.

Bu yaklaşımın "bir sunucuyu yönetmeme gerekliliği" nin yanı sıra birçok avantajı vardır. Kaynak kontrolünüz tüm konfigürasyon değişikliklerinin nihai hakemi olacak, havuz tüm düğümleri ve çalışma listelerini içerecek ve her bir sunucunun tamamen bağımsız olması bazı uygun test senaryolarını kolaylaştırıyor.

Chef-server, bir yemek kitabını güncellemek için "bıçak yükleme" kullandığınız bir delik açar ve bu deliği kendiniz (işlem sonrası kanca gibi) ya da "site yükleme işlemi" yapan bir kişi tarafından sessizce üzerine yazılma riskini kabul etmelisiniz. diz üstü bilgisayarındaki eski yerel depodan eski bir tarif. Tüm değişiklikler doğrudan ana depodan sunuculara eşitleneceğinden, bu durum şef-solo'da gerçekleşmesi daha az olasıdır. Buradaki sorun disiplin ve ortak çalışan sayısıdır. Yalnız bir geliştirici veya çok küçük bir ekibiyseniz, API aracılığıyla yemek kitapları yüklemek çok riskli değildir. Daha büyük bir takımda, iyi kontroller yerine koymazsanız olabilir.

Ek olarak, chef-solo ile tüm düğümlerinizin rollerini, özel niteliklerini ve çalışma listelerini ana şef deponuzda node.json dosyaları olarak saklayabilirsiniz. Chef-server ile, rolleri ve çalışma listeleri API kullanarak anında değiştirilir. Chef-solo ile bu bilgiyi revizyon kontrolünde takip edebilirsiniz. Statik ve dinamik ortamlar arasındaki çatışmanın açıkça görülebildiği yer burasıdır. Düğüm listeniz (ne kadar uzun olursa olsun) sık sık değişmiyorsa, bu verilerin revizyon kontrolünde olması çok yararlıdır. Öte yandan, sık sık yeni düğümler oluşturuyorsanız ve eskilerini yok ederseniz (asla ana bilgisayar adlarını veya fqdn'lerini bir daha asla göremezsiniz), hepsini revizyon kontrolünde tutmak, sadece gereksiz bir güçlüktür ve değişiklik yapmak için bir API'ye sahip olmak çok uygundur. Chef-server, dinamik bulut ortamlarını yönetmeye yönelik ve aynı zamanda bir düğümü tanımlamanın varsayılan yolu olarak fqdn'yi değiştirmenize izin veren "knife bootstrap" üzerindeki ad seçeneği gibi, tüm özelliklere sahiptir. Ancak statik bir ortamda, bu özellikler, özellikle her şeyle revizyon kontrolünde rollerin ve çalışma listelerinin yer almasına kıyasla sınırlı değerdedir.

Son olarak, neredeyse hiç ekstra çalışma yapmadan tarif test ortamları anında kurulabilir. Bir sunucuda çalışan cronjobs'u devre dışı bırakabilir ve doğrudan yerel deposunda değişiklik yapabilirsiniz. Değişiklikleri chef-solo çalıştırarak test edebilirsiniz ve sunucunun üretimde kendini nasıl yapılandıracağını tam olarak göreceksiniz. Her şey test edildikten sonra değişiklikleri kontrol edebilir ve yerel cronjobs'u yeniden etkinleştirebilirsiniz. Yine de tarifleri yazarken, "Arama" API'sini kullanamazsınız, yani dinamik tarifler (örneğin yük dengeleyiciler) yazmak istiyorsanız, bu sınırlamaları aşmak zorunda kalacaksınız; düğümlerin / dizininizin, daha az uygun olması muhtemeldir ve tam CMDB'de mevcut olan verilerin bir kısmından yoksun olacaktır. Bir kez daha, daha dinamik ortamlar veritabanı odaklı yaklaşımı destekleyecektir, Yerel diskteki json dosyalarında daha az dinamik ortamlar yeterli olacaktır. Bir şefin çalıştığı bir sunucu ortamında API çağrılarını merkezi bir veritabanına yapmak zorunda olduğunda, o veritabanı içindeki tüm test ortamlarını yönetmeye bağlı olacaksınız.

Sonuncusu acil durumlarda da kullanılabilir. Üretim sunucularında kritik bir sorunu gideriyorsanız ve bunu bir yapılandırma değişikliği ile çözüyorsanız, değişikliği derhal sunucunun deposunda yapabilirsiniz, ardından master'ı yukarı doğru itebilirsiniz.

Bunlar şef-solo'nun başlıca avantajları. Bir sunucu yönetmek veya barındırılan şef için ödeme yapmak zorunda kalmamak gibi bazıları da var, ancak bunlar nispeten küçük kaygılar.

Özetle: Dinamik ve son derece sanallaştırılmışsanız, chef-server bir çok harika özellik sunar (başka yerlerde ele alınmıştır) ve şef-solo avantajlarının çoğu daha az farkedilir. Bununla birlikte, özellikle daha geleneksel ortamlarda, şef solo için bazı kesin, çoğu kez belirtilmemiş avantajlar vardır. Bulutta konuşlandırılmanın mutlaka dinamik bir ortamınız olduğu anlamına gelmediğini unutmayın. Örneğin, yazılımınızın yeni bir sürümünü yayınlamadan sisteminize daha fazla düğüm ekleyemiyorsanız, muhtemelen dinamik değilsinizdir. Son olarak, üst düzey bir perspektiften bir CMDB, sadece ekip yönetimi arasında muhasebe ve bilgi paylaşımı gibi sistem yönetimi ve yapılandırması ile ilgili teğetsel olarak ilgili herhangi bir şey için faydalı olabilir. Chef-server kullanmak yalnız bu özellik için buna değer olabilir.


Hassas verileri (yani: özel anahtarlar / şifreler) chef-solo ile nasıl depolarsınız / dağıtırsınız? Düz metin olarak kaydetmeden revizyon kontrolü ile nasıl izlerim?
Limbo Peng,

@LimboPeng Şifreli veri çantalarını Chef deposunda saklayabilirsiniz. Yine de şifreleme anahtarını harici olarak saklamanız gerekir.
Willie Wheeler

27

Açıklama: Opscode için çalışıyorum.

Chef Server'ın Solo'ya göre en büyük yararı, aramanızı altyapınızla birlikte kullanabilmenizdir. Klasik örnek, web sunucuları olan bir yük dengeleyicidir. Yük dengeleyici, web sunucuları eklenerek altyapıya eklendiğinde, yalnızca onları arayarak yapılandırmasını otomatik olarak güncelleyebilir. Yalnız tek, tek makineler, Chef Server ise "4 gb’den fazla RAM’e sahip tüm makineler" veya "veritabanı yöneticisi" gibi şeyleri sorgulayabiliyor.

Chef Server ayrıca etrafınıza tarball kopyalamaksızın altyapınızı yönetme, yönetim konsolunu kullanarak altyapınızı görselleştirme ve hangi makinelerin Çalıştığını hangi yemek tariflerinin Ortamlarda çalıştığını yönetme becerisi sunar. Başka yararları da var ama bunlar kafamın üstündekiler. Chef Server'ı yüklemeden denemek istiyorsanız, bir Opscode Hosted Chef hesabına kaydolun, ilk 5 düğüm ücretsizdir.


1
Mray teşekkürler, bu bilgi bir TON yardımcı olur. Chef sunucusunu kullanırken birinin DevOps felsefelerini nasıl kucaklayacağını biliyor musunuz? Bununla demek istediğim, tüm yemek kitaplarımızı SCM'de yaşamak. Chef sunucusunun yeni kodu gönderirken güncel yemek kitapları almasını sağlamanın kolay bir yolu var mı?
linusthe3rd

2
@ strife25 Yapmalısın Yemek kitaplarınızı kesinlikle bir sürüm kontrol sisteminde bulundurmalısınız. Eğer birine bağlı değilseniz, Opscode Git'e, dağılmış takımlar için dallar ve kayalarla çalışmak kolay olduğu için tavsiye eder. Şef sunucusuna yemek kitapları yükleyen bir işlem sonrası kanca yazabilirsiniz. Chef sunucusunda sadece yemek kitapları kopyalamazsınız, çünkü bunları bir API üzerinden yüklersiniz ve bu tasarım gereğidir.
jtimberman

1

chef-server, düğümleriniz için yemek kitapları ve yapılandırma verilerini yönetir.

Bıçak aracını kullanarak şef-sunucuya yemek kitapları eklersiniz ve sonra her düğüme bir tarif listesi hazırlarsınız, böylece düğüm şef-istemci kullanarak hazırlanırken ihtiyaç duydukları yemek kitaplarını alırlar. Şef-müşteri arka planda çalıştığı için, şef-sunucunuzda güncellenmiş yemek kitapları olup olmadığını düğümleriniz periyodik olarak kontrol edecektir.

chef-server ayrıca yapılandırma verilerinizi ve değişkenlerinizi de tutar, böylece düğümlerinizin otomatik olarak alması için ayarları değiştirebilirsiniz. Bu, tariflerinizde kodlanması gerekmeyen veya kodlanamayan daha dinamik ayarlar için iyidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.