Kubernetes'te çalışan uygulama geliştiricilerine yönelik araçlar

Kubernetes'te çalışan uygulama geliştiricilerine yönelik araçlar

Operasyonlara modern bir yaklaşım, birçok acil iş sorununu çözer. Konteynerler ve orkestratörler, her türlü karmaşıklıktaki projelerin ölçeklendirilmesini kolaylaştırır, yeni sürümlerin yayınlanmasını basitleştirir, onları daha güvenilir hale getirir, ancak aynı zamanda geliştiriciler için ek sorunlar da yaratırlar. Programcı her şeyden önce koduyla ilgilenir: mimarisi, kalitesi, performansı, zarafeti - Kubernetes'te nasıl çalışacağı ve çok az değişiklik yaptıktan sonra bile kodun nasıl test edileceği ve hata ayıklanacağı değil. Bu nedenle Kubernetes araçlarının aktif olarak geliştirilmesi, en "arkaik" geliştiricilerin bile sorunlarının çözülmesine yardımcı olması ve asıl şeye odaklanmalarına olanak sağlaması da oldukça doğaldır.

Bu incelemede, kodu bir Kubernetes kümesinin pod'ax'ında çalışan programcının hayatını kolaylaştıran bazı araçlar hakkında kısa bilgiler verilmektedir.

Basit yardımcılar

Kubectl-hata ayıklama

  • Alt satırda: kapsayıcınızı bir Pod'a ekleyin ve içinde ne olduğunu görün.
  • GitHub.
  • Kısa GH istatistikleri: 715 yıldız, 54 kayıt, 9 katkıda bulunan.
  • Dil: Git.
  • Lisans: Apache Lisansı 2.0.

Kubectl için bu eklenti, ilgilenilen bölmenin içinde, süreç ad alanını diğer kaplarla paylaşacak ek bir kap oluşturmanıza olanak tanır. İçinde bölmenin işleminde hata ayıklayabilirsiniz: ağı kontrol edin, ağ trafiğini dinleyin, ilgilenilen sürecin bir takibini yapın, vb.

Ayrıca çalıştırarak işlem kapsayıcısına da geçebilirsiniz. chroot /proc/PID/root - bildirimde ayarlandığı kapsayıcıya bir kök kabuk almanız gerektiğinde bu çok kullanışlı olabilir securityContext.runAs.

Araç basit ve etkili olduğundan her geliştiriciye faydalı olabilir. Bu konuda daha fazlasını yazdık ayrı makale.

telepresence

  • Alt satırda: uygulamayı bilgisayarınıza aktarın. Yerel olarak geliştirin ve hata ayıklayın.
  • web sitesi; GitHub.
  • Kısa GH istatistikleri: 2131 yıldız, 2712 taahhüt, 33 katkıda bulunan.
  • Dil: Python.
  • Lisans: Apache Lisansı 2.0.

Bu ek bileşenin fikri, yerel kullanıcı bilgisayarında uygulama içeren bir kapsayıcı başlatmak ve kümeden kümeye giden ve geri gelen tüm trafiği proxy olarak kullanmaktır. Bu yaklaşım, favori IDE'nizdeki dosyaları düzenleyerek yerel olarak geliştirmenize olanak tanır: sonuçlar hemen elde edilecektir.

Yerel olarak çalıştırmanın avantajları, düzenlemelerin ve anlık sonuçların kolaylığı, uygulamada olağan şekilde hata ayıklama yeteneğidir. Dezavantajı ise bağlantı hızı gerektirmesidir; bu özellikle oldukça yüksek RPS'ye ve trafiğe sahip bir uygulamayla çalışmak zorunda kaldığınızda fark edilir. Ayrıca Telepresence'ın Windows'ta birim bağlama sorunları vardır ve bu, bu işletim sistemine alışkın geliştiriciler için belirleyici bir sınırlama olabilir.

Telepresence kullanma deneyimimizi zaten paylaştık burada.

Ksync

  • Alt satırda: kümedeki kapsayıcıyla kodun neredeyse anında senkronizasyonu.
  • GitHub.
  • Kısa GH istatistikleri: 555 yıldız, 362 kayıt, 11 katkıda bulunan.
  • Dil: Git.
  • Lisans: Apache Lisansı 2.0.

Yardımcı program, yerel bir dizinin içeriğini kümede çalışan bir kapsayıcının dizini ile senkronize etmenize olanak tanır. Böyle bir araç, ana sorunu kodu çalışan bir konteynere iletmek olan komut dosyası programlama dillerindeki geliştiriciler için mükemmeldir. Ksync bu baş ağrısını hafifletmek için tasarlandı.

Komut tarafından bir kez başlatıldığında ksync init Seçilen kapsayıcının dosya sisteminin durumunu izlemek için kullanılan kümede bir DaemonSet oluşturulur. Geliştirici, yerel bilgisayarında komutu çalıştırır ksync watchYapılandırmaları izleyen ve çalıştıran syncthing, dosyaları doğrudan kümeyle senkronize eder.

Geriye kalan tek şey ksync'e neyin neyle senkronize edileceğini öğretmektir. Örneğin, bu komut:

ksync create --name=myproject --namespace=test --selector=app=backend --container=php --reload=false /home/user/myproject/ /var/www/myproject/

...adında bir gözlemci yaratacak myprojectetiketli bir bölmeyi arayacak app=backend ve yerel dizini senkronize etmeyi deneyin /home/user/myproject/ kataloglu /var/www/myproject/ denilen konteynerde php.

Deneyimlerimizden ksync ile ilgili sorunlar ve notlar:

  • Kubernetes küme düğümlerinde kullanılmalıdır overlay2 Docker için depolama sürücüsü olarak. Yardımcı program başkalarıyla çalışmayacaktır.
  • Windows'u istemci işletim sistemi olarak kullanırken, dosya sistemi izleyicisi düzgün çalışmayabilir. Bu hata, çok sayıda iç içe geçmiş dosya ve dizin içeren büyük dizinlerle çalışırken fark edildi. Biz yarattık ilgili konu senkronizasyon projesinde, ancak henüz (Temmuz ayının başından beri) bu konuda bir ilerleme yok.
  • Dosyayı kullan .stignore senkronize edilmesi gerekmeyen yolları veya dosya kalıplarını belirtmek için (örneğin, dizinler) app/cache и .git).
  • Varsayılan olarak ksync, dosyalar değiştiğinde kapsayıcıyı yeniden başlatır. Node.js için bu uygundur ancak PHP için tamamen gereksizdir. Opcache'i kapatmak ve bayrağı kullanmak daha iyidir --reload=false.
  • Yapılandırma her zaman düzeltilebilir $HOME/.ksync/ksync.yaml.

Kabak

  • Alt satırda: doğrudan kümedeki işlemlerde hata ayıklama.
  • GitHub.
  • Kısa GH istatistikleri: 1154 yıldız, 279 kayıt, 23 katkıda bulunan.
  • Dil: Git.
  • Lisans: Apache Lisansı 2.0.

Bu araç, işlemlerde doğrudan bölmelerde hata ayıklamak için tasarlanmıştır. Yardımcı program basittir ve etkileşimli olarak istediğiniz hata ayıklayıcıyı seçmenize olanak tanır (aşağıya bakınız) ve süreçte müdahale etmeniz gereken ad alanı + bölme. Şu anda desteklenenler:

  • delve - Go uygulamaları için;
  • GDB - hedef uzaktan + bağlantı noktası yönlendirme yoluyla;
  • Java uygulamalarında hata ayıklamak için JDWP bağlantı noktası yönlendirme.

IDE tarafında destek yalnızca VScode'da mevcuttur (kullanarak genişleme), ancak mevcut (2019) yıl için planlar arasında Eclipse ve Intellij yer alıyor.

Süreçlerde hata ayıklamak için Squash, küme düğümlerinde ayrıcalıklı bir kapsayıcı çalıştırır; bu nedenle öncelikle yeteneklere aşina olmanız gerekir. güvenli mod güvenlik sorunlarını önlemek için.

Karmaşık çözümler

Ağır toplara geçelim - geliştiricilerin birçok ihtiyacını anında karşılamak için tasarlanmış daha "büyük ölçekli" projeler.

NB: Bu listede elbette Açık Kaynak yardımcı programımıza da yer var Werf (eskiden dapp olarak biliniyordu). Ancak bunun hakkında zaten birden fazla kez yazıp konuştuk ve bu nedenle incelemeye dahil etmemeye karar verdik. Yeteneklerini daha yakından tanımak isteyenler için raporu okumanızı/dinlemenizi öneririz.werf, Kubernetes'te CI/CD için aracımızdır'.

DevSpace

  • Alt satırda: Kubernetes'te çalışmaya başlamak isteyenler ancak ormanın derinliklerine dalmak istemeyenler için.
  • GitHub.
  • Kısa GH istatistikleri: 630 yıldız, 1912 taahhüt, 13 katkıda bulunan.
  • Dil: Git.
  • Lisans: Apache Lisansı 2.0.

Ekip gelişimi için Kubernetes ile yönetilen kümeler sağlayan aynı adlı şirketten bir çözüm. Yardımcı program ticari kümeler için oluşturuldu, ancak diğerleriyle harika çalışıyor.

Komutu çalıştırırken devspace init proje kataloğunda size sunulacak (etkileşimli olarak):

  • çalışan bir Kubernetes kümesi seçin,
  • var olanı kullan Dockerfile (veya yeni bir tane oluşturun) buna dayalı bir kapsayıcı oluşturmak için,
  • kapsayıcı görüntüleri vb. depolamak için bir havuz seçin.

Tüm bu hazırlık adımlarından sonra komutu çalıştırarak geliştirmeye başlayabilirsiniz. devspace dev. Konteyneri oluşturacak, depoya yükleyecek, dağıtımı kümeye sunacak ve konteynerin yerel dizinle bağlantı noktası iletilmesini ve senkronizasyonunu başlatacaktır.

İsteğe bağlı olarak terminali konteynere taşımanız istenecektir. Reddetmemelisiniz çünkü gerçekte konteyner uyku komutuyla başlar ve gerçek test için uygulamanın manuel olarak başlatılması gerekir.

Son olarak ekip devspace deploy uygulamayı ve ilgili altyapıyı kümeye dağıtır ve ardından her şey savaş modunda çalışmaya başlar.

Tüm proje konfigürasyonu bir dosyada saklanır devspace.yaml. Geliştirme ortamı ayarlarına ek olarak, standart Kubernetes bildirimlerine benzer şekilde, yalnızca büyük ölçüde basitleştirilmiş bir altyapı açıklamasını da burada bulabilirsiniz.

Kubernetes'te çalışan uygulama geliştiricilerine yönelik araçlar
DevSpace ile çalışmanın mimarisi ve ana aşamaları

Ayrıca projeye önceden tanımlanmış bir bileşeni (örneğin MySQL DBMS) veya Helm grafiğini eklemek kolaydır. Daha fazlasını okuyun belgeleme - karmaşık değil.

iskele

  • web sitesi; GitHub.
  • Kısa GH istatistikleri: 7423 yıldız, 4173 taahhüt, 136 katkıda bulunan.
  • Dil: Git.
  • Lisans: Apache Lisansı 2.0.

Google'ın bu yardımcı programı, kodu bir şekilde Kubernetes kümesinde çalışacak bir geliştiricinin tüm ihtiyaçlarını karşıladığını iddia ediyor. Kullanmaya başlamak devspace kadar kolay değil: etkileşim yok, dil algılama ve otomatik oluşturma yok Dockerfile burada sana teklif etmeyecekler.

Ancak bu sizi korkutmuyorsa Skaffold'un yapmanıza izin verdiği şey şu:

  • Kaynak kodu değişikliklerini izleyin.
  • Montaj gerektirmiyorsa bölme kabıyla senkronize edin.
  • Dil yorumlanıyorsa kodlu kaplar toplayın veya yapıları derleyip kaplara paketleyin.
  • Ortaya çıkan görüntüler kullanılarak otomatik olarak kontrol edilir. konteyner-yapı-testi.
  • Görüntüleri Docker Kayıt Defterine etiketleme ve yükleme.
  • Kubectl, Helm veya kustomize kullanarak bir uygulamayı kümede dağıtın.
  • Bağlantı noktası yönlendirmeyi gerçekleştirin.
  • Java, Node.js ve Python ile yazılmış uygulamalarda hata ayıklama.

Çeşitli varyasyonlardaki iş akışı dosyada bildirimsel olarak açıklanmıştır skaffold.yaml. Bir proje için montaj ve dağıtım aşamalarını kısmen veya tamamen değiştirebileceğiniz çeşitli profiller de tanımlayabilirsiniz. Örneğin, geliştirme için, geliştiriciye uygun bir temel görüntü belirtin ve sahneleme ve üretim için minimum bir (+ kullanım) securityContext kapsayıcılar veya uygulamanın dağıtılacağı kümeyi yeniden tanımlayın).

Docker konteynerleri yerel olarak veya uzaktan oluşturulabilir: Google Bulut Yapısı veya kullanarak bir kümede kaniko. Bazel ve Jib Maven/Gradle da desteklenmektedir. Etiketleme için Skaffold birçok stratejiyi destekler: git taahhüt karması, tarih/saat, sha256-kaynak toplamı vb. ile.

Ayrı olarak, konteynerleri test etme olasılığını da belirtmekte fayda var. Daha önce bahsedilen konteyner-yapı-test çerçevesi aşağıdaki doğrulama yöntemlerini sunar:

  • Çıkış durumlarını izleyen ve komutun metin çıktısını kontrol eden bir kapsayıcı bağlamında komutları yürütme.
  • Kaptaki dosyaların varlığının kontrol edilmesi ve belirtilen özniteliklerle eşleştirilmesi.
  • Düzenli ifadeler kullanarak dosya içeriklerinin kontrolü.
  • Resim meta veri doğrulaması (ENV, ENTRYPOINT, VOLUMES vb.)
  • Lisans uyumluluğunun kontrol edilmesi.

Dosyaların konteynerle senkronizasyonu en uygun şekilde gerçekleştirilmiyor: Skaffold, kaynaklarla birlikte bir arşiv oluşturur, onu kopyalar ve konteynere açar (tar yüklü olmalıdır). Bu nedenle, asıl göreviniz kod senkronizasyonu ise, özel bir çözüme (ksync) bakmak daha iyidir.

Kubernetes'te çalışan uygulama geliştiricilerine yönelik araçlar
Skaffold operasyonunun ana aşamaları

Genel olarak araç, Kubernetes bildirimlerinden soyutlama yapmanıza izin vermez ve herhangi bir etkileşime sahip değildir, bu nedenle ustalaşması zor görünebilir. Ancak bu aynı zamanda onun avantajıdır; daha fazla hareket özgürlüğü.

Bahçe

  • web sitesi; GitHub.
  • Kısa GH istatistikleri: 1063 yıldız, 1927 taahhüt, 17 katkıda bulunan.
  • Dil: TypeScript (projenin bir kısmı Go'da olacak şekilde birkaç bileşene bölünmesi ve ayrıca TypeScript/JavaScript ve Go'da eklentiler oluşturmak için bir SDK oluşturulması planlanıyor).
  • Lisans: Apache Lisansı 2.0.

Skaffold gibi Garden da uygulama kodunu K8s kümesine teslim etme süreçlerini otomatikleştirmeyi amaçlıyor. Bunu yapmak için önce proje yapısını bir YAML dosyasında tanımlamanız ve ardından komutu çalıştırmanız gerekir. garden dev. Bütün sihri yapacak:

  • Projenin çeşitli bölümlerini içeren kapları toplayın.
  • Açıklanmışsa entegrasyon ve birim testlerini gerçekleştirir.
  • Tüm proje bileşenlerini kümeye dağıtır.
  • Kaynak kodu değişirse tüm işlem hattını yeniden başlatır.

Bu aracı kullanmanın ana odağı uzak bir kümeyi bir geliştirme ekibiyle paylaşmaktır. Bu durumda, bazı oluşturma ve test adımları zaten yapılmışsa, Garden önbelleğe alınan sonuçları kullanabileceği için bu, tüm süreci önemli ölçüde hızlandıracaktır.

Bir proje modülü bir konteyner, bir Maven konteyneri, bir Helm grafiği, bir manifesto olabilir. kubectl apply hatta bir OpenFaaS işlevi. Üstelik modüllerden herhangi biri uzak Git deposundan çekilebilir. Bir modül hizmetleri, görevleri ve testleri tanımlayabilir veya tanımlamayabilir. Hizmetler ve görevlerin bağımlılıkları olabilir; böylece belirli bir hizmetin dağıtım sırasını belirleyebilir ve görevlerin ve testlerin başlatılmasını düzenleyebilirsiniz.

Garden, kullanıcıya güzel bir gösterge paneli sağlar (şu anda deneysel durum), proje grafiğini görüntüler: bileşenler, montaj sırası, görevlerin ve testlerin yürütülmesi, bağlantıları ve bağımlılıkları. Doğrudan tarayıcıda, tüm proje bileşenlerinin günlüklerini görüntüleyebilir ve belirli bir bileşenin HTTP yoluyla ne çıktı verdiğini kontrol edebilirsiniz (tabii ki bunun için bir giriş kaynağı tanımlanmışsa).

Kubernetes'te çalışan uygulama geliştiricilerine yönelik araçlar
Bahçe Paneli

Bu araç ayrıca, komut dosyası değişikliklerini kümedeki kapsayıcıyla kolayca senkronize eden ve uygulamada hata ayıklama sürecini büyük ölçüde hızlandıran bir çalışırken yeniden yükleme moduna da sahiptir. Bahçede iyi bir tane var документация ve fena değil bir dizi örnekhızlı bir şekilde alışmanızı ve kullanmaya başlamanızı sağlar. Bu arada, yakın zamanda yayınladık makale çevirisi yazarlarından.

Sonuç

Elbette Kubernetes'te uygulama geliştirmeye ve hata ayıklamaya yönelik araçların listesi bunlarla sınırlı değil. Ayrı bir makale olmasa da en azından bahsetmeye değer çok daha kullanışlı ve pratik yardımcı programlar var. Bize ne kullandığınızı, hangi sorunlarla karşılaştığınızı ve bunları nasıl çözdüğünüzü anlatın!

PS

Blogumuzda da okuyun:

Kaynak: habr.com

Yorum ekle