Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Bu post yozildi, chunki bizning xodimlarimiz mijozlar bilan Kubernetes-da ilovalarni ishlab chiqish va OpenShift-da bunday ishlanmalarning o'ziga xos xususiyatlari haqida juda ko'p suhbatlar o'tkazdilar.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Biz odatda Kubernetes shunchaki Kubernetes degan tezisdan boshlaymiz va OpenShift allaqachon Microsoft AKS yoki Amazon EKS kabi Kubernetes platformasi. Ushbu platformalarning har biri ma'lum bir maqsadli auditoriyaga qaratilgan o'z afzalliklariga ega. Va shundan so'ng, suhbat muayyan platformalarning kuchli va zaif tomonlarini taqqoslashga aylanadi.

Umuman olganda, biz ushbu postni shunday xulosa bilan yozishni o'yladik: “Quloq soling, kodni qayerda ishga tushirish muhim emas, OpenShift yoki AKS-da, EKS-da, ba'zi maxsus Kubernetes-da yoki boshqa Kubernetes-da. (qisqalik uchun uni KUK deb ataymiz) "Bu erda ham, u erda ham juda oddiy."

Keyin biz eng oddiy "Salom dunyo" ni olishni va uning misolidan KUC va Red Hat OpenShift konteyner platformasi (keyingi o'rinlarda OCP yoki oddiygina OpenShift) o'rtasidagi umumiy va farq nima ekanligini ko'rsatishni rejalashtirdik.

Biroq, biz ushbu postni yozar ekanmiz, biz OpenShift-dan shu qadar uzoq vaqt davomida foydalanishga o'rganib qolganimizni angladik va u qanday o'sib chiqqanini va shunchaki Kubernetes tarqatishdan ko'ra ko'proq bo'lgan ajoyib platformaga aylanganini tushunmadik. Biz OpenShift-ning etukligi va soddaligini odatdagidek qabul qilamiz va uning yorqinligini yo'qotamiz.

Umuman olganda, faol tavba qilish vaqti keldi va endi biz KUK va OpenShift-da "Salom dunyomiz" ning ishga tushirilishini bosqichma-bosqich taqqoslaymiz va buni iloji boricha ob'ektiv qilamiz (yaxshi, ba'zan ko'rsatishdan tashqari). mavzuga shaxsiy munosabat). Agar siz ushbu masala bo'yicha mutlaqo sub'ektiv fikrga qiziqsangiz, uni o'qishingiz mumkin bu yerda (UZ). Va bu postda biz faktlarga va faqat faktlarga yopishib olamiz.

Klasterlar

Shunday qilib, bizning "Salom dunyomiz" klasterlarni talab qiladi. Biz serverlar, registrlar, tarmoqlar, ma'lumotlarni uzatish va hokazolar uchun pul to'lamaslik uchun har qanday ommaviy bulutlarga darhol "yo'q" deb aytamiz. Shunga ko'ra, biz oddiy bitta tugunli klasterni tanlaymiz Minikube (KUK uchun) va Kodga tayyor konteynerlar (OpenShift klasteri uchun). Ushbu ikkala variantni o'rnatish juda oson, lekin noutbukda juda ko'p resurslarni talab qiladi.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

KUK-e da yig'ish

Keling, boraylik.

1-qadam - konteyner tasvirini yaratish

Keling, minikube-da “Salom dunyo” ni o'rnatishdan boshlaylik. Buni amalga oshirish uchun sizga kerak bo'ladi:

  1. 1. Docker o'rnatilgan.
  2. 2. Git o'rnatilgan.
  3. 3. Maven o'rnatildi (aslida bu loyiha mvnw binar tizimidan foydalanadi, shuning uchun siz usiz ham qilishingiz mumkin).
  4. 4. Aslida, manbaning o'zi, ya'ni. ombor kloni github.com/gcolman/quarkus-hello-world.git

Birinchi qadam - Quarkus loyihasini yaratish. Quarkus.io bilan hech qachon ishlamagan bo'lsangiz, xavotirlanmang - bu juda oson. Siz shunchaki loyihada foydalanmoqchi bo'lgan komponentlarni tanlaysiz (RestEasy, Hibernate, Amazon SQS, Camel va boshqalar), so'ngra Quarkusning o'zi sizning ishtirokingizsiz maven arxetipini sozlaydi va hamma narsani github-ga joylashtiradi. Ya'ni, tom ma'noda sichqonchani bir marta bosish va ish tugadi. Shuning uchun biz Quarkusni yaxshi ko'ramiz.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

"Salom dunyomiz" ni konteyner tasviriga yaratishning eng oson yo'li bu barcha kerakli ishlarni bajaradigan Docker uchun quarkus-maven kengaytmalaridan foydalanishdir. Quarkusning paydo bo'lishi bilan bu juda oson va sodda bo'ldi: konteyner-image-docker kengaytmasini qo'shing va siz maven buyruqlari yordamida tasvirlarni yaratishingiz mumkin.

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

Va nihoyat, biz Maven yordamida rasmimizni yaratamiz. Natijada, bizning manba kodimiz allaqachon konteyner ish vaqti muhitida ishga tushirilishi mumkin bo'lgan tayyor konteyner tasviriga aylanadi.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

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

Hammasi shu, endi siz konteynerni docker run buyrug'i bilan ishga tushirishingiz mumkin, unga kirish mumkin bo'lishi uchun xizmatimizni 8080 portiga solishtiring.

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

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Konteyner namunasi ishga tushirilgandan so'ng, xizmatimiz ishlayotganini curl buyrug'i bilan tekshirish qoladi:

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Shunday qilib, hamma narsa ishlaydi va bu juda oson va sodda edi.

2-qadam - konteynerimizni konteyner tasvirlari omboriga yuboring

Hozircha biz yaratgan rasm mahalliy, mahalliy konteyner omborimizda saqlanadi. Agar biz ushbu rasmni COOK muhitida ishlatmoqchi bo'lsak, u boshqa omborga joylashtirilishi kerak. Kubernetes bunday xususiyatlarga ega emas, shuning uchun biz dockerhub-dan foydalanamiz. Chunki, birinchidan, bu bepul, ikkinchidan, (deyarli) hamma buni qiladi.

Bu ham juda oddiy va sizga faqat dockerhub hisobi kerak bo'ladi.

Shunday qilib, biz dockerhub-ni o'rnatamiz va u erga rasmimizni yuboramiz.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

3-qadam – Kubernetes-ni ishga tushiring

"Salom dunyo" ni ishga tushirish uchun kubernet konfiguratsiyasini yig'ishning ko'plab usullari mavjud, ammo biz ulardan eng oddiyidan foydalanamiz, biz shundaymiz...

Birinchidan, minikube klasterini ishga tushiramiz:

minikube start

4-qadam - konteyner tasvirimizni joylashtiring

Endi biz kodimiz va konteyner tasvirimizni kubernet konfiguratsiyasiga aylantirishimiz kerak. Boshqacha qilib aytganda, bizga dockerhub-dagi konteyner tasvirimizga ishora qiluvchi pod va joylashtirish ta'rifi kerak. Buni amalga oshirishning eng oson yo'llaridan biri bizning rasmimizga ishora qiluvchi yaratish yaratish buyrug'ini ishga tushirishdir:

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

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

Ushbu buyruq bilan biz COO ga konteyner tasvirimiz uchun pod spetsifikatsiyasini o'z ichiga olishi kerak bo'lgan joylashtirish konfiguratsiyasini yaratishni aytdik. Ushbu buyruq ushbu konfiguratsiyani minikube klasterimizga ham qo'llaydi va konteyner tasvirimizni yuklab oladigan va klasterdagi podni ishga tushiradigan joylashtirishni yaratadi.

5-qadam – xizmatimizga kirishni oching

Endi bizda o'rnatilgan konteyner tasviri bor, bizning kodimizda dasturlashtirilgan ushbu Restful xizmatiga tashqi kirishni qanday sozlash haqida o'ylash vaqti keldi.

Bu erda ko'p usullar mavjud. Misol uchun, siz xizmatlar va so'nggi nuqtalar kabi tegishli Kubernetes komponentlarini avtomatik ravishda yaratish uchun ochish buyrug'idan foydalanishingiz mumkin. Aslida, bizning joylashtirish ob'ektimiz uchun ochish buyrug'ini bajarish orqali biz shunday qilamiz:

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

Keling, bir lahzani ajratib ko'rsatish buyrug'ining "-type" variantini ko'rib chiqaylik.

Xizmatimizni ishga tushirish uchun zarur bo'lgan komponentlarni ochib, yaratganimizda, biz, boshqa narsalar qatori, dasturiy ta'minot bilan belgilangan tarmog'imiz ichida joylashgan salom-kvarkus xizmatiga tashqaridan ulanish imkoniyatiga ega bo'lishimiz kerak. Va parametr shrift bizga trafikni ushbu tarmoqqa yo'naltirish uchun yuk balanslagichlari kabi narsalarni yaratish va ulash imkonini beradi.

Masalan, yozish orqali type=LoadBalancer, biz Kubernetes klasterimizga ulanish uchun avtomatik ravishda umumiy bulutda yuk muvozanatini ta'minlaymiz. Bu, albatta, juda yaxshi, lekin siz tushunishingiz kerakki, bunday konfiguratsiya ma'lum bir ommaviy bulutga qat'iy bog'langan va turli muhitlarda Kubernetes nusxalari o'rtasida uzatish qiyinroq bo'ladi.

Bizning misolimizda type=NodePort, ya'ni bizning xizmatimizga tugunning IP manzili va port raqami orqali kirish mumkin. Ushbu parametr hech qanday umumiy bulutlardan foydalanmaslikka imkon beradi, lekin bir qator qo'shimcha qadamlarni talab qiladi. Birinchidan, sizga o'zingizning yuk balanslagichingiz kerak, shuning uchun biz NGINX yuk balanslagichini klasterimizda joylashtiramiz.

6-qadam - yuk balansini o'rnating

minikube bir qator platforma funksiyalariga ega bo'lib, ular kirish nazoratchilari kabi tashqi kirish mumkin bo'lgan komponentlarni yaratishni osonlashtiradi. Minikube Nginx kirish boshqaruvchisi bilan birga keladi va biz qilishimiz kerak bo'lgan narsa uni yoqish va sozlashdir.

minikube addons enable ingress

Endi biz minikube klasterimizda ishlaydigan bitta buyruq bilan Nginx kirish kontrollerini yaratamiz:

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

7-qadam - kirishni sozlash

Endi biz Nginx kirish boshqaruvchisini salom-kvarkus so'rovlarini qabul qiladigan tarzda sozlashimiz kerak.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Va nihoyat, biz ushbu konfiguratsiyani qo'llashimiz kerak.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

kubectl apply -f ingress.yml

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Bularning barchasini o'z kompyuterimizda qilayotganimiz sababli, http so'rovlarini minikube-ga NGINX yuk balanslagichiga yo'naltirish uchun oddiygina tugunimizning IP-manzilini /etc/ hosts fayliga qo'shamiz.

192.168.99.100 hello-quarkus.info

Hammasi shunday, endi bizning minikube xizmatimizga Nginx kirish boshqaruvchisi orqali tashqaridan kirish mumkin.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Xo'sh, bu oson edi, to'g'rimi? Yoki unchalik emasmi?

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

OpenShift-da ishlash (kod tayyor konteynerlar)

Keling, bularning barchasi Red Hat OpenShift Konteyner Platformasida (OCP) qanday amalga oshirilishini ko'rib chiqaylik.

Minikube-da bo'lgani kabi, biz Code Ready Containers (CRC) ko'rinishida bitta tugunli OpenShift klaster dizaynini tanlaymiz. Ilgari u minishift deb nomlangan va OpenShift Origin loyihasiga asoslangan bo‘lsa, endi u CRC bo‘lib, Red Hat’ning OpenShift konteyner platformasida qurilgan.

Bu erda, afsuski, biz: "OpenShift ajoyib!"

Dastlab biz OpenShift-dagi ishlanmalar Kubernetes-dagi ishlanmalardan farq qilmasligini yozishni o'ylagandik. Va aslida bu shunday. Ammo ushbu postni yozish jarayonida biz OpenShift bo'lmaganda qancha qo'shimcha harakatlar qilish kerakligini esladik va shuning uchun bu yana ajoyib. Biz hamma narsa osonlik bilan bajarilishini yaxshi ko'ramiz va bizning misolimiz minikube bilan solishtirganda OpenShift-da joylashtirish va ishga tushirish qanchalik osonligi bizni ushbu postni yozishga undadi.

Keling, jarayonni ko'rib chiqamiz va nima qilishimiz kerakligini ko'rib chiqamiz.

Shunday qilib, minikube misolida biz Docker-dan boshladik... Kutib turing, endi bizga Docker-ni mashinaga o'rnatish kerak emas.

Va bizga mahalliy git kerak emas.
Va Maven kerak emas.
Va konteyner tasvirini qo'lda yaratishingiz shart emas.
Va siz konteyner tasvirlari omborini qidirishingiz shart emas.
Va kirish boshqaruvchisini o'rnatishning hojati yo'q.
Va siz kirishni sozlashingiz shart emas.

Tushundingiz, to'g'rimi? Ilovamizni OpenShift-da joylashtirish va ishga tushirish uchun sizga yuqoridagilardan hech biri kerak emas. Va jarayonning o'zi shunday ko'rinadi.

1-qadam – OpenShift klasteringizni ishga tushiring

Biz Red Hat-ning Code Ready konteynerlaridan foydalanamiz, bu aslida bir xil Minikube, lekin faqat to'liq huquqli bitta tugunli Openshift klasteri bilan.

crc start

2-qadam - OpenShift klasteriga dasturni yarating va o'rnating

Aynan shu bosqichda OpenShift-ning soddaligi va qulayligi butun ulug'vorligi bilan namoyon bo'ladi. Barcha Kubernetes distributivlarida bo'lgani kabi, bizda klasterda dasturni ishga tushirishning ko'plab usullari mavjud. Va, KUK misolida bo'lgani kabi, biz eng oddiyini tanlaymiz.

OpenShift har doim konteynerlashtirilgan ilovalarni yaratish va ishga tushirish uchun platforma sifatida qurilgan. Konteyner qurilishi har doim ushbu platformaning ajralmas qismi bo'lib kelgan, shuning uchun tegishli vazifalar uchun bir tonna qo'shimcha Kubernetes resurslari mavjud.

Biz OpenShift-ning Source 2 Image (S2I) jarayonidan foydalanamiz, bu jarayonda manbani (kod yoki ikkilik) olish va uni OpenShift klasterida ishlaydigan konteynerlashtirilgan tasvirga aylantirishning bir necha xil usullari mavjud.

Buning uchun bizga ikkita narsa kerak:

  • Bizning manba kodimiz git omborida
  • Qurilish amalga oshiriladigan quruvchi tasviri.

Red Hat tomonidan ham, hamjamiyat darajasida saqlanadigan bunday tasvirlar juda ko'p va biz Java ilovasini yaratayotganim uchun OpenJDK tasviridan foydalanamiz.

Siz S2I tuzilishini OpenShift Developer grafik konsolidan ham, buyruq satridan ham ishga tushirishingiz mumkin. Biz yangi dastur buyrug'idan foydalanamiz, unga quruvchi tasvirini va manba kodini qaerdan olish kerakligini aytamiz.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

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

Mana, bizning ilovamiz yaratildi. Bunda S2I jarayoni quyidagi ishlarni amalga oshirdi:

  • Ilovani yaratish bilan bog'liq bo'lgan barcha turdagi narsalar uchun xizmat ko'rsatish qurilmasi yaratildi.
  • OpenShift Build konfiguratsiyasi yaratildi.
  • Men quruvchi tasvirini ichki OpenShift docker registriga yuklab oldim.
  • Mahalliy omborga klonlangan "Salom dunyo".
  • Men u erda maven pom borligini ko'rdim, shuning uchun men maven yordamida dasturni tuzdim.
  • Kompilyatsiya qilingan Java ilovasini o'z ichiga olgan yangi konteyner tasviri yaratildi va bu tasvirni ichki konteyner registriga qo'ying.
  • Pod, xizmat va boshqalar uchun texnik xususiyatlar bilan Kubernetes Deployment yaratildi.
  • Men konteyner tasvirini joylashtirishni boshladim.
  • Xizmat ko'rsatish moslamasi olib tashlandi.

Ushbu ro'yxatda juda ko'p narsa bor, lekin asosiysi shundaki, butun tuzilish faqat OpenShift ichida amalga oshiriladi, ichki Docker registri OpenShift ichida va qurish jarayoni barcha Kubernetes komponentlarini yaratadi va ularni klasterda ishga tushiradi.

Agar siz konsolda S2I ishga tushirilishini vizual tarzda kuzatsangiz, qurish tugallangandan so'ng, qurilish podining qanday ishga tushirilishini ko'rishingiz mumkin.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Endi quruvchi pod jurnallarini ko'rib chiqamiz: birinchidan, u maven o'z ishini qanday bajarishini va java ilovamizni yaratish uchun bog'liqliklarni yuklashini ko'rsatadi.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Maven qurilishi tugallangandan so'ng, konteyner tasvirini yaratish boshlanadi va keyin bu qurilgan tasvir ichki omborga yuboriladi.

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Hammasi shu, qurilish jarayoni tugallandi. Endi ilovamizning pods va xizmatlari klasterda ishlayotganiga ishonch hosil qilaylik.

oc get service

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Ana xolos. Va faqat bitta jamoa. Biz qilishimiz kerak bo'lgan narsa bu xizmatni tashqaridan kirish uchun ochishdir.

3-qadam – xizmatni tashqaridan kirish uchun ochish

KUC misolida bo'lgani kabi, OpenShift platformasida ham bizning "Salom dunyomiz" tashqi trafikni klaster ichidagi xizmatga yo'naltirish uchun routerga muhtoj. OpenShift buni juda oson qiladi. Birinchidan, HAProxy marshrutlash komponenti sukut bo'yicha klasterga o'rnatiladi (uni bir xil NGINXga o'zgartirish mumkin). Ikkinchidan, Marshrutlar deb nomlangan maxsus va yuqori darajada sozlanishi mumkin bo'lgan manbalar mavjud va ular eski Kubernetesdagi Ingress ob'ektlarini eslatadi (aslida, OpenShift yo'nalishlari hozirda OpenShift-da ishlatilishi mumkin bo'lgan Ingress ob'ektlari dizayniga katta ta'sir ko'rsatdi) , lekin bizning "Salom dunyo" uchun , va deyarli barcha boshqa holatlarda standart Marshrut biz uchun qo'shimcha konfiguratsiyasiz etarli.

“Salom dunyo” uchun yo‘naltiriladigan FQDN yaratish uchun (ha, OpenShiift’ning xizmat nomlari bo‘yicha marshrutlash uchun o‘z DNS’si bor), biz shunchaki xizmatimizni ochib beramiz:

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

oc expose service quarkus-hello-world

Agar siz yangi yaratilgan marshrutni ko'rsangiz, u erda FQDN va boshqa marshrutlash ma'lumotlarini topishingiz mumkin:

oc get route

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Va nihoyat, biz xizmatimizga brauzer orqali kiramiz:

Kechirasiz, OpenShift, biz sizni yetarlicha qadrlamadik va sizni odatdagidek qabul qildik

Ammo endi bu juda oson edi!

Biz Kubernetesni va ushbu texnologiya bizga imkon beradigan hamma narsani yaxshi ko'ramiz, shuningdek, soddalik va qulaylikni yaxshi ko'ramiz. Kubernetes taqsimlangan, kengaytiriladigan konteynerlarning ishlashini nihoyatda soddalashtirish uchun yaratilgan, ammo uning soddaligi bugungi kunda ilovalarni ishlab chiqarishga qo'yish uchun etarli emas. Aynan shu erda OpenShift o'ynaydi, vaqtni kuzatib boradi va birinchi navbatda ishlab chiquvchiga qaratilgan Kubernetesni taklif qiladi. OpenShift platformasini ishlab chiquvchi uchun maxsus moslashtirish uchun katta kuch sarflandi, jumladan S2I, ODI, Developer Portal, OpenShift Operator Framework, IDE integratsiyasi, Developer Catalogies, Helm integratsiyasi, monitoring va boshqalar kabi vositalarni yaratish.

Umid qilamizki, ushbu maqola siz uchun qiziqarli va foydali bo'ldi. Portaldagi OpenShift platformasida siz qo'shimcha manbalar, materiallar va rivojlanish uchun foydali bo'lgan boshqa narsalarni topishingiz mumkin Red Hat dasturchilari.

Manba: www.habr.com

a Izoh qo'shish