Konfigürasyon yönetimi: çekme temelli topolojiye karşı itme


22

Puppet ve Chef gibi daha köklü konfigürasyon yönetimi (CM) sistemleri çekme temelli bir yaklaşım kullanmaktadır: müşteriler güncellemeler için periyodik olarak merkezi bir master'ı seçmektedir. Bazıları ustalıksız bir yaklaşım da sunmaktadır (bu yüzden itme temelli), ancak 'üretim için değil' (Saltstack) veya 'daha az ölçeklenebilir' (Kukla) olduğunu belirtiyor. Bunu bildiğim tek sistem baştan beri itme gücüne sahip.

Çekme tabanlı bir sistemin spesifik ölçeklenebilirlik avantajı nedir? İtmeli ajanlardan daha fazla çekme ustası eklemek neden bu kadar kolay?

Örneğin, agiletesting.blogspot.nl yazıyor:

Bir 'çekme' sisteminde, istemciler sunucuyla birbirlerinden bağımsız olarak iletişim kurar, bu nedenle bir bütün olarak sistem bir 'push' sisteminden daha ölçeklenebilirdir

Öte yandan, Rackspace, 15K sistemlerini push tabanlı bir modelle idare edebildiklerini gösteriyor .

infastructures.org yazıyor:

SUP, CVSup, rsync sunucusu veya cfengine gibi bir araç kullanarak altyapıları korumak için bir çekme metodolojisine yemin ediyoruz. Müşterilerde değişiklik yapmak yerine, her bir müşteri makinesinin, altın sunucuyu açılışta ve daha sonra da kendi rev seviyesini korumak için sorgulamaktan sorumlu olması gerekir. Bu bakış açısını benimsemeden önce, ssh, rsh, rcp ve rdist'e dayanan geniş kapsamlı push tabanlı scriptler geliştirdik. R komutlarıyla (veya ssh) bulduğumuz sorun şuydu: Hedef makinelerinize bir değişiklik yapmak için r komutuyla çalışan bir komut dosyası çalıştırdığınızda, 30'dan fazla hedef ana makineniz varsa bunlardan birinin herhangi bir zamanda aşağı olmak. Görevlendirilen makinelerin listesini tutmak bir kabusa dönüşüyor. Bunu düzeltmek için kod yazarken, bunlarla başa çıkmak için ayrıntılı bir sarmalayıcı kodu ile biteceksiniz: ölü konaklardan zaman aşımları; ölü konakların kaydedilmesi ve yeniden denenmesi; Makul bir sürede birçok konağa vurmayı denemek için paralel işler yapmak; ve son olarak, kaynak makinedeki tüm kullanılabilir TCP soketlerini tüm giden rsh oturumları ile kullanma durumunun tespit edilmesi ve önlenmesi. O zaman, gelecekte kurulacak tüm yeni ana makinelerin kurulum görüntülerine ne yaptıysanız edinme ve yarın yeniden kurulacak ve yeniden yapılması gereken herhangi bir ana bilgisayar için onu tekrarlama konusunda hala sorunlarınız var. R-komut tabanlı çoğaltmayı uygulamak için yaşadığımız sıkıntıdan sonra, buna değmeyeceğini gördük. Yeniden komutları olan bir altyapıyı veya bu konuda başka bir itme mekanizmasını yönetmeyi planlamıyoruz. Çekme tabanlı yöntemlerin yanı sıra ölçekleme yapmazlar. Makul bir sürede birçok konağa vurmayı denemek için paralel işler yapmak; ve son olarak, kaynak makinedeki tüm kullanılabilir TCP soketlerini tüm giden rsh oturumları ile kullanma durumunun tespit edilmesi ve önlenmesi. O zaman, gelecekte kurulacak tüm yeni ana makinelerin kurulum görüntülerine ne yaptıysanız edinme ve yarın yeniden kurulacak ve yeniden yapılması gereken herhangi bir ana bilgisayar için onu tekrarlama konusunda hala sorunlarınız var. R-komut tabanlı çoğaltmayı uygulamak için yaşadığımız sıkıntıdan sonra, buna değmeyeceğini gördük. Yeniden komutları olan bir altyapıyı veya bu konuda başka bir itme mekanizmasını yönetmeyi planlamıyoruz. Çekme tabanlı yöntemlerin yanı sıra ölçekleme yapmazlar. Makul bir sürede birçok konağa vurmayı denemek için paralel işler yapmak; ve son olarak, kaynak makinedeki tüm kullanılabilir TCP soketlerini tüm giden rsh oturumları ile kullanma durumunun tespit edilmesi ve önlenmesi. O zaman, gelecekte kurulacak tüm yeni ana makinelerin kurulum görüntülerine ne yaptıysanız edinme ve yarın yeniden kurulacak ve yeniden yapılması gereken herhangi bir ana bilgisayar için onu tekrarlama konusunda hala sorunlarınız var. R-komut tabanlı çoğaltmayı uygulamak için yaşadığımız sıkıntıdan sonra, buna değmeyeceğini gördük. Yeniden komutları olan bir altyapıyı veya bu konuda başka bir itme mekanizmasını yönetmeyi planlamıyoruz. Çekme tabanlı yöntemlerin yanı sıra ölçekleme yapmazlar. ve son olarak, kaynak makinedeki tüm kullanılabilir TCP soketlerini tüm giden rsh oturumları ile kullanma durumunun tespit edilmesi ve önlenmesi. O zaman, gelecekte kurulacak tüm yeni ana makinelerin kurulum görüntülerine ne yaptıysanız edinme ve yarın yeniden kurulacak ve yeniden yapılması gereken herhangi bir ana bilgisayar için onu tekrarlama konusunda hala sorunlarınız var. R-komut tabanlı çoğaltmayı uygulamak için yaşadığımız sıkıntıdan sonra, buna değmeyeceğini gördük. Yeniden komutları olan bir altyapıyı veya bu konuda başka bir itme mekanizmasını yönetmeyi planlamıyoruz. Çekme tabanlı yöntemlerin yanı sıra ölçekleme yapmazlar. ve son olarak, kaynak makinedeki tüm kullanılabilir TCP soketlerini tüm giden rsh oturumları ile kullanma durumunun tespit edilmesi ve önlenmesi. O zaman, gelecekte kurulacak tüm yeni ana makinelerin kurulum görüntülerine ne yaptıysanız edinme ve yarın yeniden kurulacak ve yeniden yapılması gereken herhangi bir ana bilgisayar için onu tekrarlama konusunda hala sorunlarınız var. R-komut tabanlı çoğaltmayı uygulamak için yaşadığımız sıkıntıdan sonra, buna değmeyeceğini gördük. Yeniden komutları olan bir altyapıyı veya bu konuda başka bir itme mekanizmasını yönetmeyi planlamıyoruz. Çekme tabanlı yöntemlerin yanı sıra ölçekleme yapmazlar. O zaman, gelecekte kurulacak tüm yeni ana makinelerin kurulum görüntülerine ne yaptıysanız edinme ve yarın yeniden kurulacak ve yeniden yapılması gereken herhangi bir ana bilgisayar için onu tekrarlama konusunda hala sorunlarınız var. R-komut tabanlı çoğaltmayı uygulamak için yaşadığımız sıkıntıdan sonra, buna değmeyeceğini gördük. Yeniden komutları olan bir altyapıyı veya bu konuda başka bir itme mekanizmasını yönetmeyi planlamıyoruz. Çekme tabanlı yöntemlerin yanı sıra ölçekleme yapmazlar. O zaman, gelecekte kurulacak tüm yeni ana makinelerin kurulum görüntülerine ne yaptıysanız edinme ve yarın yeniden kurulacak ve yeniden yapılması gereken herhangi bir ana bilgisayar için onu tekrarlama konusunda hala sorunlarınız var. R-komut tabanlı çoğaltmayı uygulamak için yaşadığımız sıkıntıdan sonra, buna değmeyeceğini gördük. Yeniden komutları olan bir altyapıyı veya bu konuda başka bir itme mekanizmasını yönetmeyi planlamıyoruz. Çekme tabanlı yöntemlerin yanı sıra ölçekleme yapmazlar. veya bu konuda başka herhangi bir itme mekanizması ile. Çekme tabanlı yöntemlerin yanı sıra ölçekleme yapmazlar. veya bu konuda başka herhangi bir itme mekanizması ile. Çekme tabanlı yöntemlerin yanı sıra ölçekleme yapmazlar.

Mimari bir uygulama yerine bu bir uygulama sorunu değil mi? Bir iş parçacığı basma istemcisi yazmak, bir iş parçacığı çekme sunucusundan daha zor neden?


4
Sadece bir not, Ansible da çekebilir ansible-pull.
ceejayoz

1
En büyük avantajlardan biri NAT’ları ve güvenlik duvarlarını geçmek. Bu genellikle bir barikat değildir, ancak bazen bir oyun değiştiricidir.
Dan Garthwaite

SALT, pub / sub ZeroMQ uygulamasını kullanır. Hangisi farklı?
Dan Garthwaite

1
Bu konuda [devops-toolchain] [1] posta listesindeki Application Deployment vs system configuration thread tartışıldı. [1]: code.google.com/p/devops-toolchain
sciurus

1
btw - HP Sunucu Otomasyonu modellenmiştir ve on binlerce aygıtı yönetebilir {açıklama - Ben bir HP ortağı için bir Otomasyon
warren

Yanıtlar:


8

İtme tabanlı sistemlerdeki sorun, merkezi itme düğümü üzerinde tüm mimarinin tam bir modeline sahip olmanız gerektiğidir. Bilmediğiniz bir makineye zorlayamazsınız.

Açıkçası işe yarayabilir, ancak senkronize olması için çok fazla çalışma gerekir.

Mcollective gibi şeyleri kullanarak, Puppet ve diğer CM'leri push tabanlı bir sisteme dönüştürebilirsiniz. Genel olarak, bir çekme sistemini itme temelli bir sisteme dönüştürmek önemsizdir, ancak diğer tarafa gitmek her zaman basit değildir.

Örgütsel politika sorunu da var. İtme tabanlı bir sistem, merkezi yöneticilerin tüm kontrol ellerine geçer. Karmaşıklığı bu şekilde yönetmek çok zor olabilir. Bence ölçeklendirme konusu kırmızı bir ringa balığı, sadece müşteri sayısına bakarsanız, her iki teraziye de yaklaşıyorum. Birçok yönden itme ölçeklendirmek daha kolaydır. Bununla birlikte, dinamik yapılandırma az ya da çok, müşteri kaydının en iyi kullanım versiyonuna sahip olduğunuz anlamına gelir.

Sonuçta, hangi sistemin kuruluşunuzdaki iş akışı ve mülkiyeti ile eşleştiği ile ilgilidir. Genel bir kural olarak, çekme sistemleri daha esnektir.


2
Teşekkürler! Peki neden dinamik konfigürasyon çekmeli? Ansible, örneğin dinamik basmayı kullanır. Öyle görünüyor ki Kukla'nın dinamik baskı yapamayacağı gerçeği, uygulamanın bir kısıtlaması değil, mimarlığın bir kısıtlaması değil mi?
Willem

4
@Willem Gerçekten "dinamik" bir ortam, yeni bir makinenin herhangi bir yerde, herhangi bir zamanda görünebileceği ve konfigürasyon gerektireceği anlamına gelir. İtme tabanlı bir sistem, bu sistemi merkezi düğümde yapılandırmanızı gerektirir; çekme tabanlı bir sistem, ortam yöneticisinin yapılandırma sunucularına bir şey yapmak zorunda kalmadan (genel) bir yapılandırmayı çekebilir.
voretaq7

1
Zabbix ana bilgisayarları keşfeder, Ansible, yeni keşfedilen ana bilgisayarlara çekme yapılandırması yapmak için dinamik bir envanter kullanabilir.
bbaassssiiee

Evet, ansible dinamik envanteri için pek çok kaynak kullanabilir, örneğin ESX API. Bu şekilde, oluşturuldukları anda bir VM hakkında bilgi sahibi olursunuz ve bir desen eşleşmesinde oyunları çalıştırabilirsiniz.
JM Becker,

11

Kimsenin ilgisini çekmesi durumunda, en azından, kritik görev sistemlerinin çok kullanıcılı kurulumlarının yama yönetimi bağlamında Ansible'ları kutudan çıkarma kabiliyetinden ilk kullanmamı sağlayan bir kullanıcı deneyimi raporu verebilirim. Amazon bulutunda. Önyargılarımı veya önyargılarımı anlamak için, otomasyon komut dosyası düzeyinde Ruby'yi tercih ettiğimi ve geçmişte master-agent kukla yapılandırmasını kullanmak için projeler kurduğumu açıklamalıyım. Bu yüzden benim deneyimim, eğer varsa, geçmiş önyargılara inanır.

Son deneyimlerim, düzinelerce ila 100 arasında değişen, aşağı yukarı ölçeklenebilen, sonlandırılabilen ve yenilenebilen sunuculardan oluşan değişen bir mülke dinamik olarak girme konusunda çok elverişli oldu. Benim durumumda basit bir Ansible 1.7 ad hoc komutu yamayı yapmam için gerekli olan tek şeydi. Bununla birlikte, amaç için Vpc başına bir AnsibleController (t2.micro'da) kurmanın etkinliği göz önüne alındığında, gelecekte daha karmaşık gereksinimler için tekniği genişletmeyi planlıyorum.

Öyleyse bu konuda sorulan soruya geri döneyim: dinamik olarak değişen bir mülkte itme avantajları ve dezavantajları.

Hedeflediğim türden sunucu mülkü varsayımları:

  • IP adreslerinin veya Amazon tarafından üretilen yerel ana bilgisayar adlarının uzun ömürlü olacağı varsayımı yoktur - hem gelip hem gidebilirler
  • Tüm örnekler, zaten tek bir ayrıcalıklı yönetici kullanıcıdan ssh erişimini mümkün kılma yeteneğine sahip makine görüntülerinden oluşturulmuştur.
  • Sunucuları bireyselleştirmek ve potansiyel olarak işlevlerine göre veya geliştirme aşamasına göre (örn. Test veya prod) gruplara ayırmak, bu anlaşılan geleneksel İsimlerin Amazon etiketlerini lanse etmek suretiyle yapılır.
  • Farklı ad hoc komutlarıyla Linux ve Windows sunucularını ayrı ayrı yönetmekteyim, bu nedenle Linux'a özel oturum açma işlemlerinin bir Windows sunucusuyla bağlantı kurulurken başarısız olmasına izin vermek tamamen kabul edilebilirdi

Bu koşullar göz önünde bulundurularak, çok sayıda Vpcs'ye düşmek ve mevcut sunucu hesaplarında yerinde (yapılandırma bilgileriyle) yapılandırmak için bir AnsibleController'ın bir makine görüntüsünü oluşturmak çok basittir. Görüntüden oluşturulan her örnek içinde otomatik

  1. Düzeltme ekini düzenli aralıklarla sunuculara çalıştırmak için gereken cron işi, böylece istenen siteye aralıklarla sürekli erişilir
  2. Ansible envanterini bu aralıklarla hesaplamanın bir yolu.

Gerekirse ikinci madde nispeten karmaşık hale getirilebilir (Ansible envanterinin Bilgi yapısı aracılığıyla). Ancak, karmaşıklığa gerek duyulmuyorsa, burada tüm Amazon EC2 örneklerini her cron aralığında hesaplamak ve sonuçları uygun bir envanter dosyasına yönlendirmek için çok basit bir senaryo örneği verilmiştir (örn. / Etc / ansible / hosts)…

#!/bin/bash
# Assumes aws-cli/1.3.4 Python/2.6.9 Linux/3.4.73-64.112.amzn1.x86_64 or greater
# http://aws.amazon.com/releasenotes/8906204440930658
# To check yum list aws-cli
# Assumes that server is equipped with AWS keys and is able to access some or all
# instances in the account within it is running.
# Provide a list of host IPs each on a separate line
# If an argument is passed then treat it as the filename, whether local or absolute 
# path, to which the list is written

function list-of-ips {
    /usr/bin/aws ec2 describe-instances --filters '[ {"Name": "instance-state-code", "Values": [ "16" ] } ]' | grep -w PrivateIpAddress | awk  '{x=$2; gsub("\"","", x); gsub(",","", x); if(x && FNR!=1){print x;}}' | uniq
 }

if [ -n "$1" ]; then
   list-of-ips > "$1"
else
   list-of-ips
fi

Kullanım durumu için tek uyarı yama komutunun önemsiz olması gerektiğidir. Yamanın tam olarak amaçlananı yaptığından emin olmanın bir parçası olarak, bunun tam olarak yerine getirildiğinden emin olmak için ön test yapılması istenir.

Özetlemek gerekirse, dinamik zorlamanın belirlediğim hedeflere karşı etkili olduğu bir kullanım durumu açıkladım. Bu tekrarlanabilir bir çözümdür (birden fazla hesapta ve bölgeye yayılabilen bir görüntüde kapsüllenme anlamında). Bugüne kadarki deneyimlerime göre, dinamik itme tekniği şu an için mevcut olan araç setlerinde mevcut olan alternatiflerden daha kolay sağlamak ve eyleme geçmek için çok daha kolaydır.


2
//, @jonz, bu, deneyimli geliştiricilerin Stack Exchange modelini sevmeye başladıkları tartışma türü. Özellikle seçtiğiniz terimleri beğeniyorum ve bu cevabın önce varsayımları listelediğini.
Nathan Basanese
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.