Ин мақола аз он сабаб навишта шудааст, ки кормандони мо бо муштариён дар бораи таҳияи барномаҳо дар Kubernetes ва мушаххасоти чунин таҳия дар OpenShift сӯҳбатҳои зиёде доштанд.
Мо одатан бо рисола оғоз мекунем, ки Кубернетес танҳо Кубернетес аст ва OpenShift аллакай платформаи Kubernetes аст, ба монанди Microsoft AKS ё Amazon EKS. Ҳар яке аз ин платформаҳо бартариҳои худро доранд, ки ба шунавандагони мушаххас нигаронида шудаанд. Ва пас аз ин, сӯҳбат аллакай ба муқоисаи ҷиҳатҳои қавӣ ва заъфи платформаҳои мушаххас мегузарад.
Умуман, мо фикр кардем, ки ин мақоларо бо чунин натиҷа нависем: "Гӯш кунед, муҳим нест, ки шумо кодро дар куҷо иҷро мекунед, дар OpenShift ё AKS, дар EKS, дар баъзе Kubernetes фармоишӣ, ҳа дар ҳама гуна Kubernetes. (биёед онро ба таври кӯтоҳ КУК меномем) "Ин воқеан оддӣ аст, ҳам дар он ҷо ва ҳам дар он ҷо."
Сипас, мо нақша доштем, ки соддатарин "Салом Ҷаҳон" -ро бигирем ва аз он истифода барем, то нишон диҳем, ки чӣ маъмул аст ва фарқияти байни CMC ва Platform Container Red Hat OpenShift (минбаъд OCP ё танҳо OpenShift).
Аммо, дар ҷараёни навиштани ин паём, мо фаҳмидем, ки мо ба истифодаи OpenShift чунон одат кардаем, ки мо намефаҳмем, ки он чӣ гуна афзоиш ёфтааст ва ба платформаи аҷибе табдил ёфтааст, ки на танҳо як тақсимоти Kubernetes шудааст. Мо майл ба камолот ва соддагии OpenShift-ро ҳамчун як чизи муқаррарӣ қабул мекунем, дар ҳоле ки аз бузургии он нодида мегирем.
Умуман, вақти тавбаи фаъол фаро расидааст ва ҳоло мо зина ба зина ба истифода додани “Салом Ҷаҳон”-и худро дар KUK ва OpenShift муқоиса мекунем ва мо онро то ҳадди имкон объективӣ мекунем (хуб, ба истиснои баъзан нишон додани шахсияти шахсӣ). муносибат ба мавзӯъ). Агар шумо ба андешаи комилан субъективӣ оид ба ин масъала таваҷҷӯҳ дошта бошед, шумо метавонед онро хонед
Кластерҳо
Ҳамин тавр, "Салом Ҷаҳон"-и мо ба кластерҳо ниёз дорад. Биёед танҳо ба ягон абрҳои ҷамъиятӣ "не" бигӯем, то серверҳо, реестрҳо, шабакаҳо, интиқоли маълумот ва ғайра пардохт накунанд. Мувофиқи он, мо кластери оддии як гиреҳро интихоб мекунем
Мачлиси оид ба КУК-е
Пас биёед биравем.
Қадами 1 - Эҷоди тасвири контейнери мо
Биёед бо ҷойгиркунии "Салом Ҷаҳон" -и худро дар minikube оғоз кунем. Ин талаб мекунад:
- 1. Docker насбшуда.
- 2. Git насб карда шудааст.
- 3. Maven насб карда шудааст (воқеан, ин лоиҳа mvnw бинариро истифода мебарад, бинобар ин шумо метавонед бе он кор кунед).
- 4. Воќеан, худи манбаъ, яъне. клони анбор
github.com/gcolman/quarkus-hello-world.git
Қадами аввал эҷоди лоиҳаи Quarkus аст. Агар шумо ҳеҷ гоҳ Quarkus.io-ро истифода накарда бошед, натарсед - ин осон аст. Шумо танҳо ҷузъҳоеро, ки мехоҳед дар лоиҳа истифода баред (RestEasy, Hibernate, Amazon SQS, Camel ва ғайра) интихоб мекунед ва он гоҳ худи Кваркус бе иштироки шумо архетипи maven-ро насб мекунад ва ҳама чизро дар github мегузорад. Яъне, айнан як клики муш - ва шумо тамом шудед. Барои ҳамин мо Кваркусро дӯст медорем.
Роҳи осонтарини сохтани "Салом Ҷаҳон"-и мо ба тасвири контейнерӣ ин истифодаи васеъкуниҳои quarkus-maven барои Docker мебошад, ки тамоми кори заруриро иҷро мекунад. Бо пайдоиши Quarkus, ин воқеан осон ва содда шуд: тамдиди контейнер-image-docker илова кунед ва шумо метавонед бо фармонҳои maven тасвирҳо эҷод кунед.
./mvnw quarkus:add-extension -Dextensions=”container-image-docker”
Ва ниҳоят, мо тасвири худро бо истифода аз Maven месозем. Дар натиҷа, коди сарчашмаи мо ба тасвири контейнери омода табдил меёбад, ки онро аллакай дар вақти кори контейнер иҷро кардан мумкин аст.
./mvnw -X clean package -Dquarkus.container-image.build=true
Дар асл, ин ҳама аст, акнун шумо метавонед контейнерро бо фармони docker run иҷро кунед ва хидмати моро ба порти 8080 харита карда, ба он дастрасӣ пайдо кунед.
docker run -i — rm -p 8080:8080 gcolman/quarkus-hello-world
Пас аз оғоз шудани мисоли контейнер, танҳо тафтиш кардани фармони curl аст, ки хидмати мо кор мекунад:
Ҳамин тавр, ҳама чиз кор мекунад ва он воқеан осон ва содда буд.
Қадами 2 - Контейнери моро ба анбори тасвири контейнер фиристед
Дар айни замон, тасвире, ки мо офаридаем, ба таври маҳаллӣ дар анбори контейнерҳои маҳаллии мо нигоҳ дошта мешавад. Агар мо хоҳем, ки ин тасвирро дар муҳити KUK-и худ истифода барем, пас мо бояд онро дар як анбори дигар ҷойгир кунем. Kubernetes ин хусусиятҳоро надорад, аз ин рӯ мо dockerhub-ро истифода хоҳем бурд. Зеро, аввалан, он ройгон аст ва дуюм, (қариб) ҳама ин корро мекунанд.
Ин ҳам хеле содда аст ва дар ин ҷо танҳо ҳисоби dockerhub лозим аст.
Ҳамин тавр, мо dockerhub насб мекунем ва тасвири худро ба он ҷо мефиристем.
Қадами 3 - Kubernetes-ро оғоз кунед
Роҳҳои зиёде барои якҷоя кардани конфигуратсияи кубернетҳо барои иҷро кардани "Салом Ҷаҳон" вуҷуд доранд, аммо мо соддатаринро истифода хоҳем бурд, зеро мо чунин одамонем ...
Аввалан, мо кластери minikube-ро оғоз мекунем:
minikube start
Қадами 4 - Ҷойгир кардани тасвири контейнери мо
Ҳоло мо бояд код ва тасвири контейнери худро ба конфигуратсияи kubernetes табдил диҳем. Ба ибораи дигар, ба мо як pod ва таърифи ҷойгиркунӣ лозим аст, ки ба тасвири контейнери мо дар dockerhub ишора мекунад. Яке аз роҳҳои осонтарини ин иҷро кардани фармони эҷоди ҷойгиркунӣ бо нишон додани тасвири мо мебошад:
kubectl create deployment hello-quarkus — image =gcolman/quarkus-hello-world:1.0.0-SNAPSHOT
Бо ин фармон, мо ба COOK-и худ гуфтем, ки конфигуратсияи ҷойгиркунӣ созад, ки дар он бояд тавсифи подкаст барои тасвири контейнери мо мавҷуд бошад. Ин фармон инчунин ин конфигуратсияро ба кластери minikube-и мо татбиқ мекунад ва ҷойгиркунӣ эҷод мекунад, ки тасвири контейнери моро зеркашӣ мекунад ва подкастро дар кластер иҷро мекунад.
Қадами 5 - дастрасии кушода ба хидмати мо
Акнун, ки мо як тасвири контейнери ҷойгиршуда дорем, вақти он расидааст, ки дар бораи чӣ гуна танзим кардани дастрасии беруна ба ин хидмати Restful, ки воқеан дар коди мо барномарезӣ шудааст, фикр кунем.
Дар ин ҷо роҳҳои зиёде мавҷуданд. Масалан, шумо метавонед фармони фошкуниро барои ба таври худкор сохтани ҷузъҳои мувофиқи Kubernetes ба монанди хидматҳо ва нуқтаҳо истифода баред. Воқеан, ин аст он чизе ки мо тавассути иҷрои фармони фош барои объекти ҷойгиркунии худ кор хоҳем кард:
kubectl expose deployment hello-quarkus — type=NodePort — port=8080
Биёед дар бораи варианти "-type"-и фармони expose каме таваққуф кунем.
Вақте ки мо ҷузъҳои лозимиро барои иҷрои хидмати мо фош мекунем ва эҷод мекунем, ба мо лозим аст, ки дар байни чизҳои дигар, тавонем аз берун ба хидмати салом-кваркус, ки дар дохили шабакаи нармафзори мо ҷойгир аст, пайваст шавем. Ва параметр намуди ба мо имкон медиҳад, ки чизҳоеро ба мисли тавозуни сарборӣ барои масири трафик ба он шабака эҷод ва пайваст кунем.
Масалан, навиштан type=LoadBalancer, мо ба таври худкор тавозуни сарбории абрии ҷамъиятро барои пайваст шудан ба кластери Kubernetes мо оғоз мекунем. Ин, албатта, олиҷаноб аст, аммо шумо бояд фаҳмед, ки чунин конфигуратсия ба абри мушаххаси ҷамъиятӣ сахт баста мешавад ва интиқоли он дар байни мисолҳои Kubernetes дар муҳитҳои гуногун душвортар хоҳад буд.
Дар мисоли мо навъи = 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-ро барои қабули дархостҳои hello-quarkus танзим кунем.
Ва ниҳоят, мо бояд ин конфигуратсияро татбиқ кунем.
kubectl apply -f ingress.yml
Азбаски мо ин ҳамаро дар мошини худамон иҷро карда истодаем, мо танҳо суроғаи IP-и гиреҳи худро ба файли /etc/hosts илова мекунем, то дархостҳои http-ро ба minikube мо ба мувозинати сарбории NGINX равона кунем.
192.168.99.100 hello-quarkus.info
Ин аст, ҳоло хидмати minikube мо аз берун тавассути контролери вуруди Nginx дастрас аст.
Хуб, ин осон буд, дуруст? Ё ин қадар зиёд нест?
Дар OpenShift иҷро кунед (контейнерҳои тайёри код)
Ва акнун биёед бубинем, ки ин ҳама дар платформаи контейнерии Red Hat OpenShift (OCP) чӣ гуна анҷом дода мешавад.
Тавре ки дар мавриди minikube, мо схемаеро бо кластери як гиреҳи OpenShift дар шакли Containers Ready Code (CRC) интихоб мекунем. Он қаблан minishift номида мешуд ва ба лоиҳаи OpenShift Origin асос ёфтааст, аммо ҳоло он CRC аст ва дар Платформаи контейнерии OpenShift Red Hat сохта шудааст.
Дар ин ҷо, бубахшед, мо наметавонем бигӯем: "OpenShift олиҷаноб аст!"
Дар аввал мо фикр мекардем, ки нависем, ки рушд дар OpenShift аз таҳияи Kubernetes фарқ надорад. Ва дар хакикат хамин тавр аст. Аммо дар ҷараёни навиштани ин паём, мо ба ёд овардем, ки шумо чӣ қадар ҳаракатҳои нолозимро мекунед, вақте ки шумо OpenShift надошта бошед ва аз ин рӯ, боз ҳам зебост. Мо дӯст медорем, ки чизҳо осон бошанд ва ҷойгир кардан ва иҷро кардани намунаи мо дар OpenShift дар муқоиса бо minikube то чӣ андоза осон аст, он чизест, ки моро ба навиштани ин мақола илҳом бахшид.
Биёед равандро аз сар гузаронем ва бубинем, ки чӣ кор кардан лозим аст.
Ҳамин тавр, дар мисоли minikube, мо бо Docker оғоз кардем… Мунтазир бошед, ба мо дигар лозим нест, ки Docker дар мошин насб карда шавад.
Ва мо ба гити маҳаллӣ ниёз надорем.
Ва Maven лозим нест.
Ва ба шумо лозим нест, ки тасвири контейнерро бо дасти худ созед.
Ва ба шумо лозим нест, ки ягон анбори тасвирҳои контейнерро ҷустуҷӯ кунед.
Ва ба шумо лозим нест, ки контролери вурудро насб кунед.
Ва ба шумо низ лозим нест, ки вурудро танзим кунед.
Шумо фаҳмидед? Барои ҷобаҷогузорӣ ва иҷро кардани замимаи мо дар OpenShift, ҳеҷ яке аз чизҳои дар боло зикршуда лозим нест. Ва худи процесс чунин аст.
Қадами 1 - Оғози кластери OpenShift-и шумо
Мо контейнерҳои Code Ready-ро аз Red Hat истифода мебарем, ки аслан як Minikube аст, аммо танҳо бо кластери пурраи як гиреҳи Openshift.
crc start
Қадами 2 - Сохта ва ҷойгиркунии барнома ба кластери OpenShift
Маҳз дар ҳамин қадам соддагӣ ва роҳатии OpenShift бо тамоми ҷалоли худ зоҳир мегардад. Мисли ҳама тақсимоти Kubernetes, мо роҳҳои зиёде барои иҷро кардани барнома дар кластер дорем. Ва, чунон ки дар мавриди КУК, мо махсусан соддатаринро интихоб мекунем.
OpenShift ҳамеша ҳамчун платформа барои сохтан ва иҷрои барномаҳои контейнерӣ сохта шудааст. Сохтани контейнерҳо ҳамеша як қисми ҷудонашавандаи ин платформа буд, аз ин рӯ як қатор захираҳои иловагии Kubernetes барои вазифаҳои мувофиқ мавҷуданд.
Мо раванди Source 2 Image (S2I)-и OpenShift-ро истифода хоҳем бурд, ки дорои якчанд роҳҳои гуногуни гирифтани манбаи мо (рамз ё дуӣ) ва табдил додани он ба тасвири контейнершуда, ки дар кластери OpenShift кор мекунад.
Барои ин ба мо ду чиз лозим аст:
- Рамзи сарчашмаи мо дар анбори git
- Бинокор-обрае, ки дар асоси он монтаж ичро карда мешавад.
Чунин тасвирҳои зиёде мавҷуданд, ки ҳам аз ҷониби Red Hat ва ҳам аз ҷониби ҷомеа нигоҳ дошта мешаванд ва мо тасвири OpenJDK-ро истифода хоҳем бурд, зеро ман як барномаи Java месозам.
Шумо метавонед сохтани S2I-ро ҳам аз консоли графикии OpenShift Developer ва ҳам аз сатри фармон иҷро кунед. Мо фармони нав-барномаро истифода мебарем ва ба он мегӯем, ки тасвири созанда ва рамзи сарчашмаи худро аз куҷо гирифтан мумкин аст.
oc new-app registry.access.redhat.com/ubi8/openjdk-11:latest~https://github.com/gcolman/quarkus-hello-world.git
Ин аст, барномаи мо сохта шудааст. Дар ин ҳолат, раванди S2I корҳои зеринро иҷро кард:
- Барои ҳама гуна чизҳое, ки ба сохтани барнома алоқаманданд, як пойгоҳи хидматрасонӣ сохта шудааст.
- Конфигуратсияи OpenShift Build сохта шуд.
- Ман тасвири созандаро ба феҳристи дохилии OpenShift докер зеркашӣ кардам.
- "Салом Ҷаҳон" ба анбори маҳаллӣ клон карда шудааст.
- Дидам, ки дар он ҷо як мавен пом ҳаст ва аз ин рӯ барномаро бо maven тартиб дод.
- Тасвири контейнери наверо, ки дорои замимаи Java тартиб дода шудааст, эҷод кард ва ин тасвирро ба феҳристи дохилии контейнерҳо ҷойгир кунед.
- Ҷойгиркунии Kubernetes бо мушаххасоти подкаст, хидмат ва ғайра сохта шудааст.
- Тасвири контейнери ҷойгиркунӣ оғоз ёфт.
- Сохтани хидматрасонӣ хориҷ карда шуд.
Дар ин рӯйхат бисёр чизҳо вуҷуд доранд, аммо чизи асосӣ ин аст, ки тамоми сохтмон танҳо дар дохили OpenShift сурат мегирад, феҳристи дохилии Docker дар дохили OpenShift ҷойгир аст ва раванди сохтани ҳама ҷузъҳои Kubernetes эҷод мекунад ва онҳоро дар кластер иҷро мекунад.
Агар шумо ба таври визуалӣ оғози S2I-ро дар консол назорат кунед, шумо метавонед бубинед, ки чӣ гуна поди сохтмон ҳангоми сохтан оғоз мешавад.
Ва акнун биёед ба гузоришҳои поди меъморӣ назар андозем: аввал, дар он ҷо шумо мебинед, ки чӣ тавр maven кори худро иҷро мекунад ва вобастагиҳоро барои сохтани замимаи java-и мо зеркашӣ мекунад.
Пас аз ба итмом расидани сохтани мавен, сохтани тасвири контейнер оғоз мешавад ва сипас ин тасвири сохташуда ба анбори дохилӣ фиристода мешавад.
Ҳама чиз, раванди монтаж анҷом ёфт. Акнун биёед боварӣ ҳосил кунем, ки қадҳо ва хидматҳои замимаи мо дар кластер оғоз шудаанд.
oc get service
Ҳамааш ҳамин. Ва танҳо як даста вуҷуд дорад. Мо танҳо бояд ин хидматро барои дастрасии беруна фош кунем.
Қадами 3 - хидматро барои дастрасӣ аз берун фош кунед
Тавре ки дар мавриди KUK, дар платформаи OpenShift, "Салом Ҷаҳон"-и мо инчунин ба роутер ниёз дорад, то трафики берунаро ба хидмати дохили кластер равона кунад. Дар OpenShift ин корро хеле осон мекунад. Аввалан, ҷузъи масири HAProxy ба таври нобаёнӣ дар кластер насб карда мешавад (онро ба ҳамон NGINX иваз кардан мумкин аст). Дуюм, захираҳои махсус ва хеле танзимшаванда бо номи Маршрутҳо мавҷуданд, ки объектҳои Ingress дар Кубернетҳои кӯҳнаи хубро ба хотир меоранд (воқеан, Роҳҳои OpenShift ба тарҳрезии объектҳои Ingress, ки ҳоло метавонанд дар OpenShift истифода шаванд) таъсири сахт расониданд, аммо барои мо "Салом" Ҷаҳон" ва қариб дар ҳама ҳолатҳои дигар, масири стандартӣ барои мо бидуни конфигуратсияи иловагӣ кофӣ аст.
Барои сохтани FQDN-и масир барои "Салом Ҷаҳон" (бале, OpenShiift DNS-и худро барои масир аз рӯи номҳои хидматҳо дорад), мо танҳо хидмати худро фош мекунем:
oc expose service quarkus-hello-world
Агар шумо ба масири навтаъсис назар кунед, шумо метавонед FQDN ва дигар маълумоти масирро дар он ҷо пайдо кунед:
oc get route
Ва ниҳоят, мо хидмати худро аз браузер дастрас мекунем:
Аммо ҳоло ин дар ҳақиқат осон буд!
Мо Кубернетес ва ҳама чизеро, ки ин технология ба шумо имкон медиҳад, дӯст медорем ва инчунин соддагӣ ва сабукиро дӯст медорем. Kubernetes тарҳрезӣ шудааст, ки контейнерҳои тақсимшаванда ва миқёспазирро ба таври бениҳоят осонтар истифода баранд, аммо соддагии он дигар барои ворид кардани замимаҳо ба истеҳсолот кифоя нест. Ин аст, ки OpenShift ба кор меояд, ки замонро риоя мекунад ва Кубернетҳои ба таҳиякунанда нигаронидашударо пешниҳод мекунад. Барои мутобиқсозии платформаи OpenShift махсусан барои таҳиякунанда, аз ҷумла эҷоди абзорҳо ба монанди S2I, ODI, Портали Developer, OpenShift Operator Framework, ҳамгироии IDE, Каталогҳои таҳиягарон, ҳамгироии Helm, мониторинг ва ғайра кӯшишҳои зиёд сарф карда шуданд.
Мо умедворем, ки ин мақола барои шумо ҷолиб ва муфид буд. Ва шумо метавонед захираҳои иловагӣ, маводҳо ва чизҳои дигареро, ки барои таҳия дар платформаи OpenShift дар портал муфиданд, пайдо кунед
Манбаъ: will.com