Kanāriju salu izvietoŔana Kubernetes #1: Gitlab CI

Mēs izmantosim Gitlab CI un manuālo GitOps, lai ieviestu un izmantotu Canary izvietoÅ”anu Kubernetes.

Kanāriju salu izvietoŔana Kubernetes #1: Gitlab CI

Raksti no Ŕīs sērijas:

Mēs veiksim Canary izvietoÅ”anu manuāli, izmantojot GitOps un izveidojot/pārveidojot galvenos Kubernetes resursus. Å is raksts galvenokārt ir paredzēts ievadam ar to, kā izvietoÅ”ana darbojas Kubernetes Canary, jo ir efektÄ«vākas automatizācijas metodes, kuras mēs apsvērsim turpmākajos rakstos.


Kanāriju salu izvietoŔana Kubernetes #1: Gitlab CI

https://www.norberteder.com/canary-deployment/

Kanāriju izvietoŔana

Izmantojot Canary stratēģiju, atjauninājumi vispirms tiek lietoti tikai lietotāju apakÅ”kopai. Izmantojot pārraudzÄ«bu, žurnāla datus, manuālu testēŔanu vai citus atgriezeniskās saites kanālus, laidiens tiek pārbaudÄ«ts, pirms tas tiek izlaists visiem lietotājiem.

Kubernetes izvietoŔana (pastāvīgs atjauninājums)

Kubernetes izvietoÅ”anas noklusējuma stratēģija ir nepārtraukta atjaunināŔana, kurā tiek palaists noteikts skaits aplikumu ar jaunām attēlu versijām. Ja tie tika izveidoti bez problēmām, pāksti ar vecām attēlu versijām tiek pārtraukti un paralēli tiek izveidoti jauni podi.

GitOps

Šajā piemērā mēs izmantojam GitOps, jo mēs:

  • izmantojot Git kā vienotu patiesÄ«bas avotu
  • mēs izmantojam Git Operations izveidei un izvietoÅ”anai (nav vajadzÄ«gas citas komandas, izņemot git tagu/merge)

Piemērs

Pieņemsim labu praksi – lai bÅ«tu viens repozitorijs lietojumprogrammas kodam un viens infrastruktÅ«rai.

Lietojumprogrammu repozitorijs

Å Ä« ir ļoti vienkārÅ”a Python+Flask API, kas atgriež atbildi kā JSON. Mēs izveidosim pakotni, izmantojot GitlabCI, un nosÅ«tÄ«sim rezultātu Gitlab reÄ£istram. ReÄ£istrā mums ir divas dažādas laidiena versijas:

  • wuestkamp/k8s-deployment-example-app:v1
  • wuestkamp/k8s-deployment-example-app:v2

VienÄ«gā atŔķirÄ«ba starp tām ir izmaiņas atgrieztajā JSON failā. Mēs izmantojam Å”o lietojumprogrammu, lai pēc iespējas vienkārŔāk vizualizētu, ar kuru versiju mēs sazināmies.

Infrastruktūras repozitorijs

Å ajā rāceņā mēs caur GitlabCI izvietosim Kubernetes, .gitlab-ci.yml ir Ŕāds:

image: traherom/kustomize-docker

before_script:
   - printenv
   - kubectl version

stages:
 - deploy

deploy test:
   stage: deploy
   before_script:
     - echo $KUBECONFIG
   script:
     - kubectl get all
     - kubectl apply -f i/k8s

   only:
     - master

Lai to palaistu pats, jums būs nepiecieŔams klasteris, varat izmantot Gcloud:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b

gcloud compute firewall-rules create incoming-80 --allow tcp:80

Jums vajag dakÅ”iņu https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure un izveidojiet mainÄ«go KUBECONFIG GitlabCI, kurā bÅ«s piekļuves konfigurācija kubectl uz jÅ«su kopu.

Varat lasīt par to, kā iegūt akreditācijas datus klasterim (Gcloud) Ŕeit.

Infrastruktūra Yaml

Infrastruktūras repozitorijā mums ir pakalpojums:

apiVersion: v1
kind: Service
metadata:
 labels:
   id: app
 name: app
spec:
 ports:
 - port: 80
   protocol: TCP
   targetPort: 5000
 selector:
   id: app
 type: LoadBalancer

Un izvietoŔana iekŔā deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: app
spec:
 replicas: 10
 selector:
   matchLabels:
     id: app
     type: main
 template:
   metadata:
     labels:
       id: app
       type: main
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

Un vēl viena izvietoÅ”ana deploy-canary.yaml:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 0
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

Ņemiet vērā, ka lietotņu izvietoÅ”anai vēl nav definēta neviena kopija.

Veicot sākotnējo izvietoÅ”anu

Lai sāktu sākotnējo izvietoÅ”anu, varat manuāli palaist GitlabCI konveijeru galvenajā atzarā. Pēc tam kubectl jāizvada sekojoÅ”ais:

Kanāriju salu izvietoŔana Kubernetes #1: Gitlab CI

Mēs redzam app izvietoÅ”ana ar 10 replikām un app-canary ar 0. Ir arÄ« LoadBalancer, no kura mēs varam piekļūt, izmantojot curl caur ārējo IP:

while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done

Kanāriju salu izvietoŔana Kubernetes #1: Gitlab CI

Mēs redzam, ka mÅ«su testa lietojumprogramma atgriež tikai ā€œv1ā€.

Kanāriju izvietoŔanas izpilde

1. darbÄ«ba: izlaidiet jaunu versiju dažiem lietotājiem

Mēs iestatījām kopiju skaitu uz 1 failā deploy-canary.yaml un jaunās versijas attēlā:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 1
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

Failā deploy.yaml mēs mainījām kopiju skaitu uz 9:

kind: Deployment
metadata:
 name: app
spec:
 replicas: 9
 selector:
   matchLabels:
     id: app
...

Mēs virzām Ŕīs izmaiņas repozitorijā, no kuras sāksies izvietoÅ”ana (izmantojot GitlabCI), un rezultātā redzam:

Kanāriju salu izvietoŔana Kubernetes #1: Gitlab CI

MÅ«su pakalpojums norādÄ«s uz abiem izvietojumiem, jo ​​abiem ir lietotņu atlasÄ«tājs. Kubernetes noklusējuma randomizācijas dēļ mums vajadzētu redzēt dažādas atbildes uz ~ 10% pieprasÄ«jumu:

Kanāriju salu izvietoŔana Kubernetes #1: Gitlab CI

PaÅ”reizējais mÅ«su lietojumprogrammas stāvoklis (GitOps, kas ņemts no Git kā vienots patiesÄ«bas avots) ir divu izvietojumu klātbÅ«tne ar aktÄ«vām replikām, viena katrai versijai.

~10% lietotāju iepazÄ«st jaunu versiju un netīŔi to testē. Tagad ir pienācis laiks pārbaudÄ«t, vai žurnālos un pārraudzÄ«bas datos nav kļūdu, lai atrastu problēmas.

2. darbÄ«ba: izlaidiet jauno versiju visiem lietotājiem

Mēs nolēmām, ka viss noritēja labi, un tagad mums ir jāizlaiž jaunā versija visiem lietotājiem. Lai to izdarÄ«tu, mēs vienkārÅ”i atjauninām deploy.yaml instalējot jaunu attēla versiju un reprodukciju skaitu, kas vienāds ar 10. In deploy-canary.yaml mēs iestatām repliku skaitu atpakaļ uz 0. Pēc izvietoÅ”anas rezultāts bÅ«s Ŕāds:

Kanāriju salu izvietoŔana Kubernetes #1: Gitlab CI

Summējot

Manuāla izvietoÅ”anas palaiÅ”ana Ŕādā veidā palÄ«dz saprast, cik viegli to var konfigurēt, izmantojot k8s. Tā kā Kubernetes ļauj atjaunināt visu, izmantojot API, Ŕīs darbÄ«bas var automatizēt, izmantojot skriptus.

Vēl viena lieta, kas jāievieÅ”, ir testētāja ieejas punkts (LoadBalancer vai caur Ingress), caur kuru var piekļūt tikai jaunajai versijai. To var izmantot manuālai pārlÅ«koÅ”anai.

Nākamajos rakstos mēs apskatÄ«sim citus automatizētus risinājumus, kas ievieÅ” lielāko daļu mÅ«su paveiktā.

Lasiet arī citus rakstus mūsu emuārā:

Avots: www.habr.com

Iegādājieties uzticamu mitināŔanu vietnēm ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa vietņu mitināŔanu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster