Neden kabuk / komut dosyaları üzerinde Şef / Kukla kullanmalı?


81

Kukla ve Şef araçları için yeni. Yaptıkları iş, kabuk komut dosyasıyla yapılabilir gibi görünüyor. Belki bunlar gelene kadar kabuk betiklerinde yapıldı.

Daha okunaklı olduklarına katılıyorum. Ancak, sadece okunabilir olmanın yanı sıra kabuk senaryolarına göre başka avantajlar var mı?

Yanıtlar:


56

Etki alanına özgü bir dil, yazdığınız kod miktarında büyük bir fark yaratır. Örneğin, aralarında çok fazla fark olmadığını iddia edebilirsiniz:

chmod 640 /my/file

ve

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

ancak bunlar arasında büyük bir fark var:

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"

ve

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

Takım başarısız olursa ne olur? Senaryonuz bunu nasıl idare edecek? Ve betiğinizde bundan sonra $ FILE'in doğru içeriğe sahip olmasını gerektiren bir şey varsa ne olur?

echo "Hello world" > $FILEİlk örnekte komut dosyasının istemcide çalıştırılması gerektiği halde kuklanın hepsini sunucuda derlemesi dışında birinin bir senaryoya girebileceğini savunabilirsiniz . Dolayısıyla, içeriği değiştirirseniz, yalnızca sunucuda değiştirmeniz gerekir ve yerleştirmek istediğiniz kadar sistem için onu değiştirir. Ve kukla bağımlılıkları yönetir ve sizin için sorunları otomatik olarak aktarır.

Karşılaştırma yok - uygun yapılandırma yönetimi araçları size zaman ve karmaşıklık kazandırır. Ne kadar çok yapmaya çalışırsanız, o kadar fazla kabuk senaryosu yetersiz görünür ve kukla ile yaparak daha fazla çaba harcayacaksınız.


9
@ Paul Gear, konfigürasyon yönetimi araçlarının uzun vadede yolunda olduğunu söylemek çok basit bir işlemdir. Örneğin, AWS kullanarak bir kabuk betiği sunucuyu sıfırdan oluşturabilir, bazı testler yapabilir ve AWS instans'larının iyi olduğundan emin olduktan sonra, bir görüntü oluşturabilirsiniz. Daha sonra bu görüntüyü daha sonraki testler için bir önizleme veya hazırlık ortamına dağıtabilirsiniz, görüntüyü doğruladığınızda, amaçlarınız için iyidir, ardından prodüksiyona geçersiniz. Yapılandırma yönetimi araçları bu senaryoda hiç yardımcı olmuyor.
Derek Litz

Şimdi, insanların günlük olarak kullandığı 100'lerin tahsis edilmiş sunucularını yönetmek istiyorsanız (ve ne yaptıkları üzerinde yanlış bir şekilde kontrol etmiyorsanız) konfigürasyon yönetimi araçlarının kullanılması gereken yer burasıdır.
Derek Litz

6
Bu çok ikna edici bir örnek değil. Wget ile başlayabilirim ve sonra tuhaf bir durumda olmazdım. Adımlardan herhangi biri başarılı olmazsa, dosya geri alınacak bir işlem gibi mi oluyor?
PSkocik

33

Bu popüler olmayan bir fikir olacaktır, ancak konfigürasyon yönetim sistemlerinin mutlaka daha iyi olması gerekmez. Bazen basit gerçekten en iyisidir.

Seçtiğiniz yapılandırma sistemiyle ilgili kesin bir öğrenme eğrisi ve idari ek yük vardır. Sonuçta bir bağımlılık getirdiniz. Herhangi bir otomasyonda olduğu gibi, konuşlandırılmış yapılandırmalarda güvenliğin korunmasına da dikkat etmelisiniz.

Konfigürasyon yönetimini devreye aldığımız ve takılıp kaldığımız birkaç örnek var. Her zaman tekrarlayan konfigürasyona sahip çok sayıda sistem olduğu ve konfigüre edilebilir çerez kesici dağıtımları gerçekleştirme ihtiyacı olduğu zaman olmuştur.


10
Çevreyi yönetmenin maliyeti çok büyük olduğunda, otomasyonu yönetmek gerçekten daha ucuzdur. Git'te yönetilen değişiklikleri düzenlemek veya bir ssh çoklayıcısına bir şeyler ayarlamak daha basitse, bunu yaparız. Benim için en önemli şey sistemleri izlemem ve her şeyin beklendiği gibi çalıştığını doğrulamam. Bir şey yanlış yapılandırıldığında uyarıldığım sürece, nasıl yapılandırıldığı önemli değildir.
kenchilada

10
@ beyaz "ne zaman otomatikleştirmeye karar vermeyeceksin" xkcd.com/1205
MikeyB

3
Ansible gibi daha modern araçlar, Şef veya Kukla'dan daha az dağıtım / yönetim yüküne sahiptir ve çok az bağımlılık gerektirmektedir (özellikle Ansible ajansızdır). Bu gerçekten benimseme için çıtayı düşürür.
GomoX

2
@wwhite Kişisel üretkenlik için istediğiniz zaman otomatikleştiriyorsunuz. Otomatikleştirerek öğreniyorsunuz, sıradan işler yaparak öğrenmiyorsunuz. Öğrenme = verimlilik artışı ve yinelemeli gelişme. Otomasyon bununla birleşerek daha fazla pozitif üretiyor. Negatif yerine pozitif bir kartopu. Teknik Borç vs Teknik İlerleme.
Derek Litz

2
@ ABB Hayır, ima edilmemiştir. Kabuk betiklerinden bile bahsetmiyorum, genel bir uygulama olarak otomasyondan söz ediyorum. Bir şeyleri kabuk komut dosyaları ile otomatik hale getirebilir ve el ile yapmak yerine komut dosyası soyutlamasını öğrenebilirsiniz, bu yalnızca size bu görevi tekrar zamanla kazandırmaz, hataları önler. Ayrıca, bir sonraki komut dosyasını en sonuncusundan biraz daha iyi yazabilmelisin. Olumlu bir kar topu ... Ancak, senaryo yazma konusunda uzmansanız ve bir daha çalıştıracağınız herhangi bir şeyi yazmıyorsanız, hiçbir şekilde öğrenmenize veya zaman kazanmanıza yardımcı olmaz.
Derek Litz

23

Kendi soruna cevap verdin.

Otomasyon daha ölçeklenebilir ve resmileştiriliyor . Kukla ve Şef bugünlerde standart olarak kabul edilir ( iş ilanlarına bakın ).

Cobbled-birlikte kabuk komut onların yeri vardır, ama onlar değil DevOps hareketi bağlamında ölçeklenebilir. Okunabilirlik bunun bir parçası.


7
Kabuk komut dosyaları bir şekilde daha az resmi mi? İş ilanlarını alıntılamak ikna edici bir argüman yapar mı? Ve bir düşkünlük oldukça utanç vericidir, çünkü bir geliştirici olarak yeterince kullanılmamıştır. Bağlantı gerçekten ölçeklenebilirlik hakkında hiçbir şey söylemez. Kabuk komut dosyalarının ölçeklenebilir olmadığı iddiası mı? Bence Kukla ilginç, ama cevaptaki sebeplerden dolayı mutlaka değil.
Acumenus

İş ilanları, belirli beceriler için gerçek piyasayı yansıtır. Evet, konfigürasyon yönetimini amaçlanan amaç için kullanmak kabuk kodlarından daha ölçeklenebilir, daha sağlam ve belgelenmesi daha kolaydır. Birçok ortamda bulundum ve gördüğüm çoğu senaryo, birinin "üretim kalitesini" kabul ettiği ve istisnaları ele alacak şekilde düzenlendiği şekilde oluşturulmadı. Nedenini anlamak için kabul edilen cevaba bakınız.
ewwhite

1
"Ve bir devops utanç vericidir, çünkü bir geliştirici olarak azimlidir." Bu sadece doğru değil. DevOps, tıpkı Web Geliştirme gibi bir geliştirme uzmanlığıdır. Yazılım geliştirmenin kalıpları ve uygulamaları hala geçerlidir. DevOps hakkında okumalısınız.
Chaim Eliyah

13

Şef çok daha kolay yönetmek ve kolaylaştırır versiyonu manuel ftp veya bir unstandardized şekilde organize kabuk komut bir demet scp'yi zorunda vs özellikle bulut ortamının her tür karmaşık bir altyapının kurulum. Kaç tane bağımlılığı yönetmeniz gerektiğine bağlı olarak, bu kazanmanın büyüklüğü büyük ölçüde değişebilir ve bir CM çözümüne geçme kararı birçok insan için açık olmayan bir karardır.

Şef'in asıl (çoğu zaman ertelenmeyen) yararı azaptır . Örtüşen menfaatlerle çalışan tariflerin kombinasyonundan bağımsız olarak bir kaynağın durumundan emin olabilmek kabuk betiği konfigürasyonuna göre çok büyük bir avantajdır. Şimdi yapılandırma için kabuk komut dosyalarınız varsa, kaç tane istenmeyen / istenmeyen sonuçlar olmadan kaç kez çalıştırılabileceğini kendinize sorun.

Uygun bir CM çözümü, platformlar arası otomasyon ve ekip işbirliğini basitleştirerek ölçekte başarı sağlanmasına yardımcı olur. Tüm bunları, iyi düzenlenmiş, iyi bakımlı, sürümlü bir kabuk komut dosyası grubu ile gerçekleştirmek mümkün olsa da; Kendine "neden" diye sormalısın. Aşçı / Kukla ve benzer teknolojiler ortaya çıktı çünkü bir grup yetenekli SysOps bu sorunları tekrar tekrar çözmek zorunda kalmadan yoruldu ve bize daha iyi bir seçenek sunmak için yola çıktı.

Anahtar parçaları:

  • Idempotence
  • Bağımlılık Yönetimi Kolaylığı (sürüm oluşturma)
  • Standartlaştırılmış Organizasyon (endüstri düzeyinde kabul edilir)
  • Sunucu yapılandırma görevlerini sistem düzeyinde ayrıntılardan ayırmak için soyutlama
  • Topluluk bilgisinden yararlanabilme yeteneği (yukarıdaki tüm ilkeleri benimseme garantilidir)

3
Hakaret ss ile neredeyse imkansızdır. Bağımlılıklar yum / apt vb. İle iyi yönetilir. Kabul edilmek alakasızdır. Topluluk bilgisi ss için var. Bununla birlikte, bir sürü komut dosyası kopyalamak zorunda kalmamanın ve ayrıca sistemleri merkezi olarak yapılandırmanın her ikisinin de faydalı olduğunu kabul ediyorum. Kuklanın müşteri tarafındaki bir ajana ihtiyacı olduğunu duydum.
Acumenus

10

Kukla ve Şef gibi modern konfigürasyon yönetimi araçları , yapılandırılmış bir sunucuyu elde etmek için gerekli faaliyetler hakkında endişelenmek yerine sistemin durumunu tanımlamanıza izin verir .

Örneğin, chmod komutunuz, dosyanın var olduğunu, dosyanın sahibi olan kullanıcının var olduğunu, dizinlerin oluşturulduğunu vb. Varsayar. Bu nedenle senaryonuz tüm bu önkoşulları dikkate almalıdır.

Durum tabanlı konfigürasyon yönetimi araçları basittir: sadece dosyanın doğru izinlere sahip olmasını önemsiyorsunuz. Bunun nasıl başarıldığı, aracın problemidir.


1
Aslında benim chmoddosya, dosya tarafından oluşturulduğundan ya da komut dosyası tarafından varolduğunu test ettiğinden var olduğunu varsaymıyor.
Acumenus

9

Sunucular sizin için tek kullanımlıksa veya bir seferde birkaç kişiden daha fazla ayağa kalkarsanız, tam gelişmiş bir CM sistemi gereksinimlerinizi bir dizi kabuk betiğinden daha iyi karşılayacaktır.

Yapım ihtiyaçlarınız mütevazı ise (veya organik serbest alanlı adil ticaret sunucularını ustaca elden yapmak gibi), o zaman basit tutun.

Şahsen, şefi geçmiş bir konserde yoğun bir şekilde kullandıktan sonra, bu konserde 'basit tutmaya' çalıştım, ama şefin sağladığı ilkelleri, soyutlamaları ve gücü gerçekten özledim. İhtiyacınız olanı bir kaç kabuk komutundan elde edebileceğiniz bir duruma bile sahip olsanız bile, bunları 'komut' bloğu ile çalıştırabilirsiniz, kabuk komutlarınızı tam olarak onları kabuğa yazdığınız gibi girebilirsiniz.

Bununla birlikte, Chef'i bir sunucusuz çalıştırabilirsiniz (chef-solo) ve Puppet'in bir analogu olduğundan eminim, yine de merkezi bir sunucuyu çalıştırmadan başkalarının yemek kitabı ve tariflerini kaldırabilirsin.

Diğer bir yarar topluluktur: birçok insan var (çoğu sizden daha akıllı ve / veya daha deneyimli olacak). Şahsen, işimi benim için bir başkası benim için yaptığında, genellikle benim yaptığımdan daha kapsamlı olarak seviyorum.


1

Bir kabuk betiği tabanlı sunucu otomasyon çerçevesi oluşturdum: https://github.com/myplaceonline/posixcube

Bu tür bir projeyi ilk yapan ben değilim, ancak ihtiyaçlarımı karşılayacak bir şey bulamadım, bu yüzden başkalarının bunu faydalı bulabileceğini düşündüm. Sadece Chef ile deneyimim oldu, ancak Ansible ve diğerlerine bakmaya başladığımda, kabuk senaryolarına bir şans vermek istedim ve sonucu çok beğendim.

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.