Yapılandırma yönetim araçları dağıtım araçları olarak kullanılmaya uygun mu?


10

Şu soruya vereceğim yanıtı : DevOps, Yazılım Escrow prosedürlerini geliştirmeye nasıl yardımcı olabilir? Tensibai'nin sorusu:

Capistrano'yu kukla veya aşçı üstüne ne gerektirir?

Benim yanıtı bir bağlantı sonrası oldu Nuh Gibbs'in makalesinde 'Do Biz Capistrano ve Şef Hem Need?' . Şahsen, hala Noah'ın en uygun olduğu görüşüne abone oluyorum:

  • dağıtımlar için Capistrano gibi uzman bir dağıtım aracı kullanın.
  • yapılandırma yönetimi için Chef gibi uzman bir yapılandırma yönetimi aracı kullanın.

Her araç türünün görevini tamamlamak için kullandığı temel yaklaşım çok farklıdır:

  • Yapılandırma Yönetim Araçları - bir sistemin istenen durumunu oluşturmak ve sürdürmekle ilgilidir, doğası gereği içgüdüseldir. Konfigürasyon yönetimi araçlarına örnek olarak Şef , Kukla , Ansible , PowerShell DSC , Tuz Yığını verilebilir .

  • Dağıtım Araçları - yazılım sürümlerini bir barındırma ortamına sunmakla ilgilidir, yazılımın birden çok sürümünü birden çok makinede tutmak ve hangi sürümün "güncel" olduğunu yönetmek için işlevsellik sağlarlar, doğası gereği zorunludurlar. Dağıtım araçlarına örnek olarak Capistrano , Octopus Deploy , Deployer ve Command.io verilebilir .

Yapılandırma Yönetim Araçları'nın dağıtım araçlarının işini yapabileceğine inanıyorum ve Bağlanabilir Altyapı durumunda , hedef üzerindeki yazılım sürümlerinin korunması gerekmediği için iş için en uygun araçlardır.

Soru: Chef, Ansible ve Puppet gibi yapılandırma yönetimi araçları, hem idempotent hem de zorunlu modelleri yerine getirebilecek kapasitede olgunlaştı mı?


Ansible her zaman yapabilirdi,
4.0'dan

1
Richard, son zamanlarda gönderdiğiniz tüm yüksek kaliteli sorular için teşekkür ederim. Beta sürümü sırasında siteyi önceden doldurmak için gösterdiğiniz sıkı çalışmayı gerçekten takdir ediyorum. İyi yönlendirici sorular sormak zordur ve yaptığınız işte gerçekten iyisinizdir.
Jiri Klouda

@JiriKlouda hoş geldiniz daha, tam anlamıyla aklımda soruları göndermek için bana hatırlatmak için bilgisayarımda "DevOps SE" post-it ™ var.
Richard Slater

Yanıtlar:


10

Bu bağlamda tipik tavsiye hemen uygulanmalıdır: iş için doğru aleti kullanın.

Ancak, günümüzde, işlevselliği az çok ilgili alanlara genişletme ve aslında çeşitli nedenlerden dolayı araç seti olma yönündeki yazılım araçlarının neredeyse virülan eğilimini göz ardı edemezsiniz : havalı özellik (ler), müşteri tabanını genişletme, daha fazla gelir elde etme vb.

Örneğin, birçok dosya yönetimi aracı görüntü görüntüleme özelliklerini içerir ve birçok görüntü işleme aracı dosya yönetimi özelliklerini içerir. Dosyaları hareket ettirebilir ve görüntüleri araçlardan herhangi biriyle, genellikle eşit derecede iyi görüntüleyebilirsiniz.

Bu nedenle, yazılım geliştirme sürecinin tüm bölümlerinin, ana özellikleri / yetenekleri farklı olsa bile, birden çok araç (set) tarafından örtülmesi / örtüşmesi oldukça mümkündür.

Bu nedenle , özel işleminizde elde etmek istediğiniz işlevsellik ve bir araç ya da diğerinin bağlamınızdaki işi ne kadar iyi yaptığına gerçekten bağlıdır . Öznellik / tercihler / kolaylık dahil.

Bu soruyu öncelikle görüş temelli yapmak;)


Tamamen katılıyorum! Giderek daha fazla organizasyon, özellikle iş fikri için bu doğru araçlarla "DevOps araç zinciri" geliştirmektedir. Daha fazla bilgi için bu wiki sayfaları farklı araçlar / işler hakkında konuşmak için iyi bir iş çıkarıyor: en.wikipedia.org/wiki/DevOps_toolchain
Karl Harnagy

Bir aracın kullanımını birincil amacının ötesine ne kadar uzatırsanız, bunun için daha fazla çaba harcayacağını da ekleyeceğim. Hem dağıtım hem de yapılandırma için belirli bir aracı kullanabilirsiniz, ancak yalnızca iki araç kullanmaktan daha fazla çalışma (veya yan adım en iyi uygulamaları gerektirme) olasılığı yüksektir.
jschmitter

6

Yapılandırma yönetim araçları, bir sistemi bilinen bir duruma getirmek için kullanılır. Dağıtım araçları yeni program dosyalarını ve program verilerini bir sisteme dağıtır. Günün sonunda, her iki araç türü de aşağıdakilerin bir kombinasyonunu yapar:

  • Sistemin mevcut durumunu belirleyin.
  • Dosyaları sisteme aktarın.
  • Kalıcı veri ekleme veya değiştirme (örn. Yapılandırma dosyaları, veritabanı verileri, kayıt defteri ayarları)
  • Programları başlatın veya yeniden başlatın.

Yapılandırma yönetimi araçları, sistemin durumunu belirten bildirim dillerine sahiptir. Dağıtım araçları, sisteme bir şeyler yapmasını söyleyen zorunlu dillere sahiptir. Bir DevOps çalışanının her ikisini de yapması gerekir.

Dağıtım aracını Capistrano kullanarak, sisteme web sunucusunun etkin olmasını sağlamak için dilini kullanmak beceriksizdir. Web sunucusunu yeniden başlatmak için bir komut ve web sunucusunun açık olup olmadığını kontrol etmek için başka bir komut vermeniz gerekir. Web sunucusunu bilinen bir duruma getirmek bir çamurdur.

Ansible yapılandırma yönetimi aracını kullanarak bir web sunucusunu yeniden başlatmak hantaldır. Dil, web sunucusuna "açık" olduğunu bildirmenize izin verir, ancak özellikle yeniden başlatılmasını istiyorsanız, durumunu "yeniden başlatıldı" olarak ayarlamanız gerekir. Ancak web sunucusunun yeniden başlatılıp başlatılmadığını kontrol etmenin kolay bir yolu yoktur. Bu Ansible'da tek seferlik işlemleri mümkün kılan bir çamurdur.

Bazı insanlar her iki işi de tek bir araçla yapmayı ve pürüzlü kenarların etrafında çalışmayı tercih ederler. Diğer insanlar pürüzlü kenarlar olmadan neredeyse aynı şeyi yapmak için iki araca sahip olmayı tercih ederler. Soruyu cevaplamak için, "uygunluk" bir zevk meselesidir. Bu cevap nedenini açıklıyor.


Capistrano'nun bu dava için biraz garip olmasına katılıyorum. Genellikle ssh üzerinden uzaktan çalıştırılan yakut scriptler / snippet'ler / lambda için ad alanı olarak kullanılır. Ansible'daki bölümünüz doğru değil. Biraz araştırmak ve düzeltmek isteyebilirsiniz. İyi ilk gönderi, ama lütfen biraz daha üzerinde çalışın.
Jiri Klouda

@JiriKlouda Ansible bölümünde neyin yanlış? no easy way to check if the web server has been restartedBir değişken kaydedilerek kontrol edilebilecek bölüm mü demek istediniz ?
David Vasandani

Bunu yapmanın birden çok yolu var, cevabın yazarı onları tanımıyor. Yorumlar teknik cevaplar için iyi bir yer olmadığından, ayrı bir soruya dönüştürmekten çekinmeyin.
Jiri Klouda

4

TL; DR : Ansbile'i kullanın, hem yapılandırma hem de dağıtım aracıdır :)

Birkaç dağıtım türü vardır:

  • Uygulama tabanlı (dosyalar, arşiv paketleri)

  • Kap tabanlı (VM'ler, Habitat, LXC, Docker'ı içerir)

  • Fonksiyon tabanlı (Mikro hizmetler / Lambdas / Fonksiyonlar)

Bu durumda yalnızca sunucu (lar) daki uygulama güncellemeleri hakkında konuştuğumuzu varsayıyorum.


Dağıtım için iki şeyin olması gerekir:

  1. Doğru dosya veya paketlerin sunucuya taşınması gerekir.
  2. Yapılandırma ve hizmet durumlarının değiştirilmesi gerekir.

Şimdi (1) için birden çok strateji kullanabilirsiniz:

  • Yapay Veri Havuzları / Senkronizasyon
  • Paket Depoları / Paket Yöneticileri
  • Sürüm Kontrol Sistemi / Güncelleme + Derleme (isteğe bağlı)
  • Dosya aktarım protokolleri (scp, rsync, ftp)
  • Dağıtım Araçları

(2) için şunları kullanabilirsiniz:

  • Yapılandırma yönetimi araçları
  • Dağıtım Araçları

Bu nedenle Dağıtım Araçları, hepsi bir arada dağıtım yapmanın bir yolu olsa da, bunlar her zaman en iyi strateji değildir. Bazen dağıtım için bu yolların birleşimini kullanmak istersiniz. Büyük olasılıkla en azından sunucularınızda paket yöneticilerini zaten kullanıyorsunuzdur. Büyük olasılıkla yapılandırma araçlarını zaten çalıştırıyorsunuz. Bazı yapılandırma araçlarıyla ilgili sorun, birden fazla sunucu arasında uygun bir düzenleme idi, ancak şimdi Şef ve Kukla bile bunu oldukça iyi yapabilir. Ansible bu konuda her zaman iyiydi.

Gönderen kişisel deneyim , bütün kombinasyonları kullandım ama şu anda biz dağıtım ve yapılandırma yönetimi için yanıtlayıcı 'senkronizasyon ve VCS ve dosya transferleri için paket depoları için Capistrano kullanın, ancak Capistrano'nun ile sorunlar vardır ve biz ondan uzaklaşmaya planya hem kurulum, bakım hem de konfigürasyon yönetimi için Ansible'da birleşin.


2
Ansible ve Capistrano ile yaşadığım deneyim beni aynı sonuca götürecekti. Sadece Ansible'la giderdim. Ve Ansible'ın güzel yanı, "istenen durum" bildirimlerinin altında yatan emir komutlarıyla çok güzel eşleşmesidir.
Jay Godse

1
Kullanıcılar bazen Yapılandırma Yönetimi araçlarının çevresindeki topluluk katkısını görmezden gelir. Ansible'ın topluluk bileşenleri, bazı önemli istisnalar dışında (DebOps gibi) henüz Şefler ve Kuklalar kadar parlak ve özellikli değil. Bunun bir ölçü olarak, Kukla ve Şef hem "uygulamak" ve edebiliyoruz bulurken uygulamasını kaldırma , yanıtlayıcı ' "o kadar büyük değil parçasını "uygulamak" de harika ama (yapmak ya bir dizi değişiklik geri al) yapılandırma direktifleri unapply "bölümü.
Jesse Adelman

3

Uygulama dağıtımı zor bir şeydir çünkü birçok alt problemi vardır. Config yönetim sistemleri yakınsak olan ve "sistemin istenen durumu" ile çalışan modelleme görevlerinde mükemmeldir. Uygulama dağıtımı bağlamında, bu, bir makineye bit dağıtmak, yapılandırma dosyalarını yönetmek ve sistem hizmetlerini ayarlamak gibi şeyler için mükemmeldir. Bunun için son derece kötü olan şey, doğası gereği prosedürel olan, özellikle veritabanı geçişleri ve hizmet yeniden başlatmalarıdır. Genellikle yakınsak mantığı Chef'e koymaya ve harici yordamsal araca (genellikle benim durumumda Fabric) kalan birkaç bitin yanı sıra gerçek yakınsamaların sıralanmasına izin vermeye çalışırım.

Yani, temelde, her ikisini de en iyi oldukları parçalar için kullanmalısınız.


3

Mevcut bir sunucuya veya bir Docker kapsayıcısına yazılım dağıtmak ve kod dağıtmak için, yanıt nispeten basittir - Hayır, ikisine de ihtiyacınız yoktur , ancak başka bir araç veya yardımcı program değer ekliyorsa ve iş için doğru araçsa isteyebilirsin ancak sunucuları ve işletim sistemlerini dağıtırken işler daha da karmaşıklaşır.

Bir DevOps zihniyetinin katma değerlerinden biri, altyapıyı kod olarak ele almak ve sık sık esnek bir ortamda sanal makineleri hatta çıplak metali dağıtmak ya da yok etmektir. Yapılandırma yönetim sisteminiz sunucunuzu sizin için kolayca yeniden başlatamaz ve başlatamaz ve dağıtımlar sırasında ve sonrasında veya bazı durumlarda lisanslama ve yetkiler için depoları, paketleri ve güncellemeleri / yamaları yönetemez.

Amazon Web Services için, bu çoğunlukla API'lar tarafından oldukça kolay bir şekilde yönetilebilir, ancak kendi veri merkezlerimizi yönetmek zorunda kalanlarımız için bu bir seçenek değildir. Bu sebeple Foreman (ve proje yeniden markalar Red Hat bu ) gerekli paket bulduk Katello , Candlepin dağıtırken birlikte böyle yanıtlayıcı ', Foreman veya Kukla olarak ve bir yapılandırma yöneticisi Katello Senaryo .

Eğer Ops tarafında üzerinde, evin Dev tarafında yazılım kodu dağıtımlar için konfigürasyon yönetimi araçlarını kullanarak paçayı mümkün olabilir Yani iken cevabı kocaman bir "Hayır, konfigürasyon yönetimi araçlardır olduğu, çeşitli durumlar vardır değil "Bunu yapmak tekerleğin ciddi bir şekilde yeniden icat edilmesini gerektirir ve pratik değildir. Bunun yerine, başka bir araçta dağıtım başlatmak için yapılandırma yönetimi araçlarınızı kullanmalısınız.


Ya da değil, şef zarifçe Capistrano'yu konuşlandırır, chocolatey paketleri pencerelerin altında konuşlandırır ve tüm paket yüklemelerini (deb, rpm, msi, nullsoft, vb.) Bu, habitatın çözmeyi amaçladığı ambalaj tarafında biraz yük getirir, ancak bu, konuşlandırmalarla oldukça başa çıkabilen bir yapılandırma yönetim sistemidir, üretim dahil olmak üzere çoklu ortamlarda haftada yaklaşık 40 dağıtım gerçekleştirdiğini görerek söyleyebilirim. önceden kodlamak için yüksek bir yük, ancak bu, diğer herhangi bir araç ateotd ile aynı şeyden daha fazla değildir.
Tensibai

1
Aslında Foreman ne bir sağlama, dağıtım ya da yapılandırma yönetim sistemi değildir. Sadece bir yapılandırma yönetim sistemi (kukla), lisans yönetim sistemi (mum pimi), depo ve yama yönetim sistemi (Katello) ve bir sağlama / dağıtım sistemini (kickstart) bir araya getiren web tabanlı bir kullanıcı arayüzü ve çerçeve sağlayan bir kaplamadır. Tüm bu farklı projelerin önünü bitirir ve birbirine yapıştırır. Hemen hemen her konfigürasyon yönetim sistemi bir paket kurabilirken, yapamayacakları şey WSUS sunucusuna benzer bir şekilde yama yönetimi sağlamaktır
James Shewey

veya paketlerin belirli sürümlerine sabitleme veya dağıtma, yukarı akış depolarında veya mashup depolarında bulunmayan paketleri içerir. Demek istediğim, Red Hat / Foreman / Katello bunun sadece bir konfigürasyon yönetim sistemi ile yapılamayacağını hissettiğinde - en önemlisi, kayda değer olan tedarik / dağıtım parçasından yoksun olduğu için.
James Shewey

Katello hakkındaki cümleyi yanlış anladım, benim hatam. İlk yorum bütünlük uğruna oldu :)
Tensibai
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.