Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Овај пост је написан зато што су наши запослени имали доста разговора са клијентима о развоју апликација на Кубернетес-у и специфичностима таквог развоја на ОпенСхифт-у.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Обично почињемо са тезом да је Кубернетес само Кубернетес, а ОпенСхифт је већ Кубернетес платформа, попут Мицрософт АКС или Амазон ЕКС. Свака од ових платформи има своје предности, усмерене на одређену циљну публику. А након овога, разговор се окреће упоређивању снага и слабости одређених платформи.

Генерално, мислили смо да напишемо овај пост са закључком попут „Слушајте, није важно где да покренете код, на ОпенСхифт или на АКС, на ЕКС, на неком прилагођеном Кубернетес-у или на било ком Кубернетес-у (за краткоћу, назовимо га КУК) "Заиста је једноставно, и тамо и тамо."

Затим смо планирали да узмемо најједноставнији „Хелло Ворлд“ и на његовом примеру покажемо шта је заједничко, а која је разлика између КУЦ-а и Ред Хат ОпенСхифт контејнерске платформе (у даљем тексту ОЦП или једноставно ОпенСхифт).

Међутим, док смо писали овај пост, схватили смо да смо толико дуго навикли да користимо ОпенСхифт да једноставно нисмо схватили како је нарастао и претворио се у невероватну платформу која је постала много више од само Кубернетес дистрибуције. Склони смо да зрелост и једноставност ОпенСхифт-а узимамо здраво за готово и губимо из вида његов сјај.

Генерално, дошло је време за активно покајање и сада ћемо корак по корак упоредити пуштање у рад нашег „Хелло Ворлд“ на КУК-у и на ОпенСхифт-у, и то ћемо учинити што је могуће објективније (па, осим тако што ћемо понекад показати лични однос према предмету). Ако вас занима чисто субјективно мишљење о овом питању, онда га можете прочитати овде (ЕН). И у овом посту ћемо се држати чињеница и само чињеница.

Кластери

Дакле, наш „Хелло Ворлд“ захтева кластере. Одмах ћемо рећи „не“ свим јавним облацима, како не бисмо плаћали сервере, регистре, мреже, пренос података итд. Сходно томе, бирамо једноставан кластер са једним чвором Миникубе (за КУК) и Контејнери спремни за код (за ОпенСхифт кластер). Обе ове опције су заиста једноставне за инсталирање, али ће захтевати доста ресурса на вашем лаптопу.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Скупштина на КУК-е

Па идемо.

Корак 1 – изградња имиџа нашег контејнера

Почнимо са постављањем нашег „Хелло Ворлд“ у миникубе. Да бисте то урадили, требаће вам:

  1. 1. Доцкер је инсталиран.
  2. 2. Гит инсталиран.
  3. 3. Инсталиран Мавен (заправо, овај пројекат користи бинарни фајл мвнв, тако да можете и без њега).
  4. 4. Заправо, сам извор, тј. клон спремишта гитхуб.цом/гцолман/куаркус-хелло-ворлд.гит

Први корак је креирање Куаркус пројекта. Немојте се плашити ако никада нисте радили са Куаркус.ио - лако је. Ви само изаберете компоненте које желите да користите у пројекту (РестЕаси, Хибернате, Амазон СКС, Цамел, итд.), а онда сам Куаркус, без икаквог вашег учешћа, конфигурише мавен архетип и ставља све на гитхуб. То јест, буквално један клик миша и готови сте. Због тога волимо Куаркус.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Најлакши начин да изградите наш „Хелло Ворлд“ у слику контејнера је да користите екстензије куаркус-мавен за Доцкер, које ће обавити сав потребан посао. Са појавом Куаркуса, ово је постало заиста лако и једноставно: додајте проширење контејнер-имаге-доцкер и можете да креирате слике користећи мавен команде.

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

Коначно, градимо нашу слику користећи Мавен. Као резултат, наш изворни код се претвара у готову слику контејнера која се већ може покренути у окружењу рунтиме контејнера.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

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

То је све, сада можете покренути контејнер помоћу доцкер рун команде, мапирајући наш сервис на порт 8080 тако да му се може приступити.

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

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Након што се инстанца контејнера покрене, остаје само да проверите командом цурл да ли је наша услуга покренута:

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Дакле, све функционише и било је заиста лако и једноставно.

Корак 2 – пошаљите наш контејнер у складиште слика контејнера

За сада, слика коју смо креирали се чува локално, у нашем локалном складишту контејнера. Ако желимо да користимо ову слику у нашем ЦООК окружењу, онда је морамо ставити у неко друго спремиште. Кубернетес нема такве карактеристике, па ћемо користити доцкерхуб. Јер, прво, бесплатно је, а друго, (скоро) сви то раде.

Ово је такође веома једноставно и све што вам треба је доцкерхуб налог.

Дакле, инсталирамо доцкерхуб и тамо шаљемо нашу слику.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Корак 3 - покрените Кубернетес

Постоји много начина да саставите кубернетес конфигурацију за покретање нашег „Хелло Ворлд“, али ми ћемо користити најједноставнији од њих, такви смо ми...

Прво, покренимо миникубе кластер:

minikube start

Корак 4 - поставите слику нашег контејнера

Сада треба да конвертујемо наш код и слику контејнера у кубернетес конфигурације. Другим речима, потребна нам је дефиниција под и имплементације која указује на нашу слику контејнера на доцкерхуб-у. Један од најлакших начина да то урадите је да покренете команду креирања која указује на нашу слику:

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

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

Овом командом смо рекли нашем ЦОО-у да креира конфигурацију за примену, која треба да садржи спецификацију под за нашу слику контејнера. Ова команда ће такође применити ову конфигурацију на наш миникубе кластер и креирати примену која ће преузети слику нашег контејнера и покренути под у кластеру.

Корак 5 – отворите приступ нашој услузи

Сада када имамо распоређену слику контејнера, време је да размислимо о томе како да конфигуришемо екстерни приступ овој услузи Рестфул, која је, у ствари, програмирана у нашем коду.

Овде постоји много начина. На пример, можете користити команду екпосе да аутоматски креирате одговарајуће Кубернетес компоненте, као што су услуге и крајње тачке. Заправо, ово је оно што ћемо урадити тако што ћемо извршити команду екпосе за наш објекат имплементације:

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

Хајде да одвојимо тренутак да погледамо опцију "-типе" команде екпосе.

Када изложимо и креирамо компоненте неопходне за покретање наше услуге, ми, између осталог, морамо да будемо у могућности да се повежемо споља са хелло-куаркус услугом, која се налази унутар наше софтверски дефинисане мреже. И параметар тип омогућава нам да креирамо и повежемо ствари као што су балансери оптерећења за усмеравање саобраћаја на ову мрежу.

На пример, писањем типе=ЛоадБаланцер, аутоматски обезбеђујемо балансер оптерећења у јавном облаку за повезивање са нашим Кубернетес кластером. Ово је, наравно, одлично, али морате да схватите да ће таква конфигурација бити стриктно везана за одређени јавни облак и да ће бити теже преносити између Кубернетес инстанци у различитим окружењима.

У нашем примеру типе=НодеПорт, односно нашој услузи се приступа преко ИП адресе и броја порта чвора. Ова опција вам омогућава да не користите јавне облаке, али захтева низ додатних корака. Прво, потребан вам је сопствени балансер оптерећења, тако да ћемо применити НГИНКС балансер оптерећења у нашем кластеру.

Корак 6 - инсталирајте балансер оптерећења

миникубе има бројне функције платформе које олакшавају креирање екстерно доступних компоненти, као што су улазни контролери. Миникубе долази у пакету са Нгинк улазним контролером и све што треба да урадимо је да га омогућимо и конфигуришемо.

minikube addons enable ingress

Сада ћемо креирати Нгинк улазни контролер са само једном командом, која ће радити унутар нашег миникубе кластера:

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

Корак 7 – Подешавање улаза

Сада морамо да конфигуришемо Нгинк улазни контролер тако да прихвата хелло-куаркус захтеве.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

И на крају, морамо да применимо ову конфигурацију.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

kubectl apply -f ingress.yml

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Пошто све ово радимо на сопственом рачунару, једноставно додајемо ИП адресу нашег чвора у /етц/ хостс датотеку да бисмо усмерили хттп захтеве нашем миникубеу до НГИНКС балансера оптерећења.

192.168.99.100 hello-quarkus.info

То је то, сада је наша миникубе услуга доступна екстерно преко Нгинк ингресс контролера.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Па, то је било лако, зар не? Или не толико?

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Покреће се на ОпенСхифт (контејнери спремни за код)

Сада да видимо како се све ово ради на Ред Хат ОпенСхифт Цонтаинер Платформ (ОЦП).

Као и код миникубе-а, бирамо дизајн ОпенСхифт кластера са једним чвором у облику контејнера спремних за код (ЦРЦ). Раније се звао минисхифт и био је заснован на ОпенСхифт Оригин пројекту, али сада је ЦРЦ и изграђен на Ред Хат-овој ОпенСхифт Цонтаинер Платформи.

Овде, извините, не можемо а да не кажемо: „ОпенСхифт је диван!“

У почетку смо мислили да напишемо да се развој на ОпенСхифт-у не разликује од развоја на Кубернетес-у. А у суштини то је тако. Али у процесу писања овог поста, сетили смо се колико додатних покрета морате да направите када немате ОпенСхифт, и зато је, опет, дивно. Волимо када се све ради лако, а колико је лако наш пример за постављање и покретање на ОпенСхифт у поређењу са миникубеом је оно што нас је подстакло да напишемо овај пост.

Хајде да прођемо кроз процес и видимо шта треба да урадимо.

Дакле, у примеру миникубе, почели смо са Доцкером... Чекај, више нам није потребан Доцкер инсталиран на машини.

И не треба нам локални гит.
А Мавен није потребан.
И не морате да креирате слику контејнера својим рукама.
И не морате да тражите било какво складиште слика контејнера.
И нема потребе за инсталирањем улазног контролера.
А не морате ни да конфигуришете улаз.

Разумете, зар не? Да бисте поставили и покренули нашу апликацију на ОпенСхифт-у, није вам потребно ништа од горе наведеног. А сам процес изгледа овако.

Корак 1 – Покрените свој ОпенСхифт кластер

Користимо Цоде Реади Цонтаинерс компаније Ред Хат, који је у суштини исти Миникубе, али само са пуноправним Опенсхифт кластером са једним чвором.

crc start

Корак 2 – Направите и примените апликацију у ОпенСхифт кластер

Управо на овом кораку једноставност и практичност ОпенСхифт-а се откривају у свој својој слави. Као и код свих Кубернетес дистрибуција, имамо много начина да покренемо апликацију у кластеру. И, као иу случају КУК-а, посебно бирамо најједноставнији.

ОпенСхифт је увек био изграђен као платформа за креирање и покретање контејнерских апликација. Изградња контејнера је одувек била саставни део ове платформе, тако да постоји тона додатних Кубернетес ресурса за повезане задатке.

Користићемо ОпенСхифтов Соурце 2 Имаге (С2И) процес, који има неколико различитих начина да узме наш изворни код (код или бинарне датотеке) и претвори га у контејнерску слику која ради на ОпенСхифт кластеру.

Да бисмо то урадили, потребне су нам две ствари:

  • Наш изворни код је у гит спремишту
  • Слика градитеља на основу које ће се изградња изводити.

Постоји много таквих слика које одржава Ред Хат и на нивоу заједнице, а ми ћемо користити ОпенЈДК слику, па, пошто правим Јава апликацију.

Можете покренути С2И буилд и са ОпенСхифт Девелопер графичке конзоле и са командне линије. Користићемо команду нев-апп, говорећи јој где да добије слику градитеља и наш изворни код.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

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

То је то, наша апликација је креирана. При томе, С2И процес је урадио следеће ствари:

  • Направио је буилд-под услуге за све врсте ствари које се односе на изградњу апликације.
  • Креирао је ОпенСхифт Буилд конфигурацију.
  • Преузео сам слику градитеља у интерни ОпенСхифт доцкер регистар.
  • Клониран "Хелло Ворлд" у локално спремиште.
  • Видео сам да постоји мавен пом, па сам компајлирао апликацију користећи мавен.
  • Направио је нову слику контејнера која садржи компајлирану Јава апликацију и ставио ову слику у интерни регистар контејнера.
  • Направљена Кубернетес имплементација са спецификацијама за под, услугу итд.
  • Почео сам да примењујем слику контејнера.
  • Уклоњен је сервисни буилд-под.

Има много тога на овој листи, али главна ствар је да се цела градња дешава искључиво унутар ОпенСхифт-а, унутрашњи Доцкер регистар је унутар ОпенСхифт-а, а процес изградње креира све Кубернетес компоненте и покреће их у кластеру.

Ако визуелно надгледате покретање С2И у конзоли, можете видети како се склоп за изградњу покреће када се градња заврши.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Сада хајде да погледамо дневнике под буилдер-а: прво, показује како мавен ради свој посао и преузима зависности да би направио нашу јава апликацију.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Након што је мавен градња завршена, почиње изградња слике контејнера, а затим се ова изграђена слика шаље у интерно спремиште.

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

То је то, процес изградње је завршен. Сада хајде да се уверимо да подови и услуге наше апликације раде у кластеру.

oc get service

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

То је све. И само један тим. Све што треба да урадимо је да изложимо ову услугу за приступ споља.

Корак 3 – изложите услугу за приступ споља

Као иу случају КУЦ-а, на ОпенСхифт платформи нашем „Хелло Ворлд“ такође је потребан рутер за усмеравање спољног саобраћаја ка сервису унутар кластера. ОпенСхифт ово чини веома лаким. Прво, компонента ХАПроки рутирања је подразумевано инсталирана у кластер (може се променити у исти НГИНКС). Друго, постоје посебни и веома конфигурабилни ресурси који се зову Роутес и подсећају на Ингресс објекте у добром старом Кубернетес-у (у ствари, ОпенСхифт-ове руте су у великој мери утицале на дизајн Ингресс објеката, који се сада могу користити у ОпенСхифт-у), али за наш „Хелло Ворлд“ , ау скоро свим осталим случајевима довољна нам је стандардна рута без додатне конфигурације.

Да бисмо креирали ФКДН за „Хелло Ворлд“ (да, ОпенСхиифт има сопствени ДНС за рутирање према именима услуга), једноставно ћемо изложити нашу услугу:

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

oc expose service quarkus-hello-world

Ако погледате новокреирану руту, тамо можете пронаћи ФКДН и друге информације о рутирању:

oc get route

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

И коначно, приступамо нашој услузи из претраживача:

Жао ми је, ОпенСхифт, нисмо те довољно ценили и узимали смо те здраво за готово

Али сада је било заиста лако!

Волимо Кубернетес и све што нам ова технологија омогућава, а такође волимо једноставност и лакоћу. Кубернетес је креиран да невероватно поједностави рад дистрибуираних, скалабилних контејнера, али његова једноставност више није довољна за стављање апликација у производњу данас. Овде на сцену ступа ОпенСхифт, који иде у корак са временом и нуди Кубернетес, усмерен првенствено на програмера. Много труда је уложено да би се ОпенСхифт платформа прилагодила посебно за програмера, укључујући креирање алата као што су С2И, ОДИ, Девелопер Портал, ОпенСхифт Оператор Фрамеворк, ИДЕ интеграција, Девелопер Цаталогуес, Хелм интеграција, праћење и многи други.

Надамо се да је овај чланак био занимљив и користан за вас. Додатне ресурсе, материјале и друге ствари корисне за развој можете пронаћи на ОпенСхифт платформи на порталу Ред Хат програмери.

Извор: ввв.хабр.цом

Додај коментар