Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Бул пост биздин кызматкерлердин кардарлар менен Kubernetesте тиркемелерди иштеп чыгуу жана OpenShiftте мындай иштеп чыгуунун өзгөчөлүктөрү жөнүндө көп маектешкендиктен жазылган.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Биз адатта Kubernetes жөн гана Kubernetes деген тезис менен баштайбыз жана OpenShift буга чейин Microsoft AKS же Amazon EKS сыяктуу Kubernetes платформасы. Бул платформалардын ар бири белгилүү бир максаттуу аудиторияга багытталган өзүнүн артыкчылыктарына ээ. Ошондон кийин сүйлөшүү конкреттүү платформалардын күчтүү жана алсыз жактарын салыштырууга өтөт.

Жалпысынан алганда, биз бул постту "Уккула, OpenShiftте же AKSде, EKSде, кандайдыр бир ыңгайлаштырылган Kubernetesте же кайсы болбосун Kubernetesте кодду кайда иштетүү маанилүү эмес" деген тыянак менен жазууну ойлодук. (кыскалык үчүн аны КУК деп коёлу) "Бул жерде да, ал жерде да абдан жөнөкөй."

Андан кийин биз эң жөнөкөй "Салам дүйнөнү" алып, анын мисалын колдонуп, KUC менен Red Hat OpenShift контейнер платформасынын (мындан ары OCP же жөн гана OpenShift) ортосунда эмне жалпы жана кандай айырма бар экенин көрсөтүүнү пландаштырдык.

Бирок, биз бул постту жазып жатып, биз OpenShift-ти колдонууга ушунчалык көп убакыттан бери көнүп калганыбызды түшүндүк, биз анын кантип өсүп, Кубернетес бөлүштүрүүдөн алда канча көп болгон укмуштуудай платформага айланганын түшүнбөй калдык. Биз OpenShiftтин жетилгендигин жана жөнөкөйлүгүн кадимки көрүнүш катары кабыл алып, анын жаркынтыгын унутуп калабыз.

Жалпысынан алганда, жигердүү өкүнүү мезгили келди, эми биз кадам сайын KUK жана OpenShiftте биздин “Салам дүйнөнү” ишке киргизүүнү салыштырып көрөбүз жана биз муну мүмкүн болушунча объективдүү жасайбыз (жакшы, кээде көрсөтүүнү кошпогондо). предметке жеке мамилеси). Эгер сизди бул маселе боюнча таза субъективдүү пикир кызыктырса, анда аны окуй аласыз бул жерде (EN). Ал эми бул постто биз фактыларга жана фактыларга гана таянабыз.

Кластерлер

Ошентип, биздин "Hello World" кластерлерди талап кылат. Серверлерге, реестрлерге, тармактарга, маалыматтарды өткөрүп берүүгө ж. Демек, биз жөнөкөй бир түйүндүү кластерди тандайбыз Minikube (КУК үчүн) жана Даяр коду бар контейнерлер (OpenShift кластери үчүн). Бул эки вариантты тең орнотуу оңой, бирок ноутбукуңузда бир топ ресурстарды талап кылат.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

КУК-э боюнча чогулуш

Ошентип, кеттик.

1-кадам – биздин контейнер сүрөттү түзүү

"Салам дүйнөнү" minikube'ге жайылтуудан баштайлы. Бул үчүн сизге керек болот:

  1. 1. Докер орнотулду.
  2. 2. Git орнотулду.
  3. 3. Орнотулган Maven (чындыгында, бул долбоор mvnw бинардык тутумун колдонот, ансыз да жасай аласыз).
  4. 4. Чынында булактын өзү, б.а. репозиторий клону github.com/gcolman/quarkus-hello-world.git

Биринчи кадам Quarkus долбоорун түзүү болуп саналат. Эгер сиз эч качан Quarkus.io менен иштешпеген болсоңуз, тынчсызданбаңыз - бул оңой. Сиз жөн гана долбоордо колдонгуңуз келген компоненттерди тандайсыз (RestEasy, Hibernate, Amazon SQS, Camel, ж. Башкача айтканда, чычканды бир чыкылдатуу жана сиз бүтүрдүңүз. Ошондуктан биз Кваркусту жакшы көрөбүз.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Биздин "Салам дүйнөнү" контейнер сүрөтүнө куруунун эң оңой жолу - бардык керектүү иштерди жасай турган Docker үчүн quarkus-maven кеңейтүүлөрүн колдонуу. Quarkus пайда болушу менен, бул чындап жеңил жана жөнөкөй болуп калды: контейнер-имидж-докер кеңейтүүсүн кошуңуз жана сиз maven буйруктарын колдонуп сүрөттөрдү түзө аласыз.

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

Акыр-аягы, биз Maven аркылуу биздин сүрөттү курабыз. Натыйжада, биздин баштапкы кодубуз контейнердин иштөө убактысынын чөйрөсүндө иштей турган даяр контейнер сүрөтүнө айланат.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

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

Болгону, азыр сиз контейнерди докер иштетүү буйругу менен баштай аласыз, биздин кызматты 8080 портуна түшүрүп, ага жетүү үчүн.

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

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Контейнердин инстанциясы башталгандан кийин, биздин кызмат иштеп жатканын curl буйругу менен текшерүү гана калды:

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Ошентип, баары иштейт жана бул чынында эле жеңил жана жөнөкөй болду.

2-кадам – биздин контейнерди контейнер сүрөт репозиторийине жөнөтүңүз

Азырынча биз жараткан сүрөт биздин жергиликтүү контейнер сактагычыбызда сакталат. Эгерде биз бул сүрөттү COOK чөйрөбүздө колдонгубуз келсе, анда ал башка репозиторийге жайгаштырылышы керек. Kubernetesте мындай функциялар жок, ошондуктан биз dockerhub колдонобуз. Анткени, биринчиден, бул бекер, экинчиден, (дээрлик) бардыгы жасайт.

Бул да абдан жөнөкөй жана сизге dockerhub эсеби керек.

Ошентип, биз dockerhub орнотуп, сүрөтүбүздү ошол жакка жөнөтөбүз.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

3-кадам – Kubernetesти ишке киргизиңиз

Биздин "Салам дүйнөнү" иштетүү үчүн кубернеттердин конфигурациясын чогултуунун көптөгөн жолдору бар, бирок биз алардын эң жөнөкөйсүн колдонобуз, биз ушундайбыз...

Биринчиден, minikube кластерин ишке киргизели:

minikube start

4-кадам – биздин контейнер сүрөтүн жайылтуу

Эми биз кодубузду жана контейнер сүрөтүбүздү kubernetes конфигурацияларына айландырышыбыз керек. Башкача айтканда, бизге dockerhubдагы контейнер сүрөтүбүздү көрсөткөн подключ жана жайылтуу аныктамасы керек. Муну жасоонун эң оңой жолдорунун бири - биздин сүрөттү көрсөтүп жайгаштыруу буйругун иштетүү:

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

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

Бул буйрук менен биз COOбузга жайгаштыруу конфигурациясын түзүүнү айттык, ал биздин контейнердин сүрөтү үчүн подспекцияны камтышы керек. Бул команда бул конфигурацияны биздин minikube кластерибизге да колдонот жана биздин контейнердин сүрөтүн жүктөп алып, кластерде поддонду ишке киргизген жайгаштырууну түзөт.

5-кадам – биздин кызматка ачык кирүү

Эми бизде жайгаштырылган контейнер сүрөтү бар, бул Restful кызматына тышкы кирүү мүмкүнчүлүгүн кантип конфигурациялоо керектиги жөнүндө ойлонууга убакыт келди, ал чындыгында биздин кодубузда программаланган.

Бул жерде көптөгөн жолдору бар. Мисалы, сиз ачыкка чыгаруу буйругун кызматтар жана акыркы чекиттер сыяктуу ылайыктуу Kubernetes компоненттерин автоматтык түрдө түзүү үчүн колдоно аласыз. Чынында, биз жайгаштыруу объекти үчүн ачыкка чыгаруу буйругун аткаруу менен эмне кылабыз:

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

Келгиле, ачыкка чыгаруу буйругунун "-type" вариантын карап көрөлү.

Кызматыбызды иштетүү үчүн керектүү компоненттерди ачып, түзүп жатканда, биз, башка нерселер менен катар, программалык камсыздоо менен аныкталган тармагыбыздын ичинде жайгашкан hello-quarkus кызматына сырттан туташа алышыбыз керек. Жана параметр түрү Бул тармакка трафикти багыттоо үчүн жүк баланстоочулар сыяктуу нерселерди түзүүгө жана туташтырууга мүмкүндүк берет.

Мисалы, жазуу менен type=LoadBalancer, биз Kubernetes кластерибизге туташуу үчүн жалпы булуттагы жүк балансын автоматтык түрдө камсыздайбыз. Бул, албетте, сонун, бирок сиз мындай конфигурация белгилүү бир коомдук булут менен тыгыз байланышта болорун жана ар кандай чөйрөлөрдөгү Kubernetes инстанцияларынын ортосунда өткөрүү кыйыныраак болорун түшүнүшүңүз керек.

Биздин мисалда type=NodePort, башкача айтканда, биздин кызмат түйүндүн IP дареги жана порт номери аркылуу кире алат. Бул параметр эч кандай коомдук булуттарды колдонбоого мүмкүндүк берет, бирок бир катар кошумча кадамдарды талап кылат. Биринчиден, сизге өзүңүздүн жүк балансыңыз керек, андыктан биз кластерибизде NGINX жүк балансын орнотобуз.

6-кадам – жүк балансын орнотуу

minikube бир катар платформа функцияларына ээ, алар кириш контроллерлору сыяктуу сырттан жеткиликтүү компоненттерди түзүүнү жеңилдетет. Minikube Nginx кириш контроллери менен коштолот жана биз аны иштетип, конфигурациялашыбыз керек.

minikube addons enable ingress

Эми миникубе кластерибиздин ичинде иштей турган бир гана буйрук менен Nginx кириш контроллерин түзөбүз:

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

7-кадам - ​​Кирүүнү орнотуу

Эми биз Nginx кириш контроллерин конфигурациялашыбыз керек, ал салам-кваркус сурамдарын кабыл алат.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Акыр-аягы, биз бул конфигурацияны колдонушубуз керек.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

kubectl apply -f ingress.yml

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Биз мунун баарын өзүбүздүн компьютерибизде жасап жаткандыктан, http суроо-талаптарын биздин minikube NGINX жүк балансына багыттоо үчүн жөн гана түйүнүбүздүн IP дарегин /etc/ hosts файлына кошобуз.

192.168.99.100 hello-quarkus.info

Болду, эми биздин minikube кызматыбыз Nginx кириш контроллери аркылуу сырттан жеткиликтүү.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Ооба, бул оңой эле, туурабы? Же анчалык көп эмеспи?

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

OpenShift'те иштөө (Код даяр контейнерлер)

Эми мунун баары Red Hat OpenShift Контейнер Платформасында (OCP) кантип жасалганын карап көрөлү.

Minikube сыяктуу эле, биз Code Ready Containers (CRC) түрүндө бир түйүндүү OpenShift кластердик дизайнын тандайбыз. Мурда ал minishift деп аталып, OpenShift Origin долбооруна негизделген, бирок азыр ал CRC болуп, Red Hat'тин OpenShift контейнер платформасында курулган.

Бул жерде, кечиресиз, биз: "OpenShift сонун!"

Башында биз OpenShiftдеги өнүгүү Kubernetesтеги өнүгүүдөн эч кандай айырмасы жок деп жазууну ойлогонбуз. Ал эми негизи ушундай. Бирок бул постту жазуу процессинде биз сизде OpenShift жок болгондо канча кошумча кыймылдарды жасоо керек экенин эстедик, ошондуктан бул дагы бир жолу сонун. Баардыгы оңой жасалганда, биз аны жакшы көрөбүз жана миникубеге салыштырмалуу OpenShiftте иштетүү жана иштетүү биздин үлгүбүз канчалык оңой экени бизди бул постту жазууга түрттү.

Келгиле, процессти карап көрөлү жана эмне кылышыбыз керектигин карап көрөлү.

Ошентип, minikube мисалында биз Docker менен баштадык... Күтө туруңуз, бизге Dockerдин машинага орнотулганынын кереги жок.

Ал эми бизге жергиликтүү гиттин кереги жок.
Жана Maven кереги жок.
Жана колуңуз менен контейнердин сүрөтүн жаратуунун кереги жок.
Жана сиз контейнер сүрөттөрүнүн репозиторийлерин издөөнүн кажети жок.
Жана кирүү контроллерин орнотуунун кереги жок.
Ошондой эле киришти конфигурациялоонун кереги жок.

Сиз түшүнөсүз, туурабы? Биздин тиркемени OpenShiftте жайгаштыруу жана иштетүү үчүн жогорудагылардын эч кимиси кереги жок. Ал эми процесстин өзү ушундай көрүнөт.

1-кадам – OpenShift кластериңизди ишке киргизиңиз

Биз Red Hat компаниясынын Code Ready контейнерлерин колдонобуз, ал негизинен бирдей Minikube, бирок толук кандуу бир түйүндүү Openshift кластери менен гана.

crc start

2-кадам – OpenShift кластерине тиркемени түзүп, жайылтыңыз

Дал ушул кадамда OpenShiftтин жөнөкөйлүгү жана ыңгайлуулугу анын бардык даңкы менен ачылат. Бардык Kubernetes бөлүштүрүүлөрү сыяктуу эле, бизде кластерде тиркемени иштетүүнүн көптөгөн жолдору бар. Жана, КУК сыяктуу, биз атайын эң жөнөкөйсүн тандайбыз.

OpenShift ар дайым контейнердик тиркемелерди түзүү жана иштетүү үчүн платформа катары курулган. Контейнер куруу ар дайым бул платформанын ажырагыс бөлүгү болуп келген, ошондуктан тиешелүү тапшырмалар үчүн бир нече тонна кошумча Kubernetes ресурстары бар.

Биз OpenShift'тин Source 2 Image (S2I) процессин колдонобуз, анда биздин булагыбызды (код же бинардык) алып, аны OpenShift кластеринде иштеген контейнердик сүрөткө айландыруунун бир нече ар кандай жолдору бар.

Бул үчүн бизге эки нерсе керек:

  • Биздин баштапкы кодубуз git репозиторийинде
  • Куруучунун образы, анын негизинде куруу жүргүзүлөт.

Red Hat тарабынан да, коомчулуктун деңгээлинде дагы ушундай көптөгөн сүрөттөр бар жана биз Java тиркемесин куруп жаткандыктан, OpenJDK сүрөтүн колдонобуз.

Сиз S2I түзүмүн OpenShift Developer графикалык консолунан да, буйрук сабынан да иштете аласыз. Биз жаңы колдонмо буйругун колдонобуз, ага куруучунун сүрөтүн жана баштапкы кодубузду кайдан алуу керектигин айтабыз.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

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

Болду, биздин тиркеме түзүлдү. Муну менен, S2I процесси төмөнкү нерселерди жасады:

  • Тиркемени курууга байланышкан ар кандай нерселер үчүн кызмат куруу подпусун түздү.
  • OpenShift Build конфигурациясын түздү.
  • Мен куруучунун сүрөтүн ички OpenShift докер реестрине жүктөп алдым.
  • Жергиликтүү репозиторийге клондолгон "Hello World".
  • Мен ал жерде мавен пом бар экенин көрдүм, ошондуктан мен maven аркылуу тиркемени түздүм.
  • Түзүлгөн Java тиркемесин камтыган жаңы контейнер сүрөтү түзүлдү жана бул сүрөттү ички контейнер реестрине салыңыз.
  • Pod, кызмат ж.б. үчүн спецификациялары менен Kubernetes Deployment түзүлдү.
  • Мен контейнер сүрөтүн жайылта баштадым.
  • Кызмат куруу подпускасын алып салды.

Бул тизмеде көп нерсе бар, бирок эң негизгиси, бүт куруу OpenShift ичинде гана ишке ашат, ички Docker реестри OpenShift ичинде жана куруу процесси бардык Kubernetes компоненттерин түзүп, аларды кластерде иштетет.

Эгер сиз консолдо S2I ишке киргизүүнү визуалдык түрдө көзөмөлдөп турсаңыз, куруу аяктагандан кийин куруу подрядынын кантип ишке киргизилгенин көрө аласыз.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Эми куруучунун под журналдарын карап көрөлү: биринчиден, ал maven өз ишин кантип аткарарын жана биздин java тиркемесин түзүү үчүн көз карандылыктарды жүктөй турганын көрсөтөт.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Maven куруу аяктагандан кийин, контейнер сүрөтүн куруу башталат, андан кийин бул курулган сүрөт ички репозиторийге жөнөтүлөт.

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Болду, куруу процесси аяктады. Эми биздин тиркеменин поддондору жана кызматтары кластерде иштеп жатканын текшерип көрөлү.

oc get service

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Баары болду. Жана бир гана команда. Биз эмне кылышыбыз керек, бул кызматты сырттан кирүү үчүн ачыкка чыгаруу.

3-кадам – кызматтын сырттан кирүү мүмкүнчүлүгүн ачуу

KUC сыяктуу эле, OpenShift платформасында биздин "Hello World" да кластердин ичиндеги кызматка тышкы трафикти багыттоо үчүн роутерге муктаж. OpenShift муну абдан жеңил кылат. Биринчиден, HAProxy багыттоо компоненти демейки боюнча кластерге орнотулган (аны ошол эле NGINXге өзгөртүүгө болот). Экинчиден, Маршруттар деп аталган атайын жана өзгөчө ыңгайлаштырылган ресурстар бар жана алар эски Кубернетелердин Ingress объекттерине окшош (чындыгында, OpenShiftтин Маршруттары азыр OpenShiftте колдонула турган Ingress объекттеринин дизайнына чоң таасирин тийгизген) , бирок биздин "Салам дүйнө" үчүн , жана дээрлик бардык башка учурларда, стандарттуу Маршрут бизге кошумча конфигурациясыз жетиштүү.

"Hello World" үчүн багыттоочу FQDN түзүү үчүн (ооба, OpenShiiftтин кызмат аттары боюнча маршрутизациялоо үчүн өзүнүн DNS бар), биз жөн гана кызматыбызды көрсөтөбүз:

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

oc expose service quarkus-hello-world

Жаңы түзүлгөн Маршрутту карасаңыз, анда FQDN жана башка маршруттук маалымат таба аласыз:

oc get route

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Акыр-аягы, биз браузерден биздин кызматка кире алабыз:

Кечиресиз, OpenShift, биз сизди баалай алган жокпуз жана сизди кадимкидей кабыл алдык

Бирок азыр бул чындап оңой эле!

Биз Кубернеттерди жана бул технология бизге мүмкүнчүлүк берген нерселердин бардыгын жакшы көрөбүз, ошондой эле жөнөкөйлүгүн жана жеңилдигин жакшы көрөбүз. Kubernetes бөлүштүрүлгөн, масштабдалуучу контейнерлердин иштешин укмуштуудай жөнөкөйлөтүү үчүн түзүлгөн, бирок анын жөнөкөйлүгү бүгүн тиркемелерди өндүрүшкө киргизүү үчүн жетишсиз. Дал ушул жерде OpenShift иштей баштайт, заманга жараша жана биринчи кезекте иштеп чыгуучуга багытталган Kubernetes сунуштайт. OpenShift платформасын атайын иштеп чыгуучуга ылайыкташтыруу үчүн көп күч жумшалды, анын ичинде S2I, ODI, Иштеп чыгуучулардын порталы, OpenShift операторунун алкактары, IDE интеграциясы, Иштеп чыгуучулардын каталогдору, Helm интеграциясы, мониторинг жана башка көптөгөн куралдарды түзүү.

Бул макала сиз үчүн кызыктуу жана пайдалуу болду деп үмүттөнөбүз. Порталдагы OpenShift платформасында кошумча ресурстарды, материалдарды жана башка пайдалуу нерселерди таба аласыз Red Hat Developers.

Source: www.habr.com

Комментарий кошуу