Yolculuktaki ilk durağın bir CI kümesi olması gerektiğine karar veren ekip, plan hazırlamaya başladı. Oraya nasıl ulaşacakları, ne tür bir altyapıya ihtiyaç duyacakları, her bir kabın nasıl yükleneceği ve yürütüleceğine ve yolculuk sırasında hangi araçların stres seviyelerinin mümkün olduğunca düşük tutulmasını sağlayacağına dair planlar.
Ancak, aynı yılın Eylül ayına kadar yolculuk gerçekten başladı. Sadece birkaç gün içinde bir yönetim ARGOCD kümesi ve birçok yeni VPC oluşturuldu, VPN VPC’leri ile bakıcılık bağlantıları kuruldu ve “kargo” – Datadog Agent & Fluent Bit gibi takımlar – kümeye yüklendi. EKS (Elastik Kubernetes Servisi) böylece başlamaya hazırdı! Tesadüfen, macera için susamış Hackerone’a vardım.
Dümende ilk birkaç gün
Önümüzdeki meydan okuma muazzam görünmeye başladığında sadece liman dışındaydık! Gitlab koşucuları Kubernetes kümesine nasıl düzgün bir şekilde kurulacak ve ihtiyaç duydukları tüm izinlere sahip olmalarını nasıl sağlayabiliriz? Bu yeni ve sonsuz manzarada uygun navigasyon tekniklerine ihtiyacımız var.
İlk başta, bunu manuel olarak ayarlamaya çalışmamız gerektiğini düşündük, böylece birbirine yapıştırılması gereken tüm farklı bileşenleri daha derin bir anlayış kazanarak fayda sağlayabiliriz; Konteynerler, kapsüller, IAM rolleri, EC2 örnekleri, Kubernetes RBAC ve daha fazlası. Birkaç gün boyunca çevrelerde yelken açtık, konuyu farklı yönlerden dürtmeye çalıştık ve yürüttüğümüz tüm deneylerin notlarını tuttuk.
Biraz ama az ilerlemeyi başardıktan sonra bitkin ve hayal kırıklığına uğradık. Düşündüğümü hatırlıyorum, “Basit bir Gitlab Runner konteyneri oluşturmak bu kadar zor olmamalı! Daha önce yaptım, bu optimal değil. ”
Böylece odağımızı değiştirdik. “Buna yanlış bakıyoruz!” Sonuç olarak. “Sadece resmi dümen tablosunu kullanmalıyız,” dedik ve Gitlab’ın kendisinin sağladığı şeylere manuel çalışmaları boşaltarak hayatımızı daha basit hale getirmeyi kabul ettik ve Dışarıdaki tüm topluluk zaten kullanıyor.
Yeniden gruplandırdık, sürüldük ve çift programlandık. Doğaçlama gevşek topaklara, önceden düzenlenmiş zoom toplantılarına derinlemesine daldık ve tüm ekibe geçtiğimiz birçok not aldık. Hızla ilerlemeyi görmeye başladık. Birkaç gün içinde, ilk ikincimiz koşup çalışmaya başladık. Birkaç gün sonra, yeni koşucumuzu olabildiğince güvenli hale getirmeye başladık. Dönüştıktan iki hafta sonra, Kubernetes üzerinde çalışan altyapı deposundan ilk işimizi yaşadık. Uygun belgeler yazdık ve sonra şampanyayı açtık ve birkaç gün boyunca soğutulduk.
Rüzgarı Yakalamak
Kısa bir süre sonra merak etmeye başladık. Elbette, evet, basit işler yapabilen eksiksiz ve güvenli bir Gitlab koşucusu oluşturmayı başardık. Ama denize elverişli miydi? Cevabın hayır olduğunu biliyorduk. Daha iyi bir şey, daha büyük bir şey, Core Project’in karmaşık işlerini alıp yarın yokmuş gibi çalıştıracak bir şey bulmalıydık.
Böylece başka bir koşucu yarattık. Bu neredeyse aynıydı ama birincisine eşit yaratılmadı. Karmaşık işler yürütme yeteneği ile tasarlanmıştır ve böylece daha fazla ayrıcalıklara sahiptir. Elbette, her biri farklı bir amaca hizmet edeceği için her iki koşucuyu da tutacağız.
Ve sonra operasyonlarımızı ölçeklendirmeye bakmanın zamanı gelmişti. Çekirdek projenin tek bir MR (birleştirme isteği) boru hattı, yaklaşık 170’i aynı anda başlayan 180’den fazla iş çalıştırıyor. Bu işlerin her biri bir Kubernetes bölmesi anlamına gelir. Bu bölmelerin tümü, düğümlerin (EC2 örnekleri) sağladığı CPU ve belleğe ihtiyaç duyar. Dahası, aynı anda çalışan 6 veya daha fazla boru hattı gözlemledik. Böylece, bir sonraki zorluğumuz açıktı: Bir boru hattı başladığında ve – aynı derecede önemlisi – hiçbir iş çalışmadığında ölçeklendirilen hesaplama gücü nasıl sağlayabiliriz? Bir ekip olarak hedeflerimizden biri, performans sorunlarına para atmak yerine her zaman altyapımızı optimize etmek olmuştur.
Kümemize başka bir araç eklemeye karar verdik; Karpenter. Karpenter o zamanlar betada olsa bile, çok umut verici görünüyordu ve topluluk, mimari kararları nedeniyle çok değer görmeye başlamıştı, aynı zamanda AWS ile sorunsuz entegrasyonu da. Bir dakikadan daha kısa bir sürede yeni düğümler oluşturabilir ve kalbimizin arzularına kadar ölçeklendirmeyi ince ayarlamamıza izin verir. Bununla birlikte, hala en son beta sürümüne yükseltmek için mücadele ettik-hatalar sıklıkla tanıtıldığı ve daha sonra yamalandığı için, tüm araçları güncel tutma girişimimizde altyapı mühendisleri olarak sıklıkla karşılaştığımız zorluklardan biridir. sonraki küçük sürüm güncellemelerinde.
Sonunda, modern bir CI’ye doğru yolculuğumuza iki ay içinde olduğumuzda, EKS kümemiz, Gitlab koşucularımız, talebe göre yukarı ve aşağı ölçeklendiren düğümler vardı ve onunla gitmek için iyi belgelerimiz vardı. Ufukta arazi gördük. Kısa bir ara verme ve limana hazırlanma zamanı gelmişti. Avast Ye Scallywags! Deniz için uzun süre sakin olması için twas değil!
Fırtınadan önceki sakin ve sakinlikten önceki fırtına
Noel tatillerimize yaklaştıkça, hepimiz sessiz denizler için özlem duyduk. Yine de seçtiğimiz hayat bu değil. Ve orada ufuktaydı, bir fırtına bira – IP tükenmesi! İlk tasarımımızda göz ardı ettiğimiz küçük bir şeyin kümemizde sorun yarattığı ortaya çıkıyor. Tutumlu olmaya çalışırken, iki alt ağında sadece birkaç IP ile küçük bir VPC yaratmıştık, ancak şimdi yüzlerce düğüme ve binlerce bakla’ya ölçeklendirmek istedik, dağıtılacak yeterli IP yoktu. Tüm kümeyi yeniden yaratmak zorunda kaldık!
Kulağa korkutucu geliyor, ama uzun zaman önce deniz bacaklarımız var, IAC’de her şeyimiz vardı. Terraform, dümen grafik yapılandırması veya düz yaml tezahürleri olsun, her şey belgelenir ve hakemli kod. Böylece, tüm VPC’ye, peering bağlantılarına ve tüm EKS kümesine, araçları yarım gün içinde yukarı ve çalışır durumda olmayı başardık! Bu, yaptığımız ilerlemenin bir onaylamasıydı.
Bahissiz ve bozulmamış durumda fırtınadan geçtik. Önümüzdeki birkaç hafta boyunca, 4. çeyreğin üçüncü ayına yaklaştığımız için dikkatimizi diğer acil konulara kaydırdık ve OKR’lerin bitiş çizgisinden geçmesi gerekiyordu.
Rıhtımda Yaşam
Kış tatilleri geldi ve gitti ve hepimiz birkaç gün rahatlamayı başardık. Yenilenmiş coşku ve ruhla, Core’un işlerini yavaş ama emin adımlarla Kubernetes koşucularına koymaya başladık. Bay Bay, Gelişme Şubesi ile birleştirildikten sonra ve yakında OKR’mize de ulaşmıştık.
Port’a yerleştirdik, ama dinlenmedik. Uzun yolculuktan sonra bizi çektiği uzun yolculuktan sonra gemimizde bakım yapmamız gerektiğini biliyorduk. EKS kümesi ve bileşenleri için uyarılar oluşturduk. Bu uyarılarla gitmek için olay müdahale oyun kitapları yazdık. Araçlarımızı güncel tutmamızı sağlamak için bir yama yönetimi prosedürü yazdık. Konuyla ilgilenen herkese yolculuğumuz sırasında öğrendiklerimizi kolayca yaymak için daha fazla belge yazdık; Kılavuzları giderme, kavramların açıklamaları, kararların arkasındaki akıl yürütme ve daha fazlası.
Ve sonra da düzeltmeler yapmaya başladık. Kurulumun eylemdeki davranışını sürekli olarak inceleyerek, tasarımımızda delikler bulduk. Evet, kümenin performansını ölçmüş ve incelemiştik ve bundan memnun kaldık, ancak kendimizi ve şirketin altyapısını geliştirmeye devam etmek için sürekli bir geri bildirim döngüsüne güveniyoruz. Amacımız ince, formda ve icracı bir kuruluma sahip olmaktır.
Karpenter konfigürasyonlarımızı bir kez daha revize ettik, maliyetleri daha da azaltmak ve aynı zamanda boru hattı süresini iyileştirmek için. Bunu, çekirdek projenin boru hattının işlerine dayanarak ve aynı zamanda işleri kendilerine hakize ederek, onlara yeterince CPU ve hafızayı tahsis ederek haklara uygun olarak yaptık. Bu, düğümlerimizin iş yüklerini daha da verimli hale getirmesini sağladı. Dolayısıyla, şimdi, CPU ve bellek kullanımları orantılı olarak artar ve düğümler maksimum kapasiteleri olarak kullanılır.
Çok sayıda kesin hesaplama gerektiren kaynak tahsisi (CPU ve bellek) ve AWS kapasite planlama stratejilerine derinlemesine dalmamızı sağlayan ENA (elastik ağ adaptörü) arayüzlerinin ağ bant genişliği sınırlarına sahip tamamen yeni ve heyecan verici sorunlarla mücadele ettik.
Daha yüksek standart bir geliştirici deneyimi ve daha hataya toleranslı bir kurulum sağlamak için hala yapmak istediğimiz birkaç şey var ve bunlar üzerinde yorulmadan çalışıyoruz.
Ancak, iş kuyruğu süresinin azaldığını gözlemledik. Ortalama bir iş süresinin de azaldığını gözlemledik. Ve birkaç tur düzeltme ve iyileştirmeden sonra, günlük AWS maliyetleri de düşmeye başladı ve eski koşucuların ortalama günlük maliyetlerinden daha az oldu.
Ve böylece, neredeyse farkında olmadan hedeflerimize ve OKR’ye de ulaştık. Acı tatlı hissettik. Bir yolculuk sona ermişti.
Macera için özlem
Şimdi bir aydır yerleştirilmiş ve hala sadece CI kümemizi değil, tüm platformu düzeltmek ve geliştirmekle hala meşgul olsak da, macera özlemimiz kulaklarımızda fısıltılar.
Zor ve öngörülemeyen bir yolculuk olduğunu fark ederek yolculuğumuzu hatırlıyoruz. Sadece tamamen yeni, büyük ve modern bir konuya derinlemesine dalmakla kalmadık, aynı zamanda CI kümesini ilk durak olarak seçtik. Kelimenin tam anlamıyla düğümler açısından anında 0 ila 100 arasında ölçeklenmesi gereken CI kümesi. Birden fazla iş yükünü işleyen ve bu nedenle ekstra güvenli olması gereken CI kümesi. Zirve zamanlarında, gelecekte oluşturacağımız diğer kümelerden daha fazla bakla olacak olan CI kümesi, muhtemelen birleştirilecek.
Ancak, şimdi yansıtarak ve bu zorlukta iyi başardığımızı fark ederek, Ufuklara tekrar cesurca bakıyoruz. Sadece CI kümemize daha fazla iş ve boru hattı değil, aynı zamanda heyecan verici yeni fikirler, metodolojiler ve araçlar tutan ufuklar!
Keşfetmek için ne olduğunu biliyoruz: Graviton örnekleri ve verimliliği daha da artıracak ve düşük maliyetleri, kuyruk büyüklüğü veya gecikme, yeşil mavi ve kanarya dağıtımları gibi mantıklı metriklere dayalı yatay otomatikleştirme, daha da ilerletilecek iyileştirilmiş, dinamik geliştirme ortamları için. Ek güvenlik kısıtlamaları için kaynak kullanımına, giriş denetleyicilerine ve servis ağlarına dayalı dikey otomatikleştirmeyi ve çok daha fazlasını etkinleştirin.
Bir sonraki Kubernetes yolculuğunun da zor olacağını biliyoruz. Ve bundan sonra da. Ancak bu zorlukları üstlendiğimizden ve ekip çalışmamıza ve hevesimize ve derin işlere güvenmemize güveniyoruz.
Gemimize bir kez daha binmek, yelkenleri kaldırmaya, direklere tırmanmak ve sonsuz teknoloji okyanusunun bize karşı atacağı ile karşı karşıya kalıyoruz.
Yakında tekrar yelken açacağız ve herkesi gemimize gelmeye davet ediyoruz.