Usambazaji wa Canary kwa kutumia Bendera ya Jenkins-X Istio
Tutafanya uwekaji wa Canary sisi wenyewe kupitia GitOps na kuunda/kurekebisha rasilimali kuu za Kubernetes. Nakala hii imekusudiwa kimsingi kwa utangulizi na jinsi upelekaji unavyofanya kazi katika Kubernetes Canary, kwa kuwa kuna njia bora zaidi za automatisering, ambazo tutazingatia katika makala zifuatazo.
Kwa mkakati wa Canary, masasisho yanatumiwa kwanza kwa kikundi kidogo cha watumiaji. Kupitia ufuatiliaji, data ya kumbukumbu, majaribio ya mikono, au njia zingine za maoni, toleo hujaribiwa kabla ya kutolewa kwa watumiaji wote.
Usambazaji wa Kubernetes (sasisho linaloendelea)
Mkakati chaguo-msingi wa Kubernetes Deployment ni usasishaji unaoendelea, ambapo idadi fulani ya maganda huzinduliwa kwa matoleo mapya ya picha. Ikiwa ziliundwa bila matatizo, maganda yenye matoleo ya zamani ya picha yanasitishwa, na maganda mapya yanaundwa kwa sambamba.
GitOps
Tunatumia GitOps katika mfano huu kwa sababu sisi:
kutumia Git kama chanzo kimoja cha ukweli
tunatumia Uendeshaji wa Git kwa ajili ya kujenga na kupeleka (hakuna amri nyingine isipokuwa git tag/merge zinahitajika)
Mfano
Wacha tufanye mazoezi mazuri - kuwa na hazina moja ya nambari ya maombi na moja ya miundombinu.
Hifadhi ya maombi
Hii ni API rahisi sana ya Python+Flask ambayo inarudisha jibu kama JSON. Tutaunda kifurushi kupitia GitlabCI na kusukuma matokeo kwenye Usajili wa Gitlab. Katika Usajili tuna matoleo mawili tofauti ya kutolewa:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Tofauti pekee kati yao ni mabadiliko katika faili iliyorejeshwa ya JSON. Tunatumia programu hii kuibua kwa urahisi iwezekanavyo ni toleo gani tunawasiliana nalo.
Hifadhi ya miundombinu
Katika turnip hii tutapeleka kupitia GitlabCI hadi Kubernetes, .gitlab-ci.yml inaonekana kama hii:
Tunasukuma mabadiliko haya kwenye hazina ambayo uwekaji utaanza (kupitia GitlabCI) na kuona kama matokeo:
Huduma yetu itaelekeza kwenye matumizi yote mawili, kwa kuwa zote zina kiteuzi cha programu. Kwa sababu ya kubahatisha chaguo-msingi ya Kubernetes, tunapaswa kuona majibu tofauti kwa ~10% ya maombi:
Hali ya sasa ya programu yetu (GitOps, iliyochukuliwa kutoka Git kama Chanzo Kimoja cha Ukweli) ni uwepo wa uwekaji wa nakala mbili zenye nakala amilifu, moja kwa kila toleo.
~10% ya watumiaji hufahamu toleo jipya na kulijaribu bila kukusudia. Sasa ni wakati wa kuangalia makosa katika kumbukumbu na data ya ufuatiliaji ili kupata matatizo.
Hatua ya 2: Toa toleo jipya kwa watumiaji wote
Tuliamua kuwa kila kitu kilikwenda vizuri na sasa tunahitaji kusambaza toleo jipya kwa watumiaji wote. Ili kufanya hivyo, tunasasisha tu deploy.yaml kusakinisha toleo jipya la picha na idadi ya nakala sawa na 10. In deploy-canary.yaml tunaweka idadi ya nakala nyuma hadi 0. Baada ya kupelekwa, matokeo yatakuwa kama ifuatavyo:
Akihitimisha
Kwangu, kuendesha upelekaji kwa mikono kwa njia hii husaidia kuelewa jinsi inavyoweza kusanidiwa kwa urahisi kwa kutumia k8s. Kwa kuwa Kubernetes hukuruhusu kusasisha kila kitu kupitia API, hatua hizi zinaweza kuendeshwa kiotomatiki kupitia hati.
Jambo lingine linalohitaji kutekelezwa ni sehemu ya kuingilia ya kijaribu (LoadBalancer au kupitia Ingress) ambayo ni toleo jipya pekee linaweza kufikiwa. Inaweza kutumika kwa kuvinjari kwa mikono.
Katika makala zijazo, tutaangalia masuluhisho mengine ya kiotomatiki ambayo yanatekeleza mengi ambayo tumefanya.