From 21b0b0f8488cc3e75c2c8ca19fc46b30dac115ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Bj=C3=B8ralt?= Date: Mon, 9 Sep 2024 15:24:37 +0200 Subject: [PATCH] Add release stage. New v2 of API --- README.md | 61 ++++++++++++++++--- ressurser/simple-api/Program.cs | 5 +- ressurser/yaml-eksempler/deploy-complete.yaml | 7 ++- 3 files changed, 61 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index acc7a01..56000da 100644 --- a/README.md +++ b/README.md @@ -204,13 +204,60 @@ kubectl scale --replicas 3 deployments/simple-api-deployment eller i yaml ved å endre på 'replicas' feltet og bruke `kubectl apply` som før. +## 3.3 - Oppdater +### 3.3.1 - Rull ut, rull tilbake +Vi vil teste en ny version. Endre .yaml-filen til å bruke version `v1.1.1-beta` og bruk `kubectl apply` som før. +Se hva som skjer. - - Sette på readiness- og livenessProbes - - Oppdater til neste versjon. Denne krever tilkobling til DB og failer derfor - - Her kan man eventuelt velge å bruke en strategi som canary eller blue/green - - Rull tilbake. - - Gå til neste seksjon -> lage en database -## 2.2 Slides om åssen deployments endres, replicasets osv +Det funket jo dårlig. +Du kan liste releasene du har hatt ved +``` +kubectl rollout history deployment simple-api-deployment +``` + +Og rulle tilbake ved (bruk pil opp og endre history -> undo): +``` +kubectl rollout history deployment simple-api-deployment +``` + +### 3.3.2 - Rolling release +Vi skal fra v1.0.0 til v1.1.0 og vil bare gjøre det fort og gæli. + +Legg til denne seksjonen i yaml-filen din, på 'rotnivå' +``` +strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 # Antall (eller %) ekstra poder + maxUnavailable: 0 # Antall (eller %) manglende poder +``` + +Du kan bytte frem og tilbake mellom `v1.0.0` og `v1.1.0` om du vil teste litt ulike konfigurasjoner av maxSurge og maxUnavailable + +### 3.3.3 - Canary release eller Blue/Green release (Hvis vi rekker) +Vi skal helt til `v2.0.0` som er en ny stor release. +Her kan vi velge mellom to andre strategier: Canary eller Blue/Green. + +Canary går ut på å gi en brøkdel av brukere den nye versionen, og gradvis la den ta over. +Blue/Green går ut på å gjøre klar v2 i bakgrunnen, også brått endre _servicen_ til å heller rute til den nye versionen. + +Disse kan gjøres automatisk, men vi skal gjøre dem manuelt nå. + +**Canary:** +Lag en ny deployment ved å kopiere den gamle. +Gi _deploymenten_ et nytt navn, men _bruk samme labels på containeren_ + +For å få f eks 25% av den nye versjonen, kjør den nye deploymenten med 1 replica og den gamle med 3. + +Bruk swagger et par ganger og se hvor ofte du får en ny type på /info. + +Skaler den nye opp og slett den gamle når du føler deg trygg på v2 + +**Blue/Green** +Lag en ny deployment ved å kopiere den gamle. +Bruk nye navn og labels på alt. + +Deploy og spinn opp. Bruk eventuelt en debug-container som i steg 1 for å teste først. -# Pause \ No newline at end of file +Deretter, endre servicen til å heller bruke labels som stemmer med de nye containerne. \ No newline at end of file diff --git a/ressurser/simple-api/Program.cs b/ressurser/simple-api/Program.cs index 1106c06..ac9a0fb 100644 --- a/ressurser/simple-api/Program.cs +++ b/ressurser/simple-api/Program.cs @@ -23,6 +23,7 @@ return new { newField = "Some new field", + majorNewField = "Nope I'm a captain", favoriteLunch, machineName }; @@ -49,8 +50,4 @@ .WithName("Health") .WithOpenApi(); -// This app requires some time to get started. -// Maybe you should use a readiness-probe? -Thread.Sleep(3000); - app.Run(); diff --git a/ressurser/yaml-eksempler/deploy-complete.yaml b/ressurser/yaml-eksempler/deploy-complete.yaml index d354cfb..03d9e7d 100644 --- a/ressurser/yaml-eksempler/deploy-complete.yaml +++ b/ressurser/yaml-eksempler/deploy-complete.yaml @@ -5,6 +5,11 @@ metadata: labels: app: simple-api name: simple-api-deployment +strategy: + type: RollingUpdate + rollingUpdate: + maxSurge: 1 # Max number (or %) of extra pods + maxUnavailable: 0 # Max number of missing pods spec: replicas: 3 selector: @@ -17,7 +22,7 @@ spec: app: simple-api spec: containers: - - image: "ghcr.io/varianter/k8s-101:v1.0.1" + - image: "ghcr.io/varianter/k8s-101:v1.1.1" name: api ports: - containerPort: 8080