Kubernetes-də işləyən proqram tərtibatçıları üçün alətlər

Kubernetes-də işləyən proqram tərtibatçıları üçün alətlər

Əməliyyatlara müasir yanaşma bir çox aktual biznes problemlərini həll edir. Konteynerlər və orkestrlər istənilən mürəkkəblikdə olan layihələrin miqyasını asanlaşdırır, yeni versiyaların buraxılışını asanlaşdırır, onları daha etibarlı edir, lakin eyni zamanda tərtibatçılar üçün əlavə problemlər yaradır. Proqramçı, ilk növbədə, onun koduna əhəmiyyət verir: memarlıq, keyfiyyət, performans, zəriflik - və onun Kubernetes-də necə işləyəcəyi və hətta minimal dəyişikliklər etdikdən sonra onu necə sınaqdan keçirmək və sazlamaq deyil. Buna görə də, Kubernetes üçün alətlərin aktiv şəkildə hazırlanması, hətta ən "arxaik" tərtibatçıların problemlərini həll etməyə kömək etməsi və diqqətlərini əsas şeyə yönəltməyə imkan verməsi də təbiidir.

Bu baxış kodu Kubernetes klasterinin pod'axında işləyən bir proqramçının həyatını asanlaşdıran bəzi alətlər haqqında qısa məlumat verir.

Sadə köməkçilər

Kubectl-debug

  • Alt xətt: konteynerinizi Poda əlavə edin və orada nə baş verdiyinə baxın.
  • Github.
  • Qısa GH statistikası: 715 ulduz, 54 öhdəlik, 9 iştirakçı.
  • Dil: get.
  • Lisenziya: Apache Lisenziyası 2.0.

kubectl üçün bu plagin, proses ad sahəsini digər konteynerlərlə paylaşacaq maraq podunun içərisində əlavə konteyner yaratmağa imkan verir. Orada podun işini düzəldə bilərsiniz: şəbəkəni yoxlayın, şəbəkə trafikinə qulaq asın, maraq prosesinin izlərini aparın və s.

Siz həmçinin işləməklə proses konteynerinə keçə bilərsiniz chroot /proc/PID/root - manifestdə qoyulmuş bir qabda kök qabığı almaq lazım olduqda bu çox rahat ola bilər. securityContext.runAs.

Alət sadə və effektivdir, buna görə də hər bir tərtibatçı üçün faydalı ola bilər. Bu barədə daha çox yazdıq ayrı məqalə.

Telepresensiya

  • Alt xətt: proqramı kompüterinizə köçürün. Yerli olaraq inkişaf etdirin və debug edin.
  • Sayt; Github.
  • Qısa GH statistikası: 2131 ulduz, 2712 öhdəlik, 33 iştirakçı.
  • Dil: Python.
  • Lisenziya: Apache Lisenziyası 2.0.

Bu əlavənin ideyası yerli istifadəçi kompüterində tətbiqi olan konteyneri işə salmaq və bütün trafiki klasterdən ona və arxaya proksi etməkdir. Bu yanaşma sevimli IDE-dəki faylları sadəcə redaktə etməklə yerli olaraq inkişaf etdirməyə imkan verir: nəticələr dərhal əlçatan olacaq.

Lokal olaraq işləməyin üstünlükləri redaktələrin və ani nəticələrin rahatlığı, tətbiqi adi şəkildə sazlamaq imkanıdır. İşin mənfi tərəfi odur ki, o, əlaqə sürətinə tələbkardır, bu, kifayət qədər yüksək RPS və trafikə malik bir proqramla işləməli olduğunuz zaman xüsusilə nəzərə çarpır. Bundan əlavə, Telepresence-in Windows-da həcmi quraşdırma ilə bağlı problemləri var ki, bu da bu ƏS-ə öyrəşmiş tərtibatçılar üçün həlledici məhdudiyyət ola bilər.

Biz artıq Telepresence-dən istifadə təcrübəmizi paylaşmışıq burada.

Ksync

  • Alt xətt: klasterdəki konteynerlə kodun demək olar ki, ani sinxronizasiyası.
  • Github.
  • Qısa GH statistikası: 555 ulduz, 362 öhdəlik, 11 iştirakçı.
  • Dil: get.
  • Lisenziya: Apache Lisenziyası 2.0.

Utilit sizə yerli kataloqun məzmununu klasterdə işləyən konteynerin kataloqu ilə sinxronlaşdırmağa imkan verir. Belə bir vasitə, əsas problemi işləyən konteynerə kodu çatdırmaq olan skript proqramlaşdırma dillərində tərtibatçılar üçün mükəmməldir. Ksync bu baş ağrısını aradan qaldırmaq üçün nəzərdə tutulub.

Komanda ilə bir dəfə işə salındıqda ksync init klasterdə seçilmiş konteynerin fayl sisteminin vəziyyətini izləmək üçün istifadə olunan DaemonSet yaradılır. Yerli kompüterində tərtibatçı əmri yerinə yetirir ksync watch, konfiqurasiyaları izləyir və işləyir sinxronizasiyafaylları klasterlə birbaşa sinxronlaşdıran .

Yalnız ksync-ə nəyi nə ilə sinxronlaşdırmaq barədə göstəriş vermək qalır. Məsələn, bu əmr:

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

...adlı izləyici yaradacaq myprojectetiketli pod axtaracaq app=backend və yerli qovluğu sinxronlaşdırmağa çalışın /home/user/myproject/ kataloqu ilə /var/www/myproject/ adlı konteynerdə php.

Təcrübəmizdən ksync ilə bağlı problemlər və qeydlər:

  • Kubernetes klaster qovşaqlarında istifadə edilməlidir overlay2 Docker üçün yaddaş sürücüsü kimi. Kommunal başqaları ilə işləməyəcək.
  • Windows-u müştəri əməliyyat sistemi kimi istifadə edərkən, fayl sistemi izləyicisi düzgün işləməyə bilər. Bu səhv böyük qovluqlarla - çoxlu sayda daxili fayl və qovluqlarla işləyərkən qeyd edildi. yaratdıq müvafiq məsələ sinxronizasiya layihəsində, lakin hələ (iyulun əvvəlindən) bu barədə heç bir irəliləyiş yoxdur.
  • Fayldan istifadə edin .stignore sinxronizasiyaya ehtiyac olmayan yolları və ya fayl nümunələrini təyin etmək üçün (məsələn, qovluqlar app/cache и .git).
  • Varsayılan olaraq, fayllar dəyişdikdə ksync konteyneri yenidən işə salacaq. Node.js üçün bu əlverişlidir, lakin PHP üçün bu tamamilə lazımsızdır. Opcache-ni söndürüb bayraqdan istifadə etmək daha yaxşıdır --reload=false.
  • Konfiqurasiya həmişə düzəldilə bilər $HOME/.ksync/ksync.yaml.

xınclamaq

  • Alt xətt: prosesləri birbaşa klasterdə düzəldin.
  • Github.
  • Qısa GH statistikası: 1154 ulduz, 279 öhdəlik, 23 iştirakçı.
  • Dil: get.
  • Lisenziya: Apache Lisenziyası 2.0.

Bu alət birbaşa podlarda prosesləri sazlamaq üçün nəzərdə tutulmuşdur. Kommunal sadədir və interaktiv olaraq istədiyiniz sazlayıcını seçməyə imkan verir (aşağıya bax) və prosesə müdaxilə etməli olduğunuz ad sahəsi + pod. Hazırda dəstəklənir:

  • delve - Go proqramları üçün;
  • GDB - hədəf uzaqdan + port yönləndirmə vasitəsilə;
  • Java proqramlarının sazlanması üçün JDWP port yönləndirilməsi.

IDE tərəfində dəstək yalnız VScode-da mövcuddur ( genişlənməsi), lakin cari (2019) il üçün planlara Eclipse və Intellij daxildir.

Prosesləri sazlamaq üçün Squash klaster qovşaqlarında imtiyazlı konteyner işlədir, ona görə də ilk növbədə imkanlarla tanış olmalısınız. Təhlükəsizlik rejimi təhlükəsizlik problemlərindən qaçmaq üçün.

Tam həllər

Gəlin ağır artilleriyaya - inkişaf etdiricilərin bir çox ehtiyaclarını dərhal ödəmək üçün hazırlanmış daha "genişmiqyaslı" layihələrə keçək.

NB: Bu siyahıda, əlbəttə ki, Açıq Mənbə yardım proqramımız üçün bir yer var werf (əvvəllər dapp kimi tanınırdı). Bununla belə, biz bu barədə bir neçə dəfə yazmışıq və danışmışıq və buna görə də rəyə daxil etməmək qərarına gəldik. Onun imkanları ilə daha yaxından tanış olmaq istəyənlərə hesabatı oxumağı/dinləməyi tövsiyə edirik”werf Kubernetes-də CI/CD üçün alətimizdir.

DevSpace

  • Alt xətt: Kubernetesdə işə başlamaq istəyən, lakin onun cəngəlliyinə dərindən girmək istəməyənlər üçün.
  • Github.
  • Qısa GH statistikası: 630 ulduz, 1912 öhdəlik, 13 iştirakçı.
  • Dil: get.
  • Lisenziya: Apache Lisenziyası 2.0.

Komanda inkişafı üçün idarə olunan klasterləri Kubernetes ilə təmin edən eyni adlı şirkətdən bir həll. Kommunal kommersiya qrupları üçün yaradılmışdır, lakin digərləri ilə əla işləyir.

Komandanı işləyərkən devspace init layihə kataloqunda sizə təklif olunacaq (interaktiv):

  • işləyən Kubernetes klasterini seçin,
  • mövcud istifadə edin Dockerfile (və ya yenisini yaratmaq) bunun əsasında konteyner yaratmaq,
  • konteyner şəkillərinin saxlanması üçün anbar seçin və s.

Bütün bu hazırlıq addımlarından sonra əmri işlətməklə inkişafa başlaya bilərsiniz devspace dev. O, konteyneri quracaq, onu depoya yükləyəcək, yerləşdirməni klasterə yayacaq və limanın yönləndirilməsinə və konteynerin yerli kataloqla sinxronlaşdırılmasına başlayacaq.

İsteğe bağlı olaraq, sizdən terminalı konteynerə köçürmək istəniləcək. Siz imtina etməməlisiniz, çünki əslində konteyner yuxu əmri ilə başlayır və real sınaq üçün proqram əl ilə işə salınmalıdır.

Nəhayət, komanda devspace deploy tətbiqi və əlaqəli infrastrukturu klasterə yayır, bundan sonra hər şey döyüş rejimində işləməyə başlayır.

Bütün layihə konfiqurasiyası faylda saxlanılır devspace.yaml. İnkişaf mühiti parametrlərinə əlavə olaraq, standart Kubernetes manifestlərinə bənzər, yalnız çox sadələşdirilmiş infrastrukturun təsvirini də tapa bilərsiniz.

Kubernetes-də işləyən proqram tərtibatçıları üçün alətlər
Memarlıq və DevSpace ilə işin əsas mərhələləri

Bundan əlavə, layihəyə əvvəlcədən təyin edilmiş komponenti (məsələn, MySQL DBMS) və ya Helm diaqramını əlavə etmək asandır. Ətraflı oxu sənədləşdirmə - mürəkkəb deyil.

Skaffold

  • Sayt; Github.
  • Qısa GH statistikası: 7423 ulduz, 4173 öhdəlik, 136 iştirakçı.
  • Dil: get.
  • Lisenziya: Apache Lisenziyası 2.0.

Google-dan olan bu yardım proqramı, kodu bir şəkildə Kubernetes klasterində işləyəcək bir tərtibatçının bütün ehtiyaclarını ödədiyini iddia edir. Onu istifadə etməyə başlamaq devspace qədər asan deyil: interaktivlik, dil aşkarlanması və avtomatik yaradılması yoxdur Dockerfile bunu sizə burada təklif etməyəcəklər.

Bununla belə, bu sizi qorxutmursa, Skaffold sizə nə etməyə icazə verir:

  • Mənbə kodu dəyişikliklərini izləyin.
  • Montaj tələb etmirsə, onu pod konteyneri ilə sinxronlaşdırın.
  • Əgər dil şərh olunursa, kodu olan konteynerləri toplayın və ya artefaktları tərtib edin və konteynerlərə yığın.
  • Nəticədə şəkillər avtomatik olaraq yoxlanılır konteyner-struktur-sınaq.
  • Şəkillərin etiketlənməsi və Docker Reyestrinə yüklənməsi.
  • kubectl, Helm və ya kustomize istifadə edərək bir tətbiqi klasterdə yerləşdirin.
  • Port yönləndirməni həyata keçirin.
  • Java, Node.js, Python dillərində yazılmış proqramları düzəldin.

Müxtəlif variasiyalarda iş axını faylda deklarativ şəkildə təsvir edilmişdir skaffold.yaml. Layihə üçün montaj və yerləşdirmə mərhələlərini qismən və ya tamamilə dəyişdirə biləcəyiniz bir neçə profil də müəyyən edə bilərsiniz. Məsələn, inkişaf üçün, tərtibatçı üçün əlverişli olan əsas təsviri, səhnələşdirmə və istehsal üçün isə minimal olanı (+ istifadə edin) təyin edin. securityContext konteynerlər və ya tətbiqin yerləşdiriləcəyi klasteri yenidən müəyyənləşdirin).

Docker konteynerləri yerli və ya uzaqdan tikilə bilər: in Google Bulud Quraşdırma və ya istifadə edərək çoxluqda Kaniko. Bazel və Jib Maven/Gradle də dəstəklənir. Etiketləmə üçün Skaffold bir çox strategiyanı dəstəkləyir: git commit hash, tarix/saat, sha256-mənəbələrin cəmi və s.

Ayrı-ayrılıqda, qabların sınaqdan keçirilməsinin mümkünlüyünü qeyd etmək lazımdır. Artıq qeyd olunan konteyner-struktur-test çərçivəsi aşağıdakı yoxlama üsullarını təklif edir:

  • Çıxış statuslarının izlənməsi və əmrin mətn çıxışının yoxlanılması ilə konteyner kontekstində əmrlərin yerinə yetirilməsi.
  • Konteynerdə faylların mövcudluğunun yoxlanılması və göstərilən atributların uyğunlaşdırılması.
  • Normal ifadələrdən istifadə edərək fayl məzmununa nəzarət.
  • Şəkil metadatasının yoxlanması (ENV, ENTRYPOINT, VOLUMES və s.).
  • Lisenziya uyğunluğu yoxlanılır.

Faylların konteynerlə sinxronizasiyası ən optimal şəkildə həyata keçirilmir: Skaffold sadəcə mənbələrlə arxiv yaradır, onu kopyalayır və konteynerdən çıxarır (tar quraşdırılmalıdır). Buna görə də, əsas vəzifəniz kodun sinxronizasiyasıdırsa, xüsusi bir həllə (ksync) baxmaq daha yaxşıdır.

Kubernetes-də işləyən proqram tərtibatçıları üçün alətlər
Skaffold əməliyyatının əsas mərhələləri

Ümumiyyətlə, alət Kubernetes manifestlərindən mücərrədləşdirməyə imkan vermir və heç bir interaktivliyə malik deyil, ona görə də mənimsəmək çətin görünə bilər. Ancaq bu, həm də onun üstünlüyüdür - daha çox fəaliyyət azadlığı.

Bağ

  • Sayt; Github.
  • Qısa GH statistikası: 1063 ulduz, 1927 öhdəlik, 17 iştirakçı.
  • Dil: TypeScript (layihəni bəziləri Go-da olacaq bir neçə komponentə bölmək, həmçinin TypeScript/JavaScript və Go-da əlavələr yaratmaq üçün SDK hazırlamaq planlaşdırılır).
  • Lisenziya: Apache Lisenziyası 2.0.

Skaffold kimi, Garden proqram kodunu K8s klasterinə çatdırma proseslərini avtomatlaşdırmağı hədəfləyir. Bunun üçün əvvəlcə layihə strukturunu YAML faylında təsvir etməli, sonra isə əmri yerinə yetirməlisiniz garden dev. O, bütün sehrləri edəcək:

  • Layihənin müxtəlif hissələri ilə konteynerlər toplayın.
  • Əgər təsvir edilmişdirsə, inteqrasiya və vahid testlərini həyata keçirir.
  • Bütün layihə komponentlərini klasterə yayır.
  • Mənbə kodu dəyişərsə, o, bütün boru kəmərini yenidən işə salacaq.

Bu alətdən istifadənin əsas məqsədi uzaq klasteri inkişaf komandası ilə bölüşməkdir. Bu halda, bəzi tikinti və sınaq addımları artıq yerinə yetirilibsə, bu, bütün prosesi əhəmiyyətli dərəcədə sürətləndirəcək, çünki Garden keşlənmiş nəticələrdən istifadə edə biləcək.

Layihə modulu konteyner, Maven konteyneri, Helm diaqramı, manifest ola bilər. kubectl apply və ya hətta OpenFaaS funksiyası. Üstəlik, modullardan hər hansı birini uzaq Git deposundan çıxarmaq olar. Modul xidmətləri, tapşırıqları və testləri müəyyən edə bilər və ya müəyyən etməyə bilər. Xidmətlərin və tapşırıqların asılılıqları ola bilər, beləliklə, siz müəyyən xidmətin yerləşdirmə ardıcıllığını müəyyən edə və tapşırıq və testlərin işə salınmasını təşkil edə bilərsiniz.

Garden istifadəçiyə gözəl tablosunu təqdim edir (hazırda eksperimental vəziyyət), layihə qrafikini göstərən: komponentlər, montaj ardıcıllığı, tapşırıqların və testlərin yerinə yetirilməsi, onların əlaqələri və asılılıqları. Doğrudan brauzerdə siz bütün layihə komponentlərinin qeydlərinə baxa və müəyyən bir komponentin HTTP vasitəsilə nə çıxdığını yoxlaya bilərsiniz (əlbəttə ki, bunun üçün giriş resursu elan edilibsə).

Kubernetes-də işləyən proqram tərtibatçıları üçün alətlər
Bağ üçün panel

Bu alət həm də isti yenidən yükləmə rejiminə malikdir, o, sadəcə olaraq skript dəyişikliklərini klasterdəki konteynerlə sinxronlaşdırır və proqramların sazlanması prosesini xeyli sürətləndirir. Bağın yaxşısı var sənədlər və pis deyil nümunələr toplusu, tez öyrəşməyə və istifadə etməyə başlamağa imkan verir. Yeri gəlmişkən, bu yaxınlarda dərc etdik məqalə tərcüməsi onun müəlliflərindən.

Nəticə

Əlbəttə ki, Kubernetes-də tətbiqlərin işlənib hazırlanması və sazlanması üçün alətlərin bu siyahısı bununla məhdudlaşmır. Ayrı bir məqalə olmasa da, heç olmasa bir qeyd etməyə layiq olan daha çox faydalı və praktik kommunal xidmətlər var. Nə istifadə etdiyinizi, hansı problemlərlə qarşılaşdığınızı və onları necə həll etdiyinizi bizə deyin!

PS

Bloqumuzda da oxuyun:

Mənbə: www.habr.com

Добавить комментарий