„Canary“ diegimą atliksime rankiniu būdu per „GitOps“ ir kurdami / modifikuodami pagrindinius „Kubernetes“ išteklius. Šis straipsnis pirmiausia skirtas įžangai su tuo, kaip diegimas veikia „Kubernetes Canary“, nes yra veiksmingesnių automatizavimo metodų, kuriuos apsvarstysime kituose straipsniuose.
Taikant Kanarų strategiją, naujinimai pirmiausia taikomi tik tam tikram vartotojų pogrupiui. Stebėjimo, žurnalo duomenų, rankinio testavimo ar kitais grįžtamojo ryšio kanalais leidimas išbandomas prieš išleidžiant jį visiems vartotojams.
„Kubernetes“ diegimas (atnaujinamas)
Numatytoji „Kubernetes“ diegimo strategija yra nuolatinis atnaujinimas, kai paleidžiamas tam tikras skaičius rinkinių su naujomis vaizdų versijomis. Jei jie buvo sukurti be problemų, ankštys su senomis vaizdų versijomis nutraukiamos ir lygiagrečiai sukuriamos naujos.
„GitOps“
Šiame pavyzdyje naudojame „GitOps“, nes:
naudojant Git kaip vienintelį tiesos šaltinį
kūrimui ir diegimui naudojame „Git Operations“ (nereikia jokių kitų komandų, išskyrus „git tag“ / „merge“)
Pavyzdys
Imkimės gerosios praktikos – turėti vieną saugyklą programos kodui ir vieną infrastruktūros.
Programų saugykla
Tai labai paprasta Python+Flask API, kuri atsakymą pateikia kaip JSON. Mes sukursime paketą per GitlabCI ir perkelsime rezultatą į Gitlab registrą. Registre turime dvi skirtingas leidimo versijas:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Vienintelis skirtumas tarp jų yra grąžinto JSON failo pakeitimas. Naudojame šią programą norėdami kuo lengviau įsivaizduoti, su kuria versija bendraujame.
Infrastruktūros saugykla
Šioje ropėje mes įdiegsime per GitlabCI į Kubernetes, .gitlab-ci.yml yra toks:
Šiuos pakeitimus perkeliame į saugyklą, iš kurios prasidės diegimas (per GitlabCI), ir matome:
Mūsų paslauga nurodys abu diegimus, nes abiejuose yra programos parinkiklis. Dėl numatytojo „Kubernetes“ atsitiktinės atrankos, turėtume matyti skirtingus atsakymus ~ 10% užklausų:
Dabartinė mūsų programos būsena (GitOps, paimta iš Git kaip vienas tiesos šaltinis) yra du diegimai su aktyviomis kopijomis, po vieną kiekvienai versijai.
~10% vartotojų susipažįsta su nauja versija ir netyčia ją išbando. Dabar pats laikas patikrinti, ar žurnaluose ir stebėjimo duomenyse nėra klaidų, kad būtų galima rasti problemų.
2 veiksmas: išleiskite naują versiją visiems vartotojams
Nusprendėme, kad viskas klostėsi gerai ir dabar turime išleisti naują versiją visiems vartotojams. Norėdami tai padaryti, mes tiesiog atnaujiname deploy.yaml įdiegiant naują vaizdo versiją ir kopijų skaičių, lygų 10. In deploy-canary.yaml nustatome kopijų skaičių atgal į 0. Po įdiegimo rezultatas bus toks:
Sumavimas
Man rankinis diegimo vykdymas tokiu būdu padeda suprasti, kaip lengvai jį galima konfigūruoti naudojant k8s. Kadangi „Kubernetes“ leidžia atnaujinti viską per API, šiuos veiksmus galima automatizuoti naudojant scenarijus.
Kitas dalykas, kurį reikia įdiegti, yra testerio įėjimo taškas (LoadBalancer arba per Ingress), per kurį galima pasiekti tik naują versiją. Jis gali būti naudojamas rankiniam naršymui.
Kituose straipsniuose apžvelgsime kitus automatizuotus sprendimus, kurie įgyvendina didžiąją dalį to, ką padarėme.
Taip pat skaitykite kitus mūsų tinklaraščio straipsnius: