Tidzagwiritsa ntchito Gitlab CI ndi GitOps yamanja kuti tigwiritse ntchito ndikugwiritsa ntchito Canary deployment ku Kubernetes
Zolemba kuchokera mndandandawu:
- (Nkhani iyi)
Kutumiza kwa Canary pogwiritsa ntchito ArgoCI - Kutumiza kwa Canary pogwiritsa ntchito Istio
- Kutumiza kwa Canary pogwiritsa ntchito Jenkins-X Istio Flagger
Tidzatumiza Canary pamanja kudzera pa GitOps ndikupanga/kusintha zida zazikulu za Kubernetes. Nkhaniyi idapangidwa kuti ikhale yoyambira ndi momwe kutumizira kumagwirira ntchito ku Kubernetes Canary, popeza pali njira zowonjezera zopangira zokha, zomwe tikambirana m'nkhani zotsatirazi.
Kutumiza kwa Canary
Ndi njira ya Canary, zosintha zimayamba kugwiritsidwa ntchito kwa kagulu kakang'ono ka ogwiritsa ntchito. Kupyolera mu kuyang'anira, zolemba zolemba, kuyesa pamanja, kapena njira zina zofotokozera, kumasulidwa kumayesedwa musanatulutsidwe kwa onse ogwiritsa ntchito.
Kubernetes Deployment (zosintha)
Njira yosasinthika ya Kubernetes Deployment ndikusintha, pomwe ma pod angapo amayambitsidwa ndi mitundu yatsopano ya zithunzi. Ngati adalengedwa popanda mavuto, ma pod okhala ndi zithunzi zakale amathetsedwa, ndipo ma pod atsopano amapangidwa mofanana.
GitOps
Timagwiritsa ntchito GitOps mu chitsanzo ichi chifukwa ife:
- kugwiritsa ntchito Git ngati gwero limodzi lachowonadi
- timagwiritsa ntchito Git Operations pomanga ndi kutumiza (palibe malamulo ena kupatula git tag/merge omwe akufunika)
Chitsanzo:
Tiyeni tiyesetse kuchita bwino - kukhala ndi chosungira chimodzi cha ma code ogwiritsira ntchito ndi chimodzi cha zomangamanga.
Posungira ntchito
Iyi ndi Python + Flask API yosavuta kwambiri yomwe imabwezera yankho ngati JSON. Tipanga phukusi kudzera pa GitlabCI ndikukankhira zotsatira ku Gitlab Registry. Mu registry tili ndi mitundu iwiri yotulutsa:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Kusiyana kokha pakati pawo ndikusintha kwa fayilo yobwezeredwa ya JSON. Timagwiritsa ntchito pulogalamuyi kuti tiwone mosavuta momwe tingathere mtundu womwe tikulankhula nawo.
Malo osungirako zomangamanga
Mu turnip iyi titumiza kudzera pa GitlabCI kupita ku Kubernetes, .gitlab-ci.yml
zikuwoneka ngati:
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
Kuti muyendetse nokha mudzafunika tsango, mutha kugwiritsa ntchito Gcloud:
gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80
Muyenera kufota KUBECONFIG
mu GitlabCI, yomwe idzakhala ndi config kuti mufike kubectl
ku gulu lanu.
Mutha kuwerenga za momwe mungapezere zidziwitso zamagulu (Gcloud)
Infrastructure Yaml
M'malo osungirako zomangamanga tili ndi ntchito:
apiVersion: v1
kind: Service
metadata:
labels:
id: app
name: app
spec:
ports:
- port: 80
protocol: TCP
targetPort: 5000
selector:
id: app
type: LoadBalancer
Ndipo kutumizidwa mu 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
Ndipo kutumizidwa kwina 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
Dziwani kuti app-deploy ilibe zofananira zomwe zafotokozedwa pano.
Kukonzekera koyamba
Kuti muyambe kutumizira koyamba, mutha kuyambitsa mapaipi a GitlabCI pamanja panthambi yayikulu. Pambuyo pake kubectl
ayenera kutulutsa zotsatirazi:
Tikuwona app
kutumizidwa ndi 10 replicas ndi app-canary ndi 0. Palinso LoadBalancer yomwe titha kulowamo curl
kudzera pa IP Yakunja:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
Tikuwona kuti kuyesa kwathu kumangobwezera "v1".
Kutumiza kwa Canary
Gawo 1: tulutsani mtundu watsopano kwa ogwiritsa ntchito ena
Timayika chiwerengero cha zofananira kukhala 1 mufayilo ya deploy-canary.yaml ndi chithunzi chatsopano:
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
Mu fayilo deploy.yaml
tinasintha chiwerengero cha replicas kukhala 9:
kind: Deployment
metadata:
name: app
spec:
replicas: 9
selector:
matchLabels:
id: app
...
Timakankhira zosinthazi kumalo komwe kutumizidwa kudzayambira (kudzera pa GitlabCI) ndikuwona zotsatira zake:
Utumiki wathu udzalozera kuzinthu zonse ziwiri, popeza onse ali ndi chosankha pulogalamu. Chifukwa chakusakhazikika kwa Kubernetes, tiyenera kuwona mayankho osiyanasiyana ~ 10% ya zopempha:
Zomwe tikugwiritsa ntchito pano (GitOps, yotengedwa kuchokera ku Git ngati Gwero Limodzi La Choonadi) ndikukhalapo kwa magawo awiri omwe ali ndi zofananira zogwira ntchito, imodzi pamtundu uliwonse.
~10% ya ogwiritsa ntchito amazolowera mtundu watsopano ndikuyesa mosazindikira. Ino ndi nthawi yoti muwone zolakwika muzolemba ndi kuwunikira deta kuti mupeze zovuta.
Gawo 2: Tulutsani mtundu watsopano kwa ogwiritsa ntchito onse
Tinaganiza kuti zonse zidayenda bwino ndipo tsopano tikufunika kutulutsa mtundu watsopano kwa ogwiritsa ntchito onse. Kuti tichite izi timangosintha deploy.yaml
kukhazikitsa mtundu watsopano wa chithunzicho ndi kuchuluka kwa zofananira zofanana ndi 10. Mu deploy-canary.yaml
timayika chiwerengero cha replicas kubwerera ku 0. Pambuyo potumiza, zotsatira zake zidzakhala motere:
Kufotokozera mwachidule
Kwa ine, kuyendetsa ntchitoyo pamanja motere kumathandiza kumvetsetsa momwe zimapangidwira mosavuta pogwiritsa ntchito ma k8s. Popeza Kubernetes amakulolani kuti musinthe chilichonse kudzera pa API, masitepewa amatha kukhala opangidwa ndi zolemba.
Chinthu chinanso chomwe chiyenera kukhazikitsidwa ndi malo olowera oyesa (LoadBalancer kapena kudzera pa Ingress) omwe angapezeke mwatsopano. Itha kugwiritsidwa ntchito kusakatula pamanja.
M'nkhani zamtsogolo, tiwona njira zina zopangira zokha zomwe zimagwiritsa ntchito zambiri zomwe tachita.
Werenganinso zolemba zina pa blog yathu:
Kodi kusamuka kuchokera ku ClickHouse popanda chilolezo kupita ku ClickHouse ndi chilolezo kudatsogolera chiyani? Kupanga ma module amphamvu a Nginx Sinthani zida za nxs-build - wothandizira pakumanga ma deb ndi ma rpm phukusi Chidziwitso cha Hashicorp Consul's Kubernetes Authorization Zomwe tidayenera kukumana nazo tikamagwiritsa ntchito Csync2 Telegraph bot ya Redmine. Momwe mungachepetsere moyo wanu ndi ena
Source: www.habr.com