Canary Deployment Jenkins-X Istio Flaggerin avulla
Suoritamme Canaryn käyttöönoton manuaalisesti GitOpsin kautta ja luomme/muokkaamme Kubernetesin pääresursseja. Tämä artikkeli on tarkoitettu ensisijaisesti esittelyyn miten käyttöönotto toimii Kubernetes Canaryssa, koska on olemassa tehokkaampia automaatiomenetelmiä, joita tarkastelemme seuraavissa artikkeleissa.
Canary-strategiassa päivitykset koskevat ensin vain osaa käyttäjiä. Valvonnan, lokitietojen, manuaalisen testauksen tai muiden palautekanavien avulla julkaisua testataan ennen kuin se julkaistaan kaikille käyttäjille.
Kubernetes-käyttöönotto (jatkuva päivitys)
Kubernetes Deploymentin oletusstrategia on jatkuva päivitys, jossa tietty määrä podeja käynnistetään kuvien uusilla versioilla. Jos ne luotiin ilman ongelmia, vanhoja kuvien versioita sisältävät podit lopetetaan ja uudet podit luodaan rinnakkain.
GitOps
Käytämme GitOpsia tässä esimerkissä, koska:
käyttämällä Gitiä yhtenä totuuden lähteenä
käytämme Git Operations -toimintoja rakentamiseen ja käyttöönottoon (muita komentoja ei tarvita kuin git tag/merge)
Esimerkki
Otetaanpa hyvä käytäntö - yksi arkisto sovelluskoodille ja yksi infrastruktuurille.
Sovellusarkisto
Tämä on hyvin yksinkertainen Python+Flask API, joka palauttaa vastauksen JSON-muodossa. Rakennamme paketin GitlabCI:n kautta ja välitämme tuloksen Gitlabin rekisteriin. Meillä on rekisterissä kaksi erilaista julkaisuversiota:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Ainoa ero niiden välillä on muutos palautetussa JSON-tiedostossa. Käytämme tätä sovellusta visualisoidaksemme mahdollisimman helposti, minkä version kanssa kommunikoimme.
Infrastruktuurin arkisto
Tässä nauriissa otamme käyttöön GitlabCI:n kautta Kubernetesiin, .gitlab-ci.yml on seuraava:
Siirrämme nämä muutokset arkistoon, josta käyttöönotto alkaa (GitlabCI:n kautta), ja näemme tuloksena:
Palvelumme osoittaa molempiin käyttöönottoihin, koska molemmissa on sovelluksen valitsin. Kubernetesin oletussatunnaistuksen vuoksi meidän pitäisi nähdä erilaisia vastauksia ~10 %:lle pyynnöistä:
Sovelluksemme (GitOps, otettu Gitistä yhtenä totuuden lähteenä) nykyinen tila on kaksi käyttöönottoa aktiivisilla replikoilla, yksi jokaiselle versiolle.
~10 % käyttäjistä tutustuu uuteen versioon ja testaa sitä tahattomasti. Nyt on aika tarkistaa lokien ja seurantatiedon virheet ongelmien löytämiseksi.
Vaihe 2: Julkaise uusi versio kaikille käyttäjille
Päätimme, että kaikki meni hyvin, ja nyt meidän on julkaistava uusi versio kaikille käyttäjille. Tätä varten vain päivitämme deploy.yaml kuvan uuden version asentaminen ja kopioiden lukumäärä on 10. In deploy-canary.yaml asetamme replikoiden lukumääräksi takaisin 0. Käyttöönoton jälkeen tulos on seuraava:
Yhteenvetona
Minulle käyttöönoton suorittaminen manuaalisesti tällä tavalla auttaa ymmärtämään, kuinka helposti se voidaan määrittää k8s:lla. Koska Kubernetes antaa sinun päivittää kaiken API:n kautta, nämä vaiheet voidaan automatisoida komentosarjojen avulla.
Toinen asia, joka on otettava käyttöön, on testaajan sisääntulopiste (LoadBalancer tai Ingressin kautta), jonka kautta pääsee vain uuteen versioon. Sitä voidaan käyttää manuaaliseen selaamiseen.
Tulevissa artikkeleissa tutustumme muihin automatisoituihin ratkaisuihin, jotka toteuttavat suurimman osan tekemästämme.