Ngati mukukayikira kuti Kubernetes atha kuphunziridwa mwachangu kwambiri, ndikupangira kuti muyesere nokha. Mwakutero, mutadziwa bwino izi, mudzatha kugwiritsa ntchito pulogalamu yotengera ma microservices mu gulu la Kubernetes. Nditha kutsimikizira izi, popeza ndi njira yomweyi yomwe ndimaphunzitsa makasitomala athu kugwira ntchito ndi Kubernetes. Kodi nchiyani chikupangitsa bukhuli kukhala losiyana ndi ena? Ndipotu pali zinthu zambiri. Chifukwa chake, zambiri mwazinthu izi zimayamba ndi kufotokozera zinthu zosavuta - malingaliro a Kubernetes ndi mawonekedwe a lamulo la kubectl. Olemba zinthuzi akuganiza kuti owerenga awo amadziwa bwino ntchito, ma microservices, ndi zotengera za Docker. Tidzapita njira ina. Choyamba, tikambirana momwe tingayendetsere pulogalamu yotengera ma microservices pakompyuta. Kenako tiwona zomangira ziwiya za microservice iliyonse. Ndipo pambuyo pake, tidzadziwana ndi Kubernetes ndikuyang'ana kutumiza ntchito kutengera ma microservices mgulu loyendetsedwa ndi Kubernetes.
Njira iyi, ndi njira yapang'onopang'ono ya Kubernetes, idzapereka kumvetsetsa kwakuya kwa zomwe zikuchitika zomwe ndizofunikira kwa munthu wamba kuti amvetsetse momwe zonse zimagwirira ntchito ku Kubernetes. Kubernetes ndithudi ndi teknoloji yophweka, ngati iwo akufuna kuiphunzira akudziwa komwe imagwiritsiridwa ntchito.
Tsopano, popanda kuchedwa, tiyeni tiyambe ndi kukambirana za pulogalamu yomwe tikhala tikugwira nayo ntchito.
Kugwiritsa ntchito moyeserera
Ntchito yathu idzachita ntchito imodzi yokha. Zimatengera chiganizo chimodzi monga chothandizira, pambuyo pake, pogwiritsa ntchito zida zowunikira malemba, amafufuza maganizo a chiganizochi, kupeza kuwunika kwa maganizo a wolemba chiganizo ku chinthu china.
Izi ndi zomwe zenera lalikulu la pulogalamuyi limawonekera.
Kugwiritsa ntchito pa intaneti pakusanthula kwamawu
Kuchokera pamalingaliro aukadaulo, kugwiritsa ntchito kumakhala ndi ma microservices atatu, omwe amathetsa ntchito zingapo:
SA-Frontend ndi seva ya intaneti ya Nginx yomwe imagwiritsa ntchito mafayilo a static React.
SA-WebApp ndi pulogalamu yapaintaneti yolembedwa mu Java yomwe imayang'anira zopempha kuchokera kutsogolo.
SA-Logic ndi pulogalamu ya Python yomwe imasanthula malingaliro pamawu.
Ndikofunikira kudziwa kuti ma microservices sapezeka paokha. Amagwiritsa ntchito lingaliro la "kulekana kwa maudindo", koma nthawi yomweyo ayenera kuyanjana wina ndi mzake.
Deta imayenda mu pulogalamu
Pachithunzi pamwambapa, mutha kuwona magawo owerengeka a dongosolo, kuwonetsa mayendedwe a data mukugwiritsa ntchito. Tiyeni tiwone iwo:
Msakatuli amapempha fayilo kuchokera ku seva index.html (yomwe imatsitsanso phukusi la React application).
Wogwiritsa ntchito amalumikizana ndi pulogalamuyi, izi zimapangitsa kuyimbira foni ku pulogalamu yapaintaneti ya Spring.
Pulogalamu yapaintaneti imatumiza pempho loti mufufuze zolemba ku pulogalamu ya Python.
Ndizomwezo. Tsopano pulogalamu ya React ikugwira ntchito, mutha kuyipeza popita ku adilesi iyi mu msakatuli wanu: localhost:3000. Mutha kusintha china chake mu code yake. Mudzawona nthawi yomweyo zotsatira za kusintha kumeneku mu msakatuli. Izi ndizotheka chifukwa cha zomwe zimatchedwa "hot" m'malo mwa ma module. Izi zimapangitsa chitukuko chakutsogolo kukhala chosavuta komanso chosangalatsa.
▍Kukonzekera pulogalamu ya React kuti ipangidwe
Kuti tigwiritse ntchito pulogalamu ya React, tiyenera kuyisintha kukhala mafayilo osasunthika ndikuwatumizira makasitomala pogwiritsa ntchito seva yapaintaneti.
Choyamba muyenera kukhazikitsa ndikuyendetsa seva ya intaneti ya Nginx. ndi mukhoza kukopera ndi kupeza malangizo a mmene kukhazikitsa ndi kuthamanga izo. Kenako muyenera kukopera zomwe zili mufoda sa-frontend/build ku folda [your_nginx_installation_dir]/html.
Ndi njirayi, fayilo imapangidwa panthawi yomanga pulogalamu ya React index.html ipezeka pa [your_nginx_installation_dir]/html/index.html. Ili ndiye fayilo yomwe, mwachisawawa, seva ya Nginx imapanga ikafika. Seva yakonzedwa kuti imvere padoko 80, koma ikhoza kusinthidwa momwe mukufunira posintha fayilo [your_nginx_installation_dir]/conf/nginx.conf.
Tsopano tsegulani msakatuli wanu ndikupita ku localhost:80. Mudzawona tsamba la React application.
Pambuyo kuthamanga lamulo mu chikwatu sa-webapp chikwatu chidzapangidwa target. Apa ndipamene pulogalamu ya Java idzapezeke, yoyikidwa mu fayilo ya mtsuko, yoimiridwa ndi fayilo sentiment-analysis-web-0.0.1-SNAPSHOT.jar.
▍Kuyendetsa pulogalamu ya Java
Pitani ku foda target ndikuyendetsa pulogalamuyi ndi lamulo ili:
Error creating bean with name 'sentimentController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sa.logic.api.url' in value "${sa.logic.api.url}"
Kwa ife, chofunika kwambiri apa ndi kutchulidwa kwa zosatheka kulongosola tanthauzo sa.logic.api.url. Tiyeni tiwunike kachidindo komwe cholakwikacho chimachitika.
▍Kusanthula kwa ma code a Java
Nayi mawu a code pomwe cholakwika chimachitika.
@CrossOrigin(origins = "*")
@RestController
public class SentimentController {
@Value("${sa.logic.api.url}") // #1
private String saLogicApiUrl;
@PostMapping("/sentiment")
public SentimentDto sentimentAnalysis(
@RequestBody SentenceDto sentenceDto)
{
RestTemplate restTemplate = new RestTemplate();
return restTemplate.postForEntity(
saLogicApiUrl + "/analyse/sentiment", // #2
sentenceDto, SentimentDto.class)
.getBody();
}
}
Mu SentimentController pali munda saLogicApiUrl. Mtengo wake umafotokozedwa ndi katundu sa.logic.api.url.
Mzere saLogicApiUrl zimagwirizana ndi mtengo /analyse/sentiment. Onse pamodzi amapanga adilesi yoyimbira foni ku microservice yomwe imasanthula zolemba.
▍ Khazikitsani mtengo wa katundu
Mu Spring, gwero lazinthu zamtengo wapatali ndi fayilo application.properties, yomwe imapezeka pa sa-webapp/src/main/resources. Koma kugwiritsa ntchito kwake si njira yokhayo yokhazikitsira mitengo ya katundu. Izi zitha kuchitikanso pogwiritsa ntchito lamulo ili:
Mu gawo lotsatira, tikambirana momwe tingayendetsere ma microservices athu muzotengera za Docker. Izi ndizofunikira kuti mukonzekere pulogalamuyo kuti igwire ntchito pagulu la Kubernetes.
Zida za Docker
Kubernetes ndi njira yodzipangira okha kutumiza, kukulitsa ndi kuyang'anira mapulogalamu omwe ali ndi zida. Imatchedwanso "container orchestrator". Ngati Kubernetes imagwira ntchito ndi zotengera, ndiye kuti tisanagwiritse ntchito dongosololi tiyenera kupeza zida izi. Koma choyamba, tiyeni tikambirane za zotengera. Mwina yankho labwino kwambiri ku funso lomwe liri lingapezekemo zolemba ku Docker:
Chithunzi cha chidebe ndi phukusi lopepuka, lodzisunga lokha, lomwe lingagwiritsidwe ntchito, lomwe limaphatikizapo zonse zofunika kuti muyigwiritse ntchito: nambala yogwiritsira ntchito, malo ogwirira ntchito, zida zamakina ndi malaibulale, zoikamo. Mapulogalamu ophatikizidwa angagwiritsidwe ntchito m'malo a Linux ndi Windows, ndipo azigwira ntchito chimodzimodzi mosasamala kanthu za zomangamanga.
Izi zikutanthauza kuti zotengera zimatha kuyendetsedwa pakompyuta iliyonse, kuphatikiza ma seva opanga, ndipo zomwe zili mmenemo zimagwiranso ntchito mofananamo kulikonse.
Kuti mufufuze mawonekedwe a zotengera ndikuziyerekeza ndi njira zina zoyendetsera mapulogalamu, tiyeni tiwone chitsanzo chakugwiritsa ntchito pulogalamu ya React pogwiritsa ntchito makina enieni ndi chidebe.
▍Kupereka mafayilo osasinthika a pulogalamu ya React pogwiritsa ntchito makina enieni
Kuyesera kukonza ntchito yamafayilo osasunthika pogwiritsa ntchito makina enieni, tidzakumana ndi zovuta izi:
Kusagwiritsa ntchito bwino zinthu, popeza makina aliwonse amtundu uliwonse ndi makina ogwiritsira ntchito.
Kudalira nsanja. Zomwe zimagwira pakompyuta yakomweko sizingagwire ntchito pa seva yopanga.
Seva yapaintaneti ya Nginx yomwe imagwiritsa ntchito mafayilo osasunthika omwe akuyenda mu chidebe
Tinkangoyerekeza makina enieni ndi zotengera pamfundo zochepa, koma ngakhale izi ndizokwanira kuti timve mphamvu zazotengera. ndi Mutha kupeza zambiri zazotengera za Docker.
▍Kupanga chithunzi chotengera pulogalamu ya React
Chomwe chimamanga chotengera cha Docker ndi fayilo Dockerfile. Kumayambiriro kwa fayiloyi, mbiri imapangidwa ndi chithunzi chapansi cha chidebecho, ndiye pali ndondomeko ya malangizo omwe amasonyeza momwe angapangire chidebe chomwe chidzakwaniritse zosowa za ntchito inayake.
Tisanayambe kugwira ntchito ndi fayilo Dockerfile, tiyeni tikumbukire zomwe tidachita pokonzekera mafayilo a React kuti akweze ku seva ya Nginx:
Kupanga phukusi la React application (npm run build).
Kuyambira seva ya Nginx.
Kukopera zachikwatu build kuchokera ku chikwatu cha polojekiti sa-frontend ku chikwatu cha seva nginx/html.
Pansipa mutha kuwona kufanana pakati pa kupanga chidebe ndi masitepe omwe ali pamwambapa omwe amachitidwa pakompyuta yanu.
▍Kukonzekera Dockerfile ya pulogalamu ya SA-Frontend
Malangizo omwe aperekedwa mu Dockerfile ntchito SA-Frontend, imakhala ndi magulu awiri okha. Chowonadi ndi chakuti gulu lachitukuko la Nginx lakonzekera zoyambira chithunzi kwa Nginx, yomwe tidzagwiritsa ntchito kupanga chithunzi chathu. Izi ndi njira ziwiri zomwe tiyenera kufotokoza:
Maziko a chithunzicho ayenera kukhala chithunzi cha Nginx.
Zamkatimu Foda sa-frontend/build ziyenera kukopera ku chikwatu cha zithunzi nginx/html.
Ngati muchoka pakufotokozeraku kupita ku fayilo Dockerfile, ndiye zidzawoneka motere:
FROM nginx
COPY build /usr/share/nginx/html
Monga mukuonera, zonse apa ndizosavuta, ndipo zomwe zili mufayilo zimakhala zomveka komanso zomveka. Fayiloyi imauza makina kuti atenge chithunzicho nginx ndi zonse zomwe zilimo kale, ndi kukopera zomwe zili mu bukhuli build ku directory nginx/html.
Apa mutha kukhala ndi funso lokhudza momwe ndingadziwire komwe muyenera kukopera mafayilo kuchokera pafoda build, ndiko kuti, kumene njirayo inachokera /usr/share/nginx/html. Ndipotu, palibenso chovuta apa. Chowonadi ndi chakuti chidziwitso choyenera chingapezeke mu kufotokoza chithunzi.
▍Kumanga chithunzicho ndikuchiyika kunkhokwe
Tisanagwire ntchito ndi chithunzi chomalizidwa, tiyenera kukankhira kumalo osungirako zithunzi. Kuti tichite izi, tidzagwiritsa ntchito nsanja yaulere yamtambo ya Docker Hub. Munthawi imeneyi ya ntchito muyenera kuchita zotsatirazi:
Apa ndi kupitirira mu malamulo ofanana $DOCKER_USER_ID iyenera kusinthidwa ndi dzina lanu la Docker Hub. Mwachitsanzo, gawo ili la lamulo likhoza kuwoneka motere: rinormaloku/sentiment-analysis-frontend.
Pamenepa, lamulo ili likhoza kufupikitsidwa pochotsamo -f Dockerfile, popeza fayiloyi ilipo kale mufoda yomwe tikuchita izi.
Tiyeni tsopano tigwiritse ntchito chithunzi cha Java application.
▍Kupanga chithunzi cha chidebe cha pulogalamu ya Java
Mukudziwa chiyani, mwaphunzira kale zonse zomwe muyenera kudziwa kuti mupange zithunzi zachidebe. Ndicho chifukwa chake gawoli lidzakhala lalifupi kwambiri.
Tsegulani fayilo Dockerfileyomwe ili mufoda ya polojekiti sa-webapp. Ngati muwerenga zolemba za fayiloyi, muwona zomanga zatsopano ziwiri momwemo, kuyambira ndi mawu osakira ENV и EXPOSE: