Teostame Canary juurutamise käsitsi GitOpsi kaudu ja luues/muutes peamisi Kubernetese ressursse. See artikkel on mõeldud eelkõige sissejuhatuseks kuidas juurutamine Kubernetes Canarys töötab, kuna seal on tõhusamaid automatiseerimismeetodeid, mida käsitleme järgmistes artiklites.
Canary strateegia puhul rakendatakse värskendusi esmalt ainult kasutajate alamhulgale. Järelevalve, logiandmete, käsitsi testimise või muude tagasisidekanalite kaudu testitakse väljalaset enne, kui see kõigile kasutajatele avaldatakse.
Kubernetese juurutamine (jooksev värskendus)
Kubernetese juurutamise vaikestrateegia on jooksev värskendus, mille puhul käivitatakse piltide uute versioonidega teatud arv kaustasid. Kui need loodi probleemideta, lõpetatakse piltide vanade versioonidega kaustad ja paralleelselt luuakse uued kaustad.
GitOps
Kasutame selles näites GitOpsi, kuna:
kasutades Gitit ühe tõeallikana
me kasutame koostamiseks ja juurutamiseks Git Operationsi (vaja pole muid käske peale git tag/merge)
Näide
Võtame hea tava – et oleks üks hoidla rakenduse koodi ja üks infrastruktuuri jaoks.
Rakenduste hoidla
See on väga lihtne Python+Flask API, mis tagastab vastuse JSON-ina. Ehitame paketi GitlabCI kaudu ja edastame tulemuse Gitlabi registrisse. Registris on meil kaks erinevat väljalaskeversiooni:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Ainus erinevus nende vahel on muudatus tagastatud JSON-failis. Kasutame seda rakendust, et võimalikult lihtsalt visualiseerida, millise versiooniga me suhtleme.
Infrastruktuuri hoidla
Selles naeris juurutame GitlabCI kaudu Kubernetes, .gitlab-ci.yml on järgmine:
Lükkame need muudatused hoidlasse, millest juurutamine algab (GitlabCI kaudu) ja näeme selle tulemusel:
Meie teenus osutab mõlemale juurutusviisile, kuna mõlemal on rakenduse valija. Kubernetese vaikejuhustamise tõttu peaksime ~10% päringutest nägema erinevaid vastuseid:
Meie rakenduse praegune olek (GitOps, võetud Gitist kui ühtne tõeallikas) on kahe juurutuse olemasolu koos aktiivsete koopiatega, üks iga versiooni jaoks.
~10% kasutajatest saavad uue versiooniga tuttavaks ja testivad seda tahtmatult. Nüüd on õige aeg kontrollida, kas logides ja seireandmetes on vigu, et leida probleeme.
2. samm: avaldage uus versioon kõigile kasutajatele
Otsustasime, et kõik läks hästi ja nüüd peame uue versiooni kõigile kasutajatele levitama. Selleks värskendame lihtsalt deploy.yaml pildi uue versiooni installimine ja koopiate arv on 10. In deploy-canary.yaml määrasime koopiate arvuks tagasi 0. Pärast juurutamist on tulemus järgmine:
Kokkuvõtteks
Minu jaoks aitab juurutuse käsitsi käivitamine sel viisil mõista, kui hõlpsalt saab seda k8s-i abil konfigureerida. Kuna Kubernetes võimaldab teil API kaudu kõike värskendada, saab neid samme skriptide abil automatiseerida.
Teine asi, mis vajab juurutamist, on testeri sisenemispunkt (LoadBalancer või Ingressi kaudu), mille kaudu pääseb ligi ainult uuele versioonile. Seda saab kasutada käsitsi sirvimiseks.
Edaspidistes artiklites uurime teisi automatiseeritud lahendusi, mis rakendavad enamikku meie tehtust.