Кешіріңіз, OpenShift, біз сізді жеткілікті бағаламадық және сізді әдеттегідей қабылдадық

Бұл жазбаның жазылу себебі біздің қызметкерлер клиенттермен Kubernetes қолданбасын әзірлеу және OpenShift-те осындай әзірлеудің ерекшеліктері туралы көп сөйлесті.

Кешіріңіз, OpenShift, біз сізді жеткілікті бағаламадық және сізді әдеттегідей қабылдадық

Біз әдетте Kubernetes жай ғана Кубернетес, ал OpenShift қазірдің өзінде Microsoft AKS немесе Amazon EKS сияқты Kubernetes платформасы деген тезистен бастаймыз. Бұл платформалардың әрқайсысының белгілі бір мақсатты аудиторияға бағытталған өзіндік артықшылықтары бар. Осыдан кейін әңгіме нақты платформалардың күшті және әлсіз жақтарын салыстыруға ауысады.

Жалпы, біз бұл постты «Тыңдаңыздар, OpenShift-те немесе AKS-те, EKS-те, кейбір пайдаланушы Kubernetes-те немесе кез келген Kubernetes-те кодты қай жерде іске қосу маңызды емес» деген қорытындымен жазуды ойладық. (қысқалық үшін оны КУК деп атаймыз) «Бұл жерде де, жерде де өте қарапайым».

Содан кейін біз ең қарапайым «Сәлем әлемін» алып, оның үлгісін KUC пен Red Hat OpenShift контейнерлік платформасының (бұдан әрі, OCP немесе жай OpenShift) арасындағы жалпы және айырмашылығы неде екенін көрсету үшін пайдалануды жоспарладық.

Дегенмен, біз осы жазбаны жазған кезде, біз OpenShift-ті ұзақ уақыт бойы қолдануға үйренгенімізді түсіндік, сондықтан оның қалай өсіп, жай ғана Kubernetes дистрибуциясына айналған таңғажайып платформаға айналғанын түсінбей қалдық. Біз OpenShift-тің жетілгендігі мен қарапайымдылығын кәдімгідей қабылдап, оның жарқырауын ұмытып кетеміз.

Жалпы, белсенді өкінудің уақыты келді, енді біз KUK пен OpenShift-те «Сәлем әлемінің» іске қосылуын кезең-кезеңімен салыстырамыз және біз мұны мүмкіндігінше объективті түрде жасаймыз (кейде көрсету арқылы ғана емес, сонымен қатар пәнге жеке қатынасы). Егер сізді осы мәселе бойынша таза субъективті пікір қызықтырса, онда сіз оны оқи аласыз мұнда (EN). Және бұл постта біз фактілерге және тек фактілерге сүйенетін боламыз.

Кластерлер

Сонымен, біздің «Сәлем әлемі» кластерлерді қажет етеді. Біз серверлерге, регистрлерге, желілерге, деректерді тасымалдауға және т. Тиісінше, біз қарапайым бір түйінді кластерді таңдаймыз Миникубе (KUK үшін) және Кодқа дайын контейнерлер (OpenShift кластері үшін). Бұл екі опцияны орнату өте оңай, бірақ ноутбукта өте көп ресурстарды қажет етеді.

Кешіріңіз, OpenShift, біз сізді жеткілікті бағаламадық және сізді әдеттегідей қабылдадық

KUK-e бойынша құрастыру

Мәселен, барайық.

1-қадам – контейнер кескінін құру

Миникубеге «Сәлем әлемін» орналастырудан бастайық. Мұны істеу үшін сізге қажет:

  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 кеңейтімдерін пайдалану. Кваркустың пайда болуымен бұл өте оңай және қарапайым болды: контейнер-имидж-докер кеңейтімін қосыңыз және сіз 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 іске қосыңыз

«Сәлем әлемін» іске қосу үшін 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

Expose пәрменінің «-type» опциясын қарастырайық.

Қызметімізді іске қосу үшін қажетті құрамдастарды ашқанда және жасағанда, біз басқа нәрселермен қатар, бағдарламалық жасақтамамен анықталған желіміздің ішінде орналасқан hello-quarkus қызметіне сырттан қосыла алуымыз керек. Және параметр түрі бізге трафикті осы желіге бағыттау үшін жүктеме теңгергіштері сияқты нәрселерді жасауға және қосуға мүмкіндік береді.

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

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

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

minikube жүйесінде кіру контроллері сияқты сыртқы қол жетімді құрамдастарды жасауды жеңілдететін бірқатар платформа функциялары бар. Minikube Nginx кіру контроллерімен бірге жеткізіледі және бізге тек оны қосу және конфигурациялау ғана қалады.

minikube addons enable ingress

Енді біз Nginx кіру контроллерін бір ғана пәрменмен жасаймыз, ол біздің minikube кластерінде жұмыс істейді:

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/ хосттар файлына қосамыз.

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 болмаған кезде қанша қосымша қозғалыстар жасау керектігін еске түсірдік, сондықтан бұл тағы да керемет. Біз мұны бәрі оңай орындағанын жақсы көреміз және біздің мысалды Minikube-мен салыстырғанда OpenShift жүйесінде орналастыру және іске қосу қаншалықты оңай екендігі бізді осы жазбаны жазуға итермеледі.

Процедурадан өтіп, не істеу керек екенін көрейік.

Сонымен, minikube мысалында біз Docker-тен бастадық... Күте тұрыңыз, бізге енді машинада орнатылған Docker қажет емес.

Бізге жергілікті гит қажет емес.
Ал Мавен қажет емес.
Және қолыңызбен контейнер кескінін жасаудың қажеті жоқ.
Сізге контейнерлік кескіндердің репозиторийін іздеудің қажеті жоқ.
Және кіру контроллерін орнатудың қажеті жоқ.
Сондай-ақ кіруді конфигурациялаудың қажеті жоқ.

Түсінесің, иә? Қолданбамызды OpenShift жүйесінде орналастыру және іске қосу үшін жоғарыда аталғандардың ешқайсысы қажет емес. Ал процестің өзі осылай көрінеді.

1-қадам – OpenShift кластерін іске қосыңыз

Біз Red Hat-тен алынған Code Ready контейнерлерін қолданамыз, ол негізінен бірдей Minikube, бірақ тек толыққанды бір түйінді Openshift кластері бар.

crc start

2-қадам – OpenShift кластеріне қолданбаны құрастырыңыз және орналастырыңыз

Дәл осы қадамда OpenShift-тің қарапайымдылығы мен ыңғайлылығы оның барлық даңқымен ашылады. Барлық Kubernetes дистрибутивтері сияқты, бізде кластерде қолданбаны іске қосудың көптеген жолдары бар. Және, KUK жағдайындағыдай, біз ең қарапайымды таңдаймыз.

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 құрастыру конфигурациясын жасады.
  • Мен құрастырушы кескінін ішкі 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 нысандарының дизайнына үлкен әсер етті) , бірақ біздің «Сәлем әлемі» үшін , және барлық дерлік басқа жағдайларда стандартты Маршрут бізге қосымша конфигурациясыз жеткілікті.

«Сәлем әлемі» үшін бағытталатын FQDN жасау үшін (иә, OpenShiift-тің қызмет атаулары бойынша маршруттау үшін өз DNS бар), біз жай ғана қызметімізді көрсетеміз:

Кешіріңіз, OpenShift, біз сізді жеткілікті бағаламадық және сізді әдеттегідей қабылдадық

oc expose service quarkus-hello-world

Жаңадан жасалған Маршрутты қарасаңыз, FQDN және басқа маршруттау туралы ақпаратты сол жерден таба аласыз:

oc get route

Кешіріңіз, OpenShift, біз сізді жеткілікті бағаламадық және сізді әдеттегідей қабылдадық

Соңында, біз браузерден қызметімізге қол жеткіземіз:

Кешіріңіз, OpenShift, біз сізді жеткілікті бағаламадық және сізді әдеттегідей қабылдадық

Бірақ қазір бұл өте оңай болды!

Біз Кубернеттерді және осы технология бізге мүмкіндік беретін барлық нәрсені жақсы көреміз, сонымен қатар қарапайымдылық пен қарапайымдылықты жақсы көреміз. Kubernetes таратылатын, масштабталатын контейнерлердің жұмысын керемет жеңілдету үшін жасалған, бірақ оның қарапайымдылығы бұдан былай қосымшаларды өндіріске енгізу үшін жеткіліксіз. Дәл осы жерде OpenShift уақыт ағымына сай және ең алдымен әзірлеушіге бағытталған Kubernetes ұсынады. OpenShift платформасын әзірлеушіге арнайы бейімдеу үшін көп күш жұмсалды, соның ішінде S2I, ODI, Әзірлеушілер порталы, OpenShift Operator Framework, IDE интеграциясы, Әзірлеушілер каталогтары, Helm интеграциясы, мониторинг және басқалары сияқты құралдарды жасау.

Бұл мақала сіз үшін қызықты және пайдалы болды деп үміттенеміз. Порталдағы OpenShift платформасында қосымша ресурстарды, материалдарды және әзірлеуге пайдалы басқа нәрселерді таба аласыз Red Hat әзірлеушілері.

Ақпарат көзі: www.habr.com

пікір қалдыру