Performans Orkestrası

İnsanların en iyisi olduğunu söylemek pek yanlış olmaz.
acı çekerek neşe bulmak.
Ludwig van Beethoven

Performans Orkestrası

Ben Sergey, Yandex.Money'de performans araştırma ekibinde çalışıyorum. Size orkestrasyonu kullanma yolculuğumuza dair hikayenin başlangıcını anlatmak istiyorum - enstrümanları nasıl seçtik ve neleri dikkate aldık. Makaledeki tüm olaylar gerçek zamanlı olarak gerçekleşir, bu nedenle siz sevgili okuyucular, durumun gelişimini neredeyse canlı olarak takip edin.

Takımda neden bir orkestra şefine ihtiyacımız var?

Orkestra şefi kimdir? Fr. diriger - müzik dünyasında yönetmek, yönlendirmek, yönetmek - bu, topluluk müziği öğrenmenin ve icra etmenin lideri olan bir kişidir. Bizim durumumuzda burası orkestrasyon ve otomasyon sistemleri tarafından işgal edilmiştir.

Rolleri, bir orkestra şefinin müzikteki rolünden farklı değildir - ekibe yardım etmeleri, performansını yönetmeleri ve organize etmeleri gerekir.

Kural olarak, ekibin belirli bir kapasite seti vardır - onlara projelerini uyguladıkları sunucular diyelim.

Bu sunucuları edinme ve çalıştırma yaklaşımı çeşitlidir. Birkaç örnek:

  • Ekip, örneğin operasyon grubuna, kendilerine belirli parametrelere sahip kaynaklar sağlamak için bir talepte bulunur.
  • Operasyon ekibi onlara gerekli miktarı - bulut veya çıplak metal ("bare metal") - sağlar ve bunları SLA'ya göre iyi durumda tutmayı taahhüt eder. Ayarlama da operasyon ekibi tarafından yapılır.
  • Ekip, operasyon grubundan sadece bulut veya çıplak donanım kaynakları alır, ayarları kendisi yapar.
  • Ekibin kendisi kaynakları "satın alır" ve bunları tamamen bağımsız olarak korur/yapılandırır.

Ekibimiz bakımı gereken sunucular kullanır - işletim sistemini güncelleyin, yeni paketler kurun, vb.

Kendimiz için bunları iki ana tipte tanımladık:

  • tank grubu,
  • hizmet grubu.

Tank grubu, Yandex.Tank'a sahip sunuculardan oluşur.

Hizmet grubu, bakımla ilgili her şeyi içerir - bunlar, sürüm döngüsü için destek sağlamak, otomatik raporlar oluşturmak vb. için çeşitli hizmetlerdir.

Bir noktada, tüm bunları manuel olarak yönetmek elverişsiz hale geldi ve sunucuları "doldurmaktan" dahili hizmetimizi geliştirmeye, düzenlemeye ve başlatmaya kadar tüm süreci otomatikleştirmeyi düşündük.

Orkestranın kendisi çalabiliyorsa bile neden bir orkestra şefine ihtiyaç var?

Başlangıç ​​​​olarak, Ansible'da ustalaştık ve sistem yöneticilerine daha az bağımlı olmak için çıplak metal sunucularımızı "dökmeye" başladık - burada herkes kazanıyor, yeni beceriler kazanıyoruz ve yöneticileri işin bizsiz her zaman yeterince sahip oldukları kısmından kurtarıyoruz. . Mümkün olduğunca uzmanlığımızın ve ekip özerkliğimizin ötesinde gelişmeye çalışıyoruz.

Şirkette, Ansible ile çalışmak uzun süredir yapılandırılmış ve düzenlenmiştir, bu nedenle çözümümüzü bu sürece kolayca entegre ettik.

Şu anda, sunucu dökümü üç Ansible rolünden oluşuyor:

  • ilk rol işletim sistemini kurar,
  • ikincisi, ana bilgisayar için temel ayarlar, örneğin LDAP yetkilendirmesi üzerinden çalışır.
  • üçüncüsü ise Yandex.Tank'ı ve ilgili bağımlılıkları bir docker kapsayıcısına kurar.

Gelelim ekip içerisinde kullandığımız servislere.

Görevlerimiz için eşit olarak Kotlin ve Python ve biraz daha Golang kullanıyoruz. Hizmetlerimizin geliştirilmesini ve devreye alınmasını birleştirmek için bunları docker kapsayıcılarında paketlemeye karar verdik. Bu size bir programlama dili seçme özgürlüğü verir ve aynı zamanda uygulamanız için tek bir dağıtım formatını düzenler.

Docker'da ipv6 hakkında küçük bir açıklama

Etkileşimde bulunduğumuz hizmetlerden bazıları yalnızca ipv6 aracılığıyla kullanılabilir, bu nedenle kapsayıcılar için nasıl ipv6 yapacağımızı bulmamız gerekiyordu.

Resmi Docker web sitesindeki ipv6 belgelerine göre ipv6, daemon.json'a parametreler eklenerek etkinleştirilir:

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}

Bu durumda, sağlayıcı, kayıt olacağınız bir ipv6 alt ağı vermelidir. fixed-cidr-v6.
Ancak, başka bir seçenek seçtik - ipv6 NAT ve işte nedeni:

  • şimdi liman işçisi kullanılamaz sadece ipv6 ile.
  • Her kapsayıcıda genel olarak yönlendirilebilir bir adrese sahip olmak, ek filtreleme yapılmadıkça tüm bağlantı noktalarının (yayınlanmamış olanlar bile) herkesin kullanımına açık olacağı anlamına gelir.
  • bağlantı noktalarını yayınlamak için kullanıcı alanı proxy'si, sadece ipv4 için iptables.

ipv6 NAT liman konteyneriip6tables içindeki kuralları kendisi yöneten ve yeni bir kapsayıcı eklendiğinde bunları düzenleyen.

Bu çözümün doğru çalışması için bir dizi manipülasyon yapılması gerekiyordu. Sistemde ip6table_nat'ı başlattığınızdan emin olun. Sistemde bir modülün kurulu olması, modülün başlangıçta çekirdeğe yükleneceğini garanti etmez. Yeni bir ana bilgisayarda NAT içeren bir kapsayıcı başlatırken şu hatayı aldığımızda bununla karşılaştık:

2019/01/22 14:59:54 running [/sbin/ip6tables -t filter -N DOCKER --wait]: exit status 3: modprobe: can't change directory to '/lib/modules': No such file or directory
ip6tables v1.6.2: can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)

Modprobe modülü kullanılarak Ansible rolüne başlatma eklendikten ve lineinfile kullanılarak işletim sistemi başlangıcında yüklendikten sonra sorun çözüldü:

- name: Add ip6table_nat module
 modprobe:
   name: ip6table_nat
   state: present
- name: Add ip6table_nat to boot
 lineinfile:
   path: /etc/modules
   line: 'ip6table_nat'

Bu arada Habré'de güzel bir tane var. makaledocker'da ipv6'yı çalıştırmak için şu veya bu yöntemin avantajlarını ve dezavantajlarını kısaca ve net bir şekilde açıklayan.

Ama baştan sorumuza dönelim:
Orkestranın kendisi çalabiliyorsa bile neden bir orkestra şefine ihtiyaç var?

Artık herkes takımımızda nasıl oynayacağını hayal ediyor:

  • sunucuları "dökme" süreci oluşturuldu,
  • hizmetlerin geliştirilmesi ve dağıtılması birleştirilmiştir.

Mantıklı bir soru ortaya çıkıyor - docker kapsayıcılarındaki hizmetlerimizi verimli ve mümkün olduğunca otomatik bir şekilde nasıl devreye alabilir, güncelleyebilir ve kontrol edebiliriz?

Orkestranın her üyesi rolünü bilmesine rağmen yoldan çıkabilir, orijinal fikirden sapabilir. Burada bir şef olmadan orkestramızın etkili bir şekilde prova yapamayacağı ve sorunsuz çalamayacağı sonucuna varıyoruz. Orkestra şefi, her şeyin tek bir tempo ve ruh halinde birleştirilmesini sağlamak için tüm performans parametrelerinden sorumludur.

Minimum yatırımla iyi bir iletken nasıl elde edilir?

Orkestrasyon konusu piyasada oldukça gelişmiştir. Ama önce iletkene yardımcı olabilecek yardımcı araçlardan bahsedelim.

konsolos - iki ana işlevi sağlayan bir sistem:

  • servis keşfi,
  • dağıtılmış anahtar/değer depolaması.

Orkestramızda, servislerin kaydedilmesinden ve konfigürasyonlarının saklanmasından Konsolos sorumlu olacaktır. İki kayıt seçeneği vardır:

  • Etkin, hizmetin kendisini HTTP API kullanarak kaydettiği zamandır;
  • Pasif - hizmet manuel olarak kaydedilmelidir.

Vault, parolalar, sertifikalar gibi sırların güvenli depolanmasını ve işlenmesini standartlaştıran ve birleştiren bir havuzdur.
İşte bu aracı kullanarak elde edeceğimiz faydalar:

  • Sırları oluşturmak ve depolamak, yaşam döngülerini HTTP API aracılığıyla yönetmek için tek bir merkez.
  • Transit Secrets Engine - verileri kaydetmeden şifrele-şifresini çöz. Verileri güvenli olmayan iletişim kanalları üzerinden şifrelenmiş biçimde aktarma yeteneği.
  • Yapılandırması kolay erişim ilkeleri.
  • Sırlara erişimi denetleme.
  • Altyapınızda kendinden imzalı sertifikaları yönetmek için kendi CA'nızı (Sertifika Yetkilisi) oluşturma yeteneği.

Tüm gereksinimlerimiz göz önüne alındığında, orkestra şefi rolü için iki seçenek uygundu - Kubernetes ve Nomad.

Kubernetes

Onun hakkında şimdiye kadar kaç makale ve kitap yazıldı (burada bu, örneğin), kısaca yazacağım raporlar söylendi - bu, neredeyse her şeyi yapabilen evrensel bir birleştirmedir. Bunun için ödeme yapmak, Kubernetes'te bir küme kurmak ve sürdürmek her zaman kolay değildir.

Göçebe

Araç yukarıda bahsedilen konsolos ve kasa ile tanınan şirket olan HashiCorp'tan.

Nomad'in kurulumu ve yapılandırması bize Kubernetes'ten oldukça basit göründü. Bir ikili, hem sunucu hem de istemci modunda çalışır. Aynı zamanda Nomad, çözmesini istediğimiz tüm görev listesini kapsar: küme yönetimi, hızlı programlayıcı, çoklu veri merkezi desteği. Ayrıca, konsolosluk ve kasayı kullanırken, hizmetlerimizi düzenlemek için daha sıkı entegrasyon elde ederiz.

Şimdi sırada neler var:

  • Consul dağıtımı için hazırlanmış sunucular,
  • göçebe küme konfigürasyonu, göçebenin otomatik olarak dağıtılması gereken yardımı ile Konsolos'a girilecektir,
  • paralel olarak, sırları saklamak için kasa kuracağız.

Seyirciye soru, bu tür görevler için bir şef tutmaya değer mi, yoksa orkestra onsuz da iyi gidiyor mu? Bu konuda ne düşündüğünüzü yorumlarda bize bildirin.

Blogumuza abone olun ve iletişimde kalın - yakında size sonunda ne olduğunu ve göçebe kümesini istediğimiz gibi kurup kurmadığımızı söyleyeceğiz.

rahatımıza gelin telgraf sohbeti, her zaman tavsiye isteyebileceğiniz, meslektaşlarınıza yardım edebileceğiniz ve sadece performans araştırması ve daha fazlası hakkında sohbet edebileceğiniz yer.

Kaynak: habr.com

DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster