instruere in Kubernetes #1: Gitlab CI

Gitlab CI nos utemur et GitOps manuali ad efficiendum et utendum instruere in Kubernetes Canariis

instruere in Kubernetes #1: Gitlab CI

Articuli ex hac serie:

Manually manually per GitOps instruere faciemus et/modificantes praecipuas opes Kubernetes. Hic articulus est introductio principaliter in animo est quam instruere opera in Kubernetes Canary, cum efficaciores sint methodi automationis, quas in sequentibus articulis considerabimus.


instruere in Kubernetes #1: Gitlab CI

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

Canaria instruere

Cum belli Canariis, updates primum solum ad subsess utentium utentium applicantur. Per vigilantia, stipes datae, probatio manualis, vel alii canales feedback, emissio probatur antequam omnibus usoribus dimittatur.

Kubernetes instruere (renovatio volubilem)

Defectus consilii Kubernetes instruere est volubilem-renovationem, ubi certae siliquae cum novis imaginum versionibus immittuntur. Si sine problematibus creatae sunt, siliquae cum antiquis versionibus imaginum terminantur, et siliquae novae in parallelis fiunt.

GitOps

GitOps in hoc exemplo utimur quia nos:

  • usura Git ut unum fontem veritatis
  • utimur Git Operations pro constructum et instruere (nec praecepta quam git tag/merge opus sunt)

exempli gratia

Sumamus bonam praxim - unum repositio pro applicatione codicis et unum pro infrastructura.

Applicationem repositio

Haec Python+Flask API simplicissima est quae responsionem reddit ut JSON. Nos sarcinam per GitlabCI aedificabimus et eventum Gitlab Subcriptio ventilabimus. In registro habemus duas versiones varias emissio:

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

Sola differentia inter eos est mutatio in file JSON rediit. Hac applicatione utimur ad visualize quam facillime quam cum versione communicamus.

Infrastructure repositio

In hac rapa explicabimus per GitlabCI ad Kubernetes; .gitlab-ci.yml Ea est huiusmodi:

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

Ad ipsum currendum botro indigebis, Gcloud uti potes;

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

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

Opus furca https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure et variabilis creare KUBECONFIG in GitlabCI, quae ad accessum continebit aboutconfig kubectl ad botrum.

Legere potes quomodo ut documentorum pro botro (Gcloud) hic.

Infrastructure Yaml

In reposito infrastructura officium habemus;

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

Et instruere in 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

Et aliam instruere in 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

Nota quod app-explicandi non habet aliquas replicationes adhuc definitas.

Deployment faciendo initial

Incipere initialem instruere, GitlabCI pipeline manually in ramo magistri incipere potes. deinde kubectl output debet sequenti:

instruere in Kubernetes #1: Gitlab CI

Videmus app instruere cum 10 replicationibus et app-canariis cum 0. Est etiam LoadBalancer unde accedere per possumus curl per IP externum:

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

instruere in Kubernetes #1: Gitlab CI

Videmus nostram applicationem probationis tantum "v1" reverti.

Exsecutioni Canariae instruere

Gradus I: novam versionem aliquot users

Numerum replicationum ad 1 in explicandam canary.yaml fasciculi et imaginis novae versionis constituimus:

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

In file deploy.yaml numerum replicarum ad 9 mutavimus;

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

Has mutationes repositorium impellimus ex quibus instruere incipiet (per GitlabCI) et consequenter videbis:

instruere in Kubernetes #1: Gitlab CI

Munus nostrum utrumque instruere demonstrabit, cum utrumque electrix app. Ob defectum randomization Kubernetarum, videre debemus diversa responsa pro ~10% petitionum:

instruere in Kubernetes #1: Gitlab CI

Praesens status nostrae applicationis (GitOps e Git ut Unico Veritatis fonte sumptae) praesentia est duorum inceptorum cum replicationibus activis, una pro singulis versionibus.

~10% utentium nota facta est cum nova versione et praeter intentionem illam. Nunc tempus est errores in truncis et vigilantia notitias invenire problemata.

Gradus II: dimitte novam versionem ad omnes users

Placuimus omnia bene esse et nunc opus est nobis novam versionem omnibus notis evolvere. Ad hoc enim simpliciter update deploy.yaml novam versionem imaginis et numerum replicationum insertis ad 10. In deploy-canary.yaml numerum replicationum ponemus retro ad 0. Post instruere, fiet hoc modo:

instruere in Kubernetes #1: Gitlab CI

quoquo

Mihi, currit instruere manually hoc modo adiuvat ad intellegendum quam facile configurari possit uti k8s. Cum Kubernetes sinit te omnia per API renovare, hi gradus per scripta automari possunt.

Aliud quod efficiendum eget est punctum probatoris (LoadBalancer vel per Ingress) per quod solum nova versio accedere potest. Adhiberi potest ad carpendos manuales.

In futuris articulis, alias solutiones automated solvemus quae maxime efficiunt quod fecimus.

Legunt etiam alia capitula in nostro diario:

Source: www.habr.com

Add a comment