Ni plenumos la Kanarian deplojon permane per GitOps kaj kreante/modifante la ĉefajn rimedojn de Kubernetes. Ĉi tiu artikolo estas destinita ĉefe por enkonduko kun kiel funkcias deplojo en Kubernetes Canary, ĉar ekzistas pli efikaj metodoj de aŭtomatigo, kiujn ni konsideros en la sekvaj artikoloj.
Kun la Kanaria strategio, ĝisdatigoj unue estas aplikataj al nur subaro de uzantoj. Per monitorado, protokolaj datumoj, manlibrotestado aŭ aliaj sugestaj kanaloj, la liberigo estas provita antaŭ ol ĝi estas liberigita al ĉiuj uzantoj.
Kubernetes Deplojo (ruliĝanta ĝisdatigo)
La defaŭlta strategio por Kubernetes Deployment estas ruliĝanta ĝisdatigo, kie certa nombro da podoj estas lanĉitaj kun novaj versioj de la bildoj. Se ili estis kreitaj sen problemoj, balgoj kun malnovaj versioj de bildoj estas finitaj, kaj novaj podoj estas kreitaj paralele.
GitOps
Ni uzas GitOps en ĉi tiu ekzemplo ĉar ni:
uzante Git kiel ununuran fonton de vero
ni uzas Git-Operaciojn por konstruo kaj deplojo (neniaj komandoj krom git tag/merge estas bezonataj)
Ekzemplo:
Ni prenu bonan praktikon - havi unu deponejon por aplika kodo kaj unu por infrastrukturo.
Aplika deponejo
Ĉi tio estas tre simpla Python+Flask API, kiu resendas respondon kiel JSON. Ni konstruos la pakaĵon per GitlabCI kaj puŝos la rezulton al la Gitlab-Registro. En la registro ni havas du malsamajn eldonversiojn:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
La nura diferenco inter ili estas la ŝanĝo en la resendita JSON-dosiero. Ni uzas ĉi tiun aplikaĵon por vidi kiel eble plej facile, kun kiu versio ni komunikas.
Infrastruktura deponejo
En ĉi tiu napo ni deplojos per GitlabCI al Kubernetes, .gitlab-ci.yml aspektas tiel:
Ni puŝas ĉi tiujn ŝanĝojn al la deponejo de kiu komenciĝos la deplojo (per GitlabCI) kaj vidas kiel rezulton:
Nia Servo montros ambaŭ deplojojn, ĉar ambaŭ havas la aplikan elektilon. Pro defaŭlta hazardigo de Kubernetes, ni devus vidi malsamajn respondojn por ~10% de petoj:
La nuna stato de nia aplikaĵo (GitOps, prenita de Git kiel Single Source Of Truth) estas la ĉeesto de du deplojoj kun aktivaj kopioj, unu por ĉiu versio.
~10% de uzantoj konatiĝas kun nova versio kaj neintence testas ĝin. Nun estas la tempo por kontroli erarojn en la protokoloj kaj monitoraj datumoj por trovi problemojn.
Paŝo 2: Liberigu la novan version al ĉiuj uzantoj
Ni decidis, ke ĉio iris bone kaj nun ni devas eldoni la novan version al ĉiuj uzantoj. Por fari tion ni simple ĝisdatigas deploy.yaml instalante novan version de la bildo kaj la nombro da kopioj egala al 10. En deploy-canary.yaml ni fiksas la nombron da kopioj reen al 0. Post deplojo, la rezulto estos kiel sekvas:
Resumi
Por mi, ruli la deplojon permane tiel helpas kompreni kiom facile ĝi povas esti agordita per k8s. Ĉar Kubernetes permesas vin ĝisdatigi ĉion per API, ĉi tiuj paŝoj povas esti aŭtomatigitaj per skriptoj.
Alia afero, kiu devas esti efektivigita, estas testilo enirpunkto (LoadBalancer aŭ per Ingress) tra kiu nur la nova versio povas esti alirebla. Ĝi povas esti uzata por mana foliumado.
En estontaj artikoloj, ni kontrolos aliajn aŭtomatigitajn solvojn, kiuj efektivigas plejparton de tio, kion ni faris.