Yapılandırma yönetimi araçları (Kukla, Şef) kurulu paketleri güncel tutabilir mi?


28

Bu, muhtemelen zaten yapılandırma yönetimi araçlarını çalıştıranlar için basit bir sorudur. Puppet veya Chef gibi konfigürasyon yönetimi araçları kurulu paketleri güncel tutmak için doğru yaklaşım mı?

Farz edelim ki, çoğunlukla Debian ve Ubuntu’ya dayanan bir dizi sunucu çalıştırdım. Yapılandırma yönetimi araçları, güvenlik güncelleştirmeleri veya hata düzeltmeleri gerçekleştiğinde depolardan yüklenen paketleri güncellemeyi kolaylaştırır mı?

Sistemlerin güvenlik güncelleştirmelerini otomatik olarak yüklemelerine izin vermek için şu anda "katılımsız yükseltmeler" çalıştırıyorum , ancak yine de sunuculara bağlanmam ve aptitude update && aptitude safe-upgradesık sık çalışmam gerekiyor . Doğal olarak bu sıkıcı, sıkıcı ve hataya açık hale geliyor ve daha fazla sunucu var.

Kukla veya Şef gibi araçlar kurulu paketleri güncel tutmak için doğru yaklaşım mı? Herhangi biriniz bu araçları kullanarak aptitude15 sunucuda manuel olarak çalıştırmamak ya da eşdeğeri kullanılmasını engelliyor mu? Bu soruların cevabının "Tabii ki!" Olduğuna eminim.

Ancak bu özel kullanım durumu hakkında daha fazla bilgiyi nereden bulabilirim? Henüz Kukla veya Aşçı'yı derinlemesine incelemek için zamanım olmadı ve örnek yemek kitapları veya sınıflar, ssh gibi belirli bir paketi kurmanın önemsiz örneklerini gösterdi. Resmi belgeler dışında önerilecek herhangi bir kaynağınız var mı (elbette, hangi araçların benim için uygun olduğunu bildiğimde, dokümanları inceleyeceğim).


güzel soru, kimi ile debian'ı güncel tutmaktan bahsetmediğim ama asla kendim denememiş olduğum bazı dersleri okudum. üretimde kullananların cevaplarını görmek ilginç olacak
pQd

Yanıtlar:


9

Kukla (ayrıca şefin de eminim) apt-get / yum yazılım havuzlarınızla birleşiyor. Hangi paketlerin mevcut olduğunu bulmak için ağır bir kaldırma yaptıkları için, bu ensure => latestsadece Ubuntu / CentOS / Debian benzeri için işe yarar. Uygun dosyaları doğru kurduğunuz sürece ( /etc/apt/sources.list, vb.)


1
Puppet'i veya her paketi yönetmeyi içeren cevaplar, temel Linux dağıtım kurulumunun parçası olanları bile, Puppet'teki her paketi izlemeniz gerektiği anlamına gelir. Güncelleştirmeleri otomatikleştirmekunattended-upgrades ya yum-cronda otomatikleştirmek gibi araçlar kullanmak çok daha az iştir - bu araçları yapılandırmak için sadece Puppet / Chef / Ansible kullanın.
RichVel

22

Kukla ile yapabilirsiniz, ya:

ensure => latest,

veya

ensure=> "1.0.2",

En son / gerekli sürümü belirlemek için. yani

package { apache2: ensure => "2.0.12-2" }
package { apache2: ensure => latest }

Bu, en azından, aynı sürümü tüm sistemler için belirleyebileceğiniz ve sunucuların kendilerini (otomatik olarak tehlikeli) otomatik olarak yükseltmelerini engelleyebileceğiniz anlamına gelir. Bu yöntemi birçok sitede üretimde kullandım ve çok iyi çalışıyor.

Katılımsız yükseltmeleri çalıştırmak, özellikle kritik görev paketleri, çekirdeği, mysql kitaplıklarını, apache'yi, vs. yükseltiyorlarsa beni biraz korkutuyor. Özellikle yükleme betiği hizmeti yeniden başlatmak isteyebilirse!


Yanıt için teşekkürler! Öyle görünüyor ki, Kukla ile kurulan paketleri en azından güncel tutmak mümkün. Bilmek güzel. Ancak farklı paket sürümleri çalıştıran sunucular ne durumda? Debian Lenny'deki gibi Ubuntu 8.04 ve 9.10'a karşı? Sürümleri manuel olarak ele almalı mıyım? Yapmam gereken daha çok araştırma var. Ne beklediğimden emin değilim, belki bir web arayüzü sunan Canonical'ın Manzarası boyunca bir şeyler ve birden fazla sunucudaki paketleri güncellemek için az ya da çok süslü şeyler.
daff

Farklı sürümleri çalıştıran sunucular için, burası karmaşıklaştığı yerdir. Kukla bildirimin içinde, /sn lsb_release veya debian_version anahtar sözcüğünü almak için Facter kullandığı farklı bloklara sahip olmanız ve ardından hangi paketin kurulacağına dayanarak kararlar almanız gerekir. Peyzajın üretim sunucularında öfkeyle kullanıldığını görmedim, oldukça pahalı olduğunu anladım.
Tom O'Connor,

2
ensure => latesther zaman depo kümenizin sağladığı şeyle her şeyin güncel olduğundan emin olacaktır.
womble

18

Bence bu muhtemelen yanlış bir soru. Altyapınızı korumak için kesinlikle Kukla ve Şef gibi yapılandırma yönetimi araçlarını kullanmak, hepsini manuel olarak yapmaya çalışmaktan büyük bir adım atıyor. Paket sürümlerinizi güncel ve senkronize tutma sorunu, bu araçların hiçbirinin doğrudan çözemeyeceği bir konu değil. Bunu doğru şekilde otomatikleştirmek için, paket havuzlarını kendi kontrolünüz altında tutmanız gerekir.

Bunu yapmamın yolu, belirli bir site için umursadığım paketleri içeren özel bir Yum deposu (Redhat / Fedora / CentOS; Debian / Ubuntu için bir APT deposu) sağlamaktır. Bunlar genellikle uygulamanın bağımlılıkları (Ruby, PHP, Apache, Nginx, kütüphaneler vb.) Ve kritik güvenlik paketleri olacaktır.

Bu kurulumu yaptıktan sonra (genellikle gerekli olan paketleri başlangıçtaki havuzdan başlayarak başlatabilirsiniz), tüm makinelerinizin depo ile güncel olmasını sağlamak için Puppet'in "sure => latest" sözdizimini kullanabilirsiniz.

Paketlerin güncellenmiş versiyonlarını üretime çıkarmadan önce test etmenizi sağlamak için bir 'aşamalandırma' deposu kullanmak akıllıca olacaktır. Bu kolayca depo şablonlarını kullanarak herhangi bir kod çoğaltması olmadan Kukla ile yapılabilir.

Paket sürümünüzü otomatikleştirmek, tüm üretim sistemlerinizi senkronize etmeye teşvik eder, çünkü farklı işletim sistemleri dağıtımları, sürümleri ve makine mimarileri için birden fazla repo ve paket bulundurmak çok zaman alıcıdır ve her türlü belirsiz soruna ve uyumsuzluğa yol açabilir.

Bu önerilerin tümü Ruby taşları, Python yumurtaları ve kullanabileceğiniz diğer paket sistemleri için de aynı şekilde geçerlidir.

Hızlı bir şekilde Kukla ile kalkmanıza ve koşmanıza yardımcı olacak küçük bir Kukla öğreticisi yazdım . Paket sürümleri kontrol altına almak için ilk adım olarak Kukla kullanarak makinelerinize özel bir repo tanımı dağıtabilirsiniz.


5

Kukla / Şef bu işlevsellik için olası bir rakip olsa da , sistemdeki her şeyi güncel tutmaları için özel türler ya da her paketi (libc6 gibi temel sistem kitaplıkları dahil) kaynakları ile birlikte listelemeyi gerektirir ensure => latest. Belirli bir otomatik paket güncelleme durumu için, ne istersen onu yapan cron-aptpakete bakmak isteyebilirsin.


ya da sadece yüksek yayılma süresi olan bir "yum güncelleme" işini zorla. Zaten benim için çalışıyor.
Sirex

5

Bu soru eski, ancak o zaman mevcut bir cevap mevcut olmadığı için güncel bir şekilde cevap vereceğimi düşündüm.

Kukla ya da şef kullanıyorsanız mcollective'e bakın. Sunucu gruplarına komut göndermenize izin veren kuklacılar beyler tarafından çok hoş bir araçtır. http://docs.puppetlabs.com/mcollective/

Ayrıca, herhangi bir sayıda sunucuda uygun bir güncelleme yapmak için kullanılabilecek bir apt eklentisi vardır: http://projects.puppetlabs.com/projects/mcollective-plugins/wiki/AgentApt


4

Bunun asıl sorunuz için biraz geç olduğunun farkındayım, ama burada “hiç olmadığı kadar iyi geç” ruhu içinde.

Bunu çeşitli sunucularda yapmak için Cfengine 3 kullanıyorum. Otomatik güncelleme için açık bir paket listesi belirledim, böylece tüm paketleri biraz dikkatli olmadan güncellemekten kaçınıyorum . Harika çalışıyor ve cfengine 3 çok hafif.

İşte benim cfengine konfigürasyonumdan gelecek vaat eden bir snippet:

    packages:
            "apache2"
                    package_method => "apt",
                    package_policy => "update";

Bu yardımcı olur umarım.


2

Jonathan ile aynı fikirdeyim. Cfengine 3 yaklaşımı iyi çünkü düşük bir seviyede yeniden kodlamak zorunda kalmadan paket yönetiminin tüm yönlerini kontrol edebiliyorsunuz.



1

Ubuntu / Debian sistemlerini yönetmek ve izlemek için tasarlanmış Canonicals Landscape gibi paket yönetim araçlarını da kullanabilirsiniz. Birden fazla sistemi yönetir, aynı anda güncellemenizi sağlar ve bazı temel izleme özellikleri sunar.


0

Güvenlik güncellemeleri

Genelde Ubuntu / Debian (ya da RHEL / CentOS) için katılımsız yükseltme paketini kurmak için Ansible ya da benzerini kullanmanın en basit olduğunu düşünüyorum yum-cron. Kukla, Aşçı veya diğer araçları kullanabilirsin, ama burada Ansible'ı tartışacağım.

  • unattended-upgrades İsterseniz, güvenlikle ilgili olmayan güncelleştirmeleri aynı anda yapmak için kullanılabilir; bu, her gün Ansible aracılığıyla bir komut çalıştırmaktan çok daha kolaydır.

  • unattended-upgradesHer gün otomatik güncellemelerle ilgilenir ve normalde yalnızca güvenlik güncellemeleriyle sınırlıdır (kararlılığı artırmak için). Sunucunun güncellemeden sonra yeniden başlatılması gerekirse, bu araç belirli bir zamanda otomatik olarak yeniden başlatılabilir.

Yeniden başlatma işlemleriniz daha karmaşıksa, unattended upgradessize e-posta gönderebilir ve ayrıca oluşturur /var/run/reboot-required; böylece Ansible (veya benzerleri) yeniden başlatma işlemlerini uygun bir zamanda (örneğin, bir web veya DB sunucusu kümesinin yeniden başlatılması) kesintilerden kaçınmak üzere yönetebilir; devam etmeden önce sunucunun belirli bir TCP portunda kullanılabilir olması için).

Ubuntu / Debian sistemleri için jnv.unattended-upgrades gibi Ansible rollerini ya da RHEL / CentOS'u (ve SSH konfigürasyonunu da sertleştiren) basit ama etkili geerlingguy.security kullanabilirsiniz .

Hızlı güvenlik güncellemeleri daha az önemliyse, ilk önce daha az önemli sunuculardaki bir test işlemine tabi tutabilir ve unattended-upgradetestleri bir sorun olmadığını gösterdikten sonra komutu çalıştırabilirsiniz - ancak sunucu odaklı güvenlik düzeltmelerinin sorunlara neden olması oldukça nadirdir. deneyim.

Genel güncellemeler

Güvenlik dışındaki güncellemeler, işlerin bozulmamasını sağlamak için normal bir sürekli entegrasyon ve test sürecinden geçmelidir.

aptitude safe-upgradeGeçmişte sunucularda ciddi sorunlara neden olduğunu gördüm , bu yüzden bunu otomatik olarak çalıştırmamak en iyisidir, oysa güvenlik güncellemeleri genellikle oldukça güvenlidir.

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.