Ansible kurulumunda provizyon ve konfigürasyon nasıl test edilir?


33

Tedarik ve konfigürasyon ile ilgili olan Ansible kurulumumuza biraz esneklik kazandırmaya çalışmak.

Bazı şeylerin konfigürasyon tarafında yapılan birkaç test yöntemini anlıyorum ama şeylerin sunumunda testin nasıl uygulanabileceğini ve bu tip uygulamalarda yardımcı olabilecek herhangi bir araç olup olmadığını merak ediyorum.

Şu anda testlerimizin birçoğu seri olarak, "hizmet geldi; vip müsait; bu async görevi bitmiş" gibi şeyler için çok anlamlı olan oyun kitabı boyunca gerçekleştirildi. hem uygulama hem de tedarik katmanında yapılandırma (VM yapılandırması gibi). Ansible'ın konfigürasyon kayması ile çalışmak için en iyi araç olmadığını biliyorum ama kendi görüşlerinizi görmeyi merak ediyorum.

İşlemi tamamen otomatikleştirmek için bir şeyiniz varsa daha da iyi. (Her gün gevşek kaldığını bildiren birkaç çirkin senaryo var).

Not : Şu anda bir reprovision işleminin ortaya çıkabileceği birkaç koşul var (örneğin, yedeklemeden yeniden oluşturma, kritik sistemler sorunu) ancak tipik olarak, bazı yapılandırılabilir yapılandırma görevlerinden geçiyor ve artık bunu düşünmüyor.



Ansible, tedarikten sonra yalnızca bir kez çalışır mı? Eğer değilse, hangi frekansta çalışıyor? Sadece bir çözüm sunmadan önce sorunu anlamaya çalışıyorum.
Woodland Hunter

Merhaba @Naphta, yanıtların herhangi biri sorunuzu çözdü, lütfen onay işaretini tıklayarak kabul edin. Bu, daha geniş bir topluluğa bir çözüm bulduğunuzu gösterir ve hem yanıtlayıcıya hem de kendinize bir ün kazandırır. Bunu yapmak zorunluluğu yoktur.
Richard Slater,

I'm aware Ansible isn't the best tool for working with configuration drift Lütfen açıkla.
030

Yanıtlar:


19

Orada bazı seçenekler var ..

Test araçları: Github yıldızlarına göre sıralanmış

  • Serverspec - Ruby'nin en popüler aracı Ruby, Ruby'nin Rspec'i üzerine kurulu.
  • Goss - YAML, basit, <10MB kendi kendine yeten ikili, son derece hızlı, sistem durumundan testler üretebilir
  • Inspec - Ruby, şef adamlar tarafından yapılmış, neredeyse aynı sözdizimi olan gelişmiş bir serverpec olarak düşünün. Sunucu özelliklerinden daha kolay genişletilebilmesi için üretildi
  • Testinfra - Python, Ansible envanterini / varsını kullanabilme becerisine sahiptir

Aralarındaki büyük farklar:

Nihayetinde, kendinize karar vermeden önce onlar için bir fikir edinmek için hepsini deneyerek bir gün geçirmenizi öneririm.

  • Goss hariç, tüm çerçeveler uzaktaki bir makineye (örneğin, ssh) karşı çalıştırılabilir. Goss sadece yerel olarak veya liman işçisi w / dgoss ile çalışır.
  • Tüm çerçeveler sunucuda yerel olarak çalıştırılabilir, ancak Python veya Ruby'nin kurulmasını veya gömülmesini gerektirir. Inspec, gömülü bir yakut versiyonuyla kendi kendine yeten <150 MB'lık bir paket sunar. Goss, dış bağımlılıkları olmayan tek bir <10 MB ikilidir.
  • Goss, nagios / sensu çıkışı için destek sağlamıştır, bu da izleme araçlarıyla daha kolay entegrasyon sağlar.
  • Goss testleri YAML'ye dayandığından daha basit, fakat daha az esnek olma eğilimindedir. Diğer çerçeveler testler yazmak veya aracın işlevselliğini genişletmek için temel dil Python / Ruby'nin gücünden yararlanmanıza izin verir. (sadelik ve esneklik)
  • Goss mevcut sistem durumundan testler oluşturmanıza olanak sağlar
  • Bildiğim kadarıyla Testinfra, sorumlu envanter ve değişkenler için yerleşik destek olan tek kişidir
  • Inspec Chef tarafından desteklenmektedir

Sürekli / ayrışma testi:

  • Şef Uyumluluğu - sunucularınızı ve ücretli ürünlerinizi sürekli olarak test etmek için inspec ile çalışır
  • Goss - Kolayca Nagios veya Sensu'ya bağlanabilir. Ayrıca, sunucu testlerini http uç noktası olarak göstermeyi de destekler.

Geliştirme için koşumların test edilmesi:

  • mutfak - Test kablo demeti aracı, örneği başlatır, config yönetim kodunu çalıştırır, test takımını çalıştırır. Şef çocuklar tarafından yapılan
  • Molekül - Test mutfağına benzer, ancak özellikle sorumlu olanlar için yazılmış

Tam Açıklama: Ben dedikodunun yazarıyım

GÜNCELLEME: InSpec 4.x veya üzeri, karma bir ticari / açık kaynaklı lisans kullanıyor - yorumlara bakın.


4
Anladığım kadarıyla biraz önyargılısınız, ancak inspec'in periyodik olarak çalışması için Uyum'a ihtiyacı yok. Ve yönetilmesi gereken bir bağımlılık yoktur, tüm gerekli lib'ler ve çerçeveler (yakutlar), her bir düğümde yerel olarak kurulabilecek pakette, ssh / winrm ile çalıştırılırken, inspec kendini yerleştirmiştir. Sadece doğru olmayan harici komutları işaret edersiniz, dahili yakut koduyla birçok test yapılır. (Bence not
edilmeye

Harici komutu düzeltmek için cevabı güncelledim ve inspec için birlikte gelen yakut. Inspec'in sürüklenmeyi tespit etmek / rapor etmek için kendi başına nasıl kullanılabileceğini açıklayan bir bağlantı açıklayabilir veya gönderebilir misiniz?
Ahmed Elsabbahy

Raporlama kısmı sizin elinizde olacak, aslında bir temsil yapmak Uyumluluk hedefi. Ancak, bir crontab'ta inspec'i çalıştırabilir ve yalnızca sizi uyaracak bir test olmadığında crontab postasına güvenebilirsiniz (örneğin).
Tensibai

Sonuçta, düzenleme için teşekkür ederiz, bu araç ve diğerleri hakkında adil bir açıklamadır. Korkarım bu hızlı bir şekilde modası geçmiş olabilir, ama yine de listeleme ve işaretçiler için +1.
Tensibai

Ah, evet .. tüm araçlar bu şekilde kullanılabilir. Daha iyi raporlama sağlayan araçlar (veya araçlarla entegrasyonlar) sağlamaya çalışıyordum. Bildiğim kadarıyla uyum var ya da araçları nagios / sensu / başka bir izleme aracı dostu hale getirecek şekilde sarmak. Örn: slideshare.net/m_richardson/… Başlangıçta önyargılı olarak çıktığı için özür dilerim.
Ahmed Elsabbahy

13

Bunun için gördüğüm iki araç InSpec ve ServerSpec . Serverspec üzerine inşa Ruby tabanlı bir araçtır RSpec . InSpec, RSpec ve ServerSpec'ten ilham almıştır.

ServerSpec kullandım. Serin, ama belki de% 100 kararlı değil. Ubuntu'da belirli yazılım sürümleri için testler yaparken sorun yaşadım.

InSpec belgelerini okudum ama henüz derine inmedim. Temelde Serverspec ile aynı şeyi yapar.

Github'un görevine bakılırsa, ServerSpec'teki işler biraz azaldı gibi gözüküyor, oysa InSpec sadece hızlanıyor.

GÜNCELLEME: InSpec 4.x veya üzeri, karma bir ticari / açık kaynaklı lisans kullanıyor - yorumlara bakın.


1
“Ubuntu’da belirli yazılım sürümlerini sınama konusunda sorun yaşadım.” Bunu SO ile ilgili bir soru fark ettikten sonra düzelttim: stackoverflow.com/questions/42417864/…
Matt Schuchard

Hafifçe açıklığa kavuşturmak için InSpec, RSpec'e öykünür ancak üzerine kurulmaz.
coderanger

1
@MattSchuchard Bu referans için teşekkürler!
Dave Swersky

iyi bir test aracı için "% 100 kararlı değil" hiç iyi
gelmiyor

InSpec bir test aracı olarak çok iyidir ve sunucuya hiçbir şey yüklemeyi kolaylaştırmaz, oysa ServerSpec bunu sadece bazı ekstra çalışmalarla yapabilir. InSpec'in bir Ansible envanteri kullanması için bazı çalışmalar gerekecektir - envanter YAML formatında ise (Ansible 2.4+) daha kolay .
RichVel

10

Ansible gibi konfigürasyon yönetimi araçlarını kullanırken, aracın kendisi konfigürasyonun kaymasını önlemekten sorumlu olacaktır. Belirli bir konfigürasyon ayarlamak için Ansible'ı kullandıktan sonra, Ansible'ın tekrar tekrar çalıştırılması konfigürasyonunuzun sizin tanımladığınız şekilde olmasını sağlayacaktır. Bu aynı zamanda Ansible kodunuzun iddiasız bir şekilde yazılmasını gerektirir.

Yukarıdakiler göz önüne alındığında, Ansible playbook'larınızı bir sunucudan bir döngüde çalıştırarak test provizyonu yapılabilir. Örneğin, bir cron işi ya da Jenkins, oyun kitaplarını her 30 dakikada bir uygulayabilir ve herhangi bir başarısızlığı rapor edebilir. Hata olmaması, yapılandırmanızın kontrol altında olduğu anlamına gelir; hataların olması, sunucuların istediğiniz duruma getirilmesinde bir sorun olduğu anlamına gelir .

Kodunuzun iddiasız olarak yazılmasına güvenemeyeceğiniz bir durumda ve bu nedenle Ansible'ı otomatik olarak bir otomatik sunucudan bir döngüde tekrarlı olarak çalıştıramazsanız, geçici bir çözüm vardır. Yukarıdakiyle aynı şeyi yapabilirsiniz (bir döngüde Ansible'ı çalıştırın) ancak kuru çalışma modunu kullanın . Ansible, değişikliklerin gerekli olduğunu bildirdiği her zaman, Jenkins işi (veya cron işi), size sağlanan yapılandırmanızın değiştirildiğini ve sunucuların istenen durumda olmadığını bildirir .

Ansible kodunuzun aslında yapılması gerektiğini düşündüğünüz şeyi yaptığından emin olmak için Dave Swersky tarafından belirtilen çözümler uygulanır. Hem Inspec ve Serverspec bir doğrulamak araçlardır farklı senin playbooks aslında ne anlama biçimi. Bu tür aletleri test ortamlarında (liman işçisi konteynırları) bile kullanmanın harika bir yolu , çeşitli infra ünite test aletleri arasındaki tüm tutkalı ve mutfak kitaplarınızın / modüllerin / yemek kitaplarınızın yürütülmesini sağlayan kitchen.ci'yi kullanmaktır .

Kitchen.ci başlangıçta Şef yemek kitaplarını test etmek için kullanılıyordu, ancak Ansible ve diğer CM araçları için de eklentiler mevcut .


5

Test Kitchen, Ansible kodunun test edilmesi için mutfağa duyarlı bir provizyon eklentisine sahiptir. Şef entegrasyonu kadar derin değildir, ancak çoğu durumda bu işi yapar. Ayrıca Ansible test sistemi olan daha yeni bir Molekül projesi var.


0

Outthentic kullanarak konfigürasyon / altyapı tutarsızlıklarını / sapmalarını takip edebilirsiniz , istenen durumu "düzeltmek" ve istenmeyen değişiklikleri izlemek için ihtiyaç duyduğunuz her seferinde yeniden çalıştırmak için bir test paketi oluşturmak kolaydır.


1
DevOps.se Alexey'a hoş geldiniz. Aracınız bu durumda kullanıcıya yardımcı olsa da, bunun burada bir cevap olması için, bunun soruyla nasıl alakalı olduğunu iletmek için biraz daha fazla olması gerekir. Aksi takdirde, yalnızca bağlantı içeren bir reklam gibi görünür.
civcivler

Merhaba! Tabii, daha fazla ayrıntı verdim.
Alexey Melezhik

Benim bakış açıma göre, bu, merminin yapabileceğinden ve bu sorunun kapsamı dışında bir şey yapmaz. Özellikle cevap, bin sunucuyu denetlemeyi nasıl çözebileceğini ve sürüklenmeye karşı uyarılmayacağını ya da denetlenebilir bir bölüm için bir bölümlendirilebilir çıktı vererek insan tarafından okunabilir bir rapor sunabileceğini açıklamadığı için. Az önce okuduklarımdan itibaren, inspec'in (örnek olarak) yapabileceğinden fazla bir şey yapmaz ve işi yapmak için çok fazla dış araç gerektirip daha az taşınabilir olmak için daha az kullanılabilir çıktı verir.
Tensibai

"bin sunucuyu denetlemeyi nasıl çözebilir" - soruyla ilgili binlerce sunucu hakkında bir şeyler bulabilirim
Alexey Melezhik

"ve sürüklenebilir bir durumdan haberdar olun ya da bazı denetlenebilir çıktılar vererek denetçi için okunabilir bir rapor sunun." ne de bunu soruda buldum. Sürüklenmenin bariz uyarısı testlerin başarısızlığa
uğramaya
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.