Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Bu yazı ona görə yazılmışdır ki, əməkdaşlarımız müştərilərlə Kubernetes-də proqramların hazırlanması və OpenShift-də bu cür inkişafın xüsusiyyətləri barədə kifayət qədər söhbətlər aparmışlar.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Biz adətən Kubernetes-in sadəcə Kubernetes olması tezisi ilə başlayırıq və OpenShift artıq Microsoft AKS və ya Amazon EKS kimi Kubernetes platformasıdır. Bu platformaların hər birinin müəyyən bir hədəf auditoriyaya yönəlmiş öz üstünlükləri var. Və bundan sonra söhbət artıq konkret platformaların güclü və zəif tərəflərinin müqayisəsinə keçir.

Ümumiyyətlə, bu yazını “Qulaq asın, kodu harada işlətdiyinizin fərqi yoxdur, OpenShift-də və ya AKS-də, EKS-də, bəzi xüsusi Kubernetlərdə, bəli istənilən Kubernetes-də yazmağı düşündük. (qısaca KUK deyək) "Həm orada, həm də orada çox sadədir."

Sonra biz ən sadə "Salam Dünya"nı götürməyi və ondan CMC ilə Red Hat OpenShift Konteyner Platforması (bundan sonra OCP və ya sadəcə OpenShift) arasında nəyin ümumi olduğunu və fərqlərin nə olduğunu göstərmək üçün istifadə etməyi planlaşdırdıq.

Ancaq bu yazını yazarkən başa düşdük ki, OpenShift-dən istifadə etməyə o qədər öyrəşmişik ki, onun necə böyüdüyünü və sadəcə Kubernetes paylanmasından daha çox olan heyrətamiz platformaya çevrildiyini dərk etmirik. Biz OpenShift-in yetkinliyini və sadəliyini təbii qəbul etməyə meylliyik, onun möhtəşəmliyini gözdən qaçırırıq.

Ümumiyyətlə, aktiv tövbənin vaxtı gəldi və indi biz “Salam Dünya” nın KUK və OpenShift-də istifadəyə verilməsini addım-addım müqayisə edəcəyik və bunu mümkün qədər obyektiv edəcəyik (yaxşı, bəzən şəxsi göstərməkdən başqa) mövzuya münasibət). Bu məsələ ilə bağlı sırf subyektiv rəylə maraqlanırsınızsa, onu oxuya bilərsiniz burada (EN). Və bu yazıda biz faktlara və yalnız faktlara sadiq qalacağıq.

Kümələr

Deməli, "Salam Dünya"mıza klasterlər lazımdır. İstənilən ictimai buludlara “yox” deyək ki, serverlər, registrlər, şəbəkələr, məlumat ötürülməsi və s. Müvafiq olaraq, biz sadə bir node klaster seçirik Minikube (KUK üçün) və Kod Hazır Konteynerlər (OpenShift klasteri üçün). Bu seçimlərin hər ikisini quraşdırmaq həqiqətən asandır, lakin laptopunuzda kifayət qədər çox resurs tələb edir.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

KUK-e-də montaj

Beləliklə, gedək.

Addım 1 - Konteyner Şəkilimizin qurulması

Minikube-də "Salam Dünya"mızı yerləşdirməklə başlayaq. Bunun üçün tələb olunacaq:

  1. 1. Quraşdırılmış Docker.
  2. 2. Quraşdırılmış Git.
  3. 3. Quraşdırılmış Maven (əslində, bu layihə mvnw binary istifadə edir, ona görə də onsuz da edə bilərsiniz).
  4. 4. Əslində mənbənin özü, yəni. depo klonu github.com/gcolman/quarkus-hello-world.git

İlk addım Quarkus layihəsi yaratmaqdır. Quarkus.io-dan heç vaxt istifadə etməmisinizsə, qorxmayın - bu asandır. Siz sadəcə olaraq layihədə istifadə etmək istədiyiniz komponentləri (RestEasy, Hibernate, Amazon SQS, Camel və s.) seçirsiniz, sonra Quarkus özü heç bir iştirakınız olmadan maven arxetipini qurur və hər şeyi github-a qoyur. Yəni, siçanın sözün əsl mənasında bir klik - və işiniz bitdi. Buna görə də biz Quarkusu sevirik.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

"Salam Dünya"mızı konteynerləşdirilmiş təsvirə çevirməyin ən asan yolu, bütün lazımi işləri görəcək Docker üçün quarkus-maven genişləndirmələrindən istifadə etməkdir. Quarkusun gəlişi ilə bu, həqiqətən də asan və sadə oldu: konteyner-image-docker uzantısını əlavə edin və siz maven əmrləri ilə şəkillər yarada bilərsiniz.

./mvnw quarkus:add-extension -Dextensions=”container-image-docker”

Və nəhayət, Maven istifadə edərək imicimizi qururuq. Nəticədə, mənbə kodumuz artıq konteyner işləmə müddətində işlədilə bilən hazır konteyner şəklinə çevrilir.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

./mvnw -X clean package -Dquarkus.container-image.build=true

Əslində, hamısı budur, indi siz konteyneri docker run əmri ilə işlədə bilərsiniz, ona daxil olmaq üçün xidmətimizi 8080 portuna uyğunlaşdıra bilərsiniz.

docker run -i — rm -p 8080:8080 gcolman/quarkus-hello-world

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Konteyner nümunəsi işə salındıqdan sonra, xidmətimizin işlədiyini curl əmri ilə yoxlamaq qalır:

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Beləliklə, hər şey işləyir və həqiqətən asan və sadə idi.

Addım 2 - Konteynerimizi konteyner təsviri anbarına göndərin

Hələlik, yaratdığımız şəkil yerli konteyner anbarımızda yerli olaraq saxlanılır. Bu şəkli KUK mühitimizdə istifadə etmək istəyiriksə, o zaman onu başqa bir depoya yerləşdirməliyik. Kubernetes-də bu xüsusiyyətlər yoxdur, ona görə də biz dockerhub-dan istifadə edəcəyik. Çünki, birincisi, pulsuzdur, ikincisi, (demək olar ki,) hamı bunu edir.

Bu da çox sadədir və burada yalnız dockerhub hesabı lazımdır.

Beləliklə, biz dockerhub quraşdırırıq və şəklimizi ora göndəririk.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Addım 3 - Kubernetes-i işə salın

"Salam Dünya"mızı idarə etmək üçün kubernet konfiqurasiyasını bir araya gətirməyin bir çox yolu var, lakin biz onlardan ən sadəindən istifadə edəcəyik, çünki biz belə insanlarıq ...

Əvvəlcə minikube klasterinə başlayırıq:

minikube start

Addım 4 - Konteyner Şəkilimizin Yerləşdirilməsi

İndi kodumuzu və konteyner şəklimizi kubernetes konfiqurasiyasına çevirməliyik. Başqa sözlə, bizə dockerhub-da konteyner şəklimizi göstərən pod və yerləşdirmə tərifinə ehtiyacımız var. Bunu etməyin ən asan yollarından biri şəkilimizə işarə edən yerləşdirmə yarat əmrini işə salmaqdır:

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

kubectl create deployment hello-quarkus — image =gcolman/quarkus-hello-world:1.0.0-SNAPSHOT

Bu əmrlə biz COOK-a konteyner şəklimiz üçün pod spesifikasiyasını ehtiva edən yerləşdirmə konfiqurasiyası yaratmağı söylədik. Bu əmr bu konfiqurasiyanı minikube klasterimizə də tətbiq edəcək və konteyner şəklimizi endirəcək və klasterdə pod işlədəcək yerləşdirmə yaradacaq.

Addım 5 - xidmətimizə girişi açın

İndi yerləşdirilmiş konteyner şəklimiz olduğundan, əslində kodumuzda proqramlaşdırılmış bu Restful xidmətinə xarici girişi necə konfiqurasiya etmək barədə düşünməyin vaxtı gəldi.

Burada bir çox yol var. Məsələn, xidmətlər və son nöqtələr kimi uyğun Kubernetes komponentlərini avtomatik yaratmaq üçün ifşa əmrindən istifadə edə bilərsiniz. Əslində, yerləşdirmə obyektimiz üçün ifşa əmrini yerinə yetirməklə bunu edəcəyik:

kubectl expose deployment hello-quarkus — type=NodePort — port=8080

Bir anlıq ifşa əmrinin “-type” variantı üzərində dayanaq.

Xidmətimizi işə salmaq üçün lazım olan komponentləri ifşa etdikdə və yaratdıqda, başqa şeylərlə yanaşı, proqram təminatı ilə müəyyən edilmiş şəbəkəmizin içərisində oturan salam-kvarkus xidmətinə xaricdən qoşula bilməliyik. Və parametr növü trafiki həmin şəbəkəyə yönləndirmək üçün yük balanslaşdırıcıları kimi şeylər yaratmağa və birləşdirməyə imkan verir.

Məsələn, yazmaq type=LoadBalancer, biz Kubernetes klasterimizə qoşulmaq üçün ictimai bulud yükü balanslaşdırıcısını avtomatik işə salırıq. Bu, əlbəttə ki, əladır, lakin başa düşməlisiniz ki, belə bir konfiqurasiya xüsusi ictimai buludla sıx bağlı olacaq və onu müxtəlif mühitlərdə Kubernetes nümunələri arasında ötürmək daha çətin olacaq.

Bizim nümunəmizdə type=NodePort, yəni xidmətimizə zəng qovşağın IP ünvanı və port nömrəsi ilə gedir. Bu seçim heç bir ictimai buluddan istifadə etməməyə imkan verir, lakin bir sıra əlavə addımlar tələb edir. Əvvəlcə öz yük balanslaşdırıcınıza ehtiyacınız var, ona görə də biz NGINX yük balanslaşdırıcısını klasterimizdə yerləşdirəcəyik.

Addım 6 - Yük balanslaşdırıcısını qurun

minikube, giriş nəzarətçiləri kimi xarici giriş üçün lazım olan komponentləri yaratmağı asanlaşdıran bir sıra platforma xüsusiyyətlərinə malikdir. Minikube Nginx giriş nəzarətçisi ilə birlikdə gəlir və etməli olduğumuz tək şey onu aktivləşdirmək və konfiqurasiya etməkdir.

minikube addons enable ingress

İndi yalnız bir əmrlə minikube klasterimizdə işləyəcək Nginx giriş nəzarətçisi yaradacağıq:

ingress-nginx-controller-69ccf5d9d8-j5gs9 1/1 Running 1 33m

Addım 7 - Girişi qurun

İndi biz Nginx giriş nəzarətçisini salam-kvarkus sorğularını qəbul etmək üçün konfiqurasiya etməliyik.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Və nəhayət, bu konfiqurasiyanı tətbiq etməliyik.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

kubectl apply -f ingress.yml

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Bütün bunları öz maşınımızda etdiyimiz üçün minikube-mizə http sorğularını NGINX yük balanslaşdırıcısına yönəltmək üçün sadəcə olaraq nodeumuzun IP ünvanını /etc/hosts faylına əlavə edirik.

192.168.99.100 hello-quarkus.info

Budur, indi minikube xidmətimiz Nginx giriş nəzarətçisi vasitəsilə xaricdən mövcuddur.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Yaxşı, bu asan idi, elə deyilmi? Yoxsa çox deyil?

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

OpenShift-də işləyin (kod hazır konteynerlər)

İndi gəlin bunun Red Hat OpenShift Konteyner Platformasında (OCP) necə edildiyinə baxaq.

Minikube vəziyyətində olduğu kimi, biz Koda Hazır Konteynerlər (CRC) şəklində tək düyünlü OpenShift klasteri olan bir sxem seçirik. Əvvəllər minishift adlanırdı və OpenShift Origin layihəsinə əsaslanırdı, indi isə CRC-dir və Red Hat-ın OpenShift Konteyner Platforması üzərində qurulub.

Budur, üzr istəyirik, "OpenShift əladır!"

Əvvəlcə OpenShift-də inkişafın Kubernetes-dəki inkişafdan heç bir fərqi olmadığını yazmağı düşündük. Və əslində, belədir. Ancaq bu yazını yazarkən, OpenShift olmadıqda nə qədər lazımsız hərəkətlər etməli olduğunuzu xatırladıq və buna görə də, yenə də gözəldir. Biz hər şeyin asan olmasını sevirik və minikube ilə müqayisədə nümunəmizi OpenShift-də yerləşdirmək və işə salmağın nə qədər asan olması bizi bu yazını yazmağa ruhlandırdı.

Gəlin prosesi nəzərdən keçirək və nə etməli olduğumuzu görək.

Beləliklə, minikube nümunəsində biz Docker ilə başladıq... Gözləyin, artıq bizə Docker-in maşında quraşdırılmasına ehtiyac yoxdur.

Bizə yerli git lazım deyil.
Və Maven lazım deyil.
Və əl ilə konteyner şəkli yaratmağa ehtiyac yoxdur.
Və konteyner şəkillərinin hər hansı bir anbarını axtarmaq lazım deyil.
Sizə giriş nəzarətçisi quraşdırmaq lazım deyil.
Həm də girişi konfiqurasiya etmək lazım deyil.

Başa düşürsən? Proqramımızı OpenShift-də yerləşdirmək və işə salmaq üçün yuxarıda göstərilənlərin heç birinə ehtiyac yoxdur. Və prosesin özü belədir.

Addım 1 – OpenShift Klasterinizin işə salınması

Red Hat-dan Kod Hazır Konteynerlərdən istifadə edirik, bu, mahiyyətcə eyni Minikubedir, lakin yalnız tam tək qovşaqlı Openshift klasteri ilə.

crc start

Addım 2 - Tətbiqi OpenShift Cluster-də qurun və yerləşdirin

Məhz bu addımda OpenShift-in sadəliyi və rahatlığı özünü bütün şöhrəti ilə büruzə verir. Bütün Kubernetes paylamalarında olduğu kimi, klasterdə tətbiqi işə salmağın bir çox yollarımız var. Və KUK vəziyyətində olduğu kimi, biz xüsusi olaraq ən sadəini seçirik.

OpenShift həmişə konteynerləşdirilmiş proqramların yaradılması və işlədilməsi üçün platforma kimi qurulmuşdur. Konteynerlərin tikintisi həmişə bu platformanın ayrılmaz hissəsi olub, buna görə də müvafiq tapşırıqlar üçün əlavə Kubernetes resursları var.

Mənbəmizi (kod və ya ikili faylları) götürmək və onu OpenShift klasterində işləyən konteynerləşdirilmiş təsvirə çevirmək üçün bir neçə fərqli yol olan OpenShift-in Mənbə 2 Şəkil (S2I) prosesindən istifadə edəcəyik.

Bunun üçün bizə iki şey lazımdır:

  • Git deposunda olan mənbə kodumuz
  • Qurucu-imici, onun əsasında montaj aparılacaq.

Həm Red Hat, həm də cəmiyyət tərəfindən qorunan bir çox belə şəkillər var və mən Java proqramı hazırladığım üçün biz OpenJDK görüntüsündən istifadə edəcəyik.

Siz həm OpenShift Developer qrafik konsolundan, həm də komanda xəttindən S2I quruluşunu işlədə bilərsiniz. Biz qurucu şəklini və mənbə kodumuzu haradan əldə edəcəyimizi bildirən new-app əmrindən istifadə edəcəyik.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

oc new-app registry.access.redhat.com/ubi8/openjdk-11:latest~https://github.com/gcolman/quarkus-hello-world.git

Budur, tətbiqimiz yaradıldı. Bunu edərkən, S2I prosesi aşağıdakıları etdi:

  • Tətbiqin qurulması ilə bağlı hər cür şeylər üçün xidmət qurma podu yaratdı.
  • OpenShift Build konfiqurasiyası yaradıldı.
  • Qurucu şəklini daxili OpenShift docker reyestrinə endirdim.
  • Yerli depoya klonlanmış "Salam Dünya".
  • Orada bir maven pom olduğunu gördüm və buna görə proqramı maven ilə tərtib etdi.
  • Tərtib edilmiş Java proqramını ehtiva edən yeni konteyner şəkli yaratdı və bu şəkli daxili konteyner reyestrinə yerləşdirin.
  • Pod, xidmət və s. üçün spesifikasiyaları olan Kubernetes Deployment yaratdı.
  • Yerləşdirmə konteyner şəkli işə salındı.
  • Xidmət qurğusu silindi.

Bu siyahıda çox şey var, amma əsas odur ki, bütün quruluş yalnız OpenShift daxilində baş verir, daxili Docker reyestri OpenShift daxilindədir və qurma prosesi bütün Kubernetes komponentlərini yaradır və onları klasterdə işlədir.

Konsolda S2I-nin işə salınmasını vizual olaraq izləyirsinizsə, quraşdırma zamanı quraşdırma podunun necə işə salındığını görə bilərsiniz.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

İndi isə inşaatçı podunun qeydlərinə nəzər salaq: birincisi, orada maven-in öz işini necə yerinə yetirdiyini və java tətbiqimizi qurmaq üçün asılılıqları endirdiyini görə bilərsiniz.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Maven quruluşu tamamlandıqdan sonra konteyner təsvirinin qurulmasına başlanılır və sonra bu qurulmuş şəkil daxili depoya göndərilir.

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Hər şey, montaj prosesi tamamlandı. İndi gəlin əmin edək ki, tətbiqimizin podları və xidmətləri klasterdə başlayıb.

oc get service

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Hamısı budur. Və yalnız bir komanda var. Bizim etməmiz lazım olan tək şey bu xidməti kənardan giriş üçün ifşa etməkdir.

Addım 3 - xidmətin kənardan giriş üçün açıq olmasını təmin edin

KUK vəziyyətində olduğu kimi, OpenShift platformasında da "Salam Dünya"mıza xarici trafiki klaster daxilindəki xidmətə yönləndirmək üçün marşrutlaşdırıcı lazımdır. OpenShift-də bu, çox asanlaşdırır. Birincisi, HAProxy marşrutlaşdırma komponenti standart olaraq klasterdə quraşdırılmışdır (eyni NGINX-ə dəyişdirilə bilər). İkincisi, köhnə Kubernetes-də Ingress obyektlərini xatırladan Marşrutlar adlı xüsusi və yüksək konfiqurasiya edilə bilən resurslar var (əslində, OpenShift-in Marşrutları indi OpenShift-də istifadə edilə bilən Ingress obyektlərinin dizaynına böyük təsir göstərmişdir) , lakin bizim üçün "Salam" Dünya" və demək olar ki, bütün digər hallarda standart Marşrut əlavə konfiqurasiya olmadan bizim üçün kifayətdir.

“Salam Dünya” üçün yönləndirilə bilən FQDN yaratmaq üçün (bəli, OpenShiift-in xidmət adları üzrə marşrutlaşdırma üçün öz DNS-si var), biz sadəcə xidmətimizi ifşa edirik:

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

oc expose service quarkus-hello-world

Yeni yaradılmış Marşruta baxsanız, FQDN və digər marşrutlaşdırma məlumatlarını orada tapa bilərsiniz:

oc get route

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Və nəhayət, xidmətimizə brauzerdən daxil oluruq:

Bağışlayın, OpenShift, biz sizi kifayət qədər qiymətləndirmədik və sizi normal qəbul etdik

Ancaq indi həqiqətən asan idi!

Biz Kubernetes və bu texnologiyanın sizə imkan verdiyi hər şeyi, həmçinin sadəliyi və yüngüllüyü sevirik. Kubernetes paylanmış, miqyaslana bilən konteynerləri idarə etmək üçün inanılmaz dərəcədə asanlaşdırmaq üçün nəzərdə tutulmuşdur, lakin onun sadəliyi bu gün tətbiqləri istehsala gətirmək üçün artıq kifayət deyil. Zamanla ayaqlaşan və tərtibatçı mərkəzli Kubernetes təklif edən OpenShift burada işə düşür. S2I, ODI, Developer Portal, OpenShift Operator Framework, IDE inteqrasiyası, Developer Kataloqları, Helm inteqrasiyası, monitorinqi və bir çox başqa alətlərin yaradılması da daxil olmaqla, OpenShift platformasını xüsusi olaraq tərtibatçı üçün uyğunlaşdırmaq üçün çox səy sərf edilmişdir.

Ümid edirik ki, bu məqalə sizin üçün maraqlı və faydalı oldu. Siz portalda OpenShift platformasında inkişaf üçün faydalı olan əlavə resurslar, materiallar və başqa şeylər tapa bilərsiniz Red Hat Tərtibatçıları.

Mənbə: www.habr.com

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